Linux中dd命令的用法
阿新 • • 發佈:2017-12-11
dddd命令: 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文件。
從光盤拷貝iso鏡像:
dd?if=/dev/cdrom?of=/root/cd.iso
拷貝光盤數據到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 of=/root/1Gb.file dd?if=/dev/zero?bs=4096?count=250000 of=/root/1Gb.file
通過比較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
Linux中dd命令的用法