天天看點

dd指令的使用簡介

dd指令: convert and copy a file 

用法:  

 dd if=/PATH/FROM/SRC of=/PATH/TO/DEST

   bs=#: block size, 複制單元大小

   count=#:複制多少個bs

   of=file 寫到所命名的檔案而不是到标準輸出

   if=file 從所命名檔案讀取而不是從标準輸入

   bs=size 指定塊大小(既是ibs也是obs)

   ibs=size 一次讀size個byte

   obs=size 一次寫size個byte

   cbs=size 一次轉化size個byte

   skip=blocks 從開頭忽略blocks個ibs大小的塊

   seek=blocks 從開頭忽略blocks個obs大小的塊

   count=n 隻拷貝n個記錄

  用指定的參數轉換檔案

   conv=conversion[,conversion...]

   轉換參數:

    ascii 轉換 EBCDIC 為 ASCII

    ebcdic 轉換 ASCII 為 EBCDIC

    block 轉換一行資料為長度為 cbs 的記錄,不足部分用空格填充。

    unblock 替代cbs長度的每一行尾的空格為新行

    lcase 把大寫字元轉換為小寫字元

    ucase 把小寫字元轉換為大寫字元

    nocreat 不建立輸出檔案

    noerror 出錯時不停止

    notrunc 不截斷輸出檔案

    sync 把每個輸入塊填充到ibs個位元組,不足部分用空(NUL)字元補齊   

備份:  

 dd if=/dev/sdx of=/dev/sdy

   将本地的/dev/sdx整盤備份到/dev/sdy

  dd if=/dev/sdx of=/path/to/image

   将/dev/sdx全盤資料備份到指定路徑的image檔案

  dd if=/dev/sdx | gzip >/path/to/image.gz

   備份/dev/sdx全盤資料,并利用gzip工具進行壓縮,儲存到指定路徑

 恢複:

  dd if=/path/to/image of=/dev/sdx

   将備份檔案恢複到指定盤

  gzip -dc /path/to/image.gz | dd of=/dev/sdx

   将壓縮的備份檔案恢複到指定盤

 拷貝記憶體資料到硬碟

  dd if=/dev/mem of=/root/mem.bin bs=1024

   将記憶體裡的資料拷貝到root目錄下的mem.bin檔案

 從CD光牒拷貝iso鏡像

  dd if=/dev/cdrom of=/root/cd.iso

   拷貝CD光牒資料到root檔案夾下,并儲存為cd.iso檔案

 銷毀磁盤資料

  dd if=/dev/urandom of=/dev/sda1

   利用随機的資料填充硬碟,在某些必要的場合可以用來銷毀資料。執行此操作以後,/dev/ sda1将無法挂載,建立和拷貝操作無法執行。

 得到最恰當的block size

  dd if=/dev/zero bs=1024 count=1000000

   of=/root/1Gb.file

  dd if=/dev/zero bs=2048 count=500000

  dd if=/dev/zero bs=4096 count=250000

 通過比較dd指令輸出中所顯示的指令執行時間,即可确定系統最佳的block size大小

 測試硬碟讀寫速度

  dd if=/dev/zero of=/root/1Gb.file bs=1024 count=1000000

  dd if=/root/1Gb.file bs=64k | dd of=/dev/null

  通過上兩個指令輸出的執行時間,可以計算出測試硬碟的寫/讀/速度

 修複硬碟

  dd if=/dev/sda of=/dev/sda

   當硬碟較長時間(比如1,2年)放置不使用後,磁盤上會産生消磁點。當磁頭讀到這些區域時會遇到困難,并可能導緻I/O錯誤。當這種情況影響到硬碟的第一個扇區時,可能導緻硬碟報廢。上邊的指令有可能使這些資料起死回生,且這個過程是安全高效的。 

示例:  

  1.備份MBR:

[root@anonymous ~]#dd if=/dev/sda1 of=/tmp/mbr.bak bs=512
   count=11+0 records in
   1+0 records out
   512 bytes (512 B) copied, 0.000160395 s, 3.2 MB/s
      

  2.有一個大于2K的二進制檔案fileA。現在想從第64個位元組位置開始讀取,需要讀取的大小是128Byts。又有fileB, 想把上面讀取到的128Bytes寫到第32個位元組開始的位置,替換128Bytes,請問如何實作?

[root@anonymous ~]#dd if=fileA of=fileB bs=1 count=128 skip=63 seek=31 conv=notrunc
   128+0 records in
   128+0 records out
   128 bytes (128 B) copied, 0.000421017 s, 304 kB/s
      

  

  3.建立一個2G的檔案系統,塊大小為2048byte,預留1%可用空間,檔案系統ext4,卷标為TEST,要求此分區開機後自動挂載至/test目錄,且預設有acl挂載選項

   [root@anonymous ~]#dd if=/dev/zero of=test bs=1M count=2048
   2048+0 records in
   2048+0 records out
   2147483648 bytes (2.1 GB) copied, 121.521 s, 17.7 MB/s
   [root@anonymous ~]#mkfs.ext4 -b 2048 -L 'TEST' -m 1 test
   mke2fs 1.41.12 (17-May-2010)
   test is not a block special device.
   Proceed anyway? (y,n) y
   Filesystem label=TEST
   OS type: Linux
   Block size=2048 (log=1)
   Fragment size=2048 (log=1)
   Stride=0 blocks, Stripe width=0 blocks
   131072 inodes, 1048576 blocks
   10485 blocks (1.00%) reserved for the super user
   First data block=0
   Maximum filesystem blocks=537919488
   64 block groups
   16384 blocks per group, 16384 fragments per group
   2048 inodes per group
   Superblock backups stored on blocks: 
    16384, 49152, 81920, 114688, 147456, 409600, 442368, 802816
   Writing inode tables: done                            
   Creating journal (32768 blocks): done
   Writing superblocks and filesystem accounting information: done
   This filesystem will be automatically checked every 35 mounts or
   180 days, whichever comes first.  Use tune2fs -c or -i to override.
   [root@anonymous ~]#tune2fs -o acl test 
   tune2fs 1.41.12 (17-May-2010)
   [root@anonymous ~]#echo '/root/test /mnt/test  ext4  defaults  0 0' >> /etc/fstab
   [root@anonymous ~]#echo '/root/test /mnt/test  ext4  defaults,loop  0 0' >> /etc/fstab
   [root@anonymous ~]#mount -a
      

繼續閱讀