dd 命令:convert and copy a file
用法:
dd if=/PATH/FROM/SRC of=/PATH/TO/DEST
bs=#:block size, 複製單元大小;
count=#:複製多少個 bs;
磁碟拷貝:
dd if=/dev/sda of=/dev/sdb
備份 MBR
dd if=/dev/sda of=/tmp/mbr.bak bs=512 count=1
破壞 MBR 中的 bootloader:
dd if=/dev/zero of=/dev/sda bs=256 count=1
兩個特殊裝置:
/dev/null: 資料黑洞;
/dev/zero:吐零
1. 做硬碟對拷:
dd if=/dev/sda of=/dev/sdb bs=1024k &
注意:
(1). 先改 fstab 檔案,把 LABLE 換成對應的 /dev/sda(不改的話,拷完後重啓系統不知道從哪塊盤啓動了)
/dev/sda2 / ext3 defaults 1 1
/dev/sda5 /data ext3 defaults 1 2
/dev/sda1 /boot ext3 defaults 1 2
(2). 一定要寫 bs=1024k,一定要加 k, 預設是 bytes, 不加 K 或 M, 是以 bytes 寫入,
有可能系統要掛了, 至於 也有人寫 bs=4M, 沒啥區別,最後速度差不多。
(3). 加 & 後台進行, 因為要用當前的終端來檢視 dd 進度, 如果忘了加 &, 可以用 Ctrl+z
把 dd 程序移到後台,再執行 bg 記其後台執行 (為了在當前終端檢視進度)。
2. 檢視 dd 完成進度,要不然鬼知道啥時候能 dd 完成啊
ps -ef|grep dd //檢視 dd 程序 id 號, 其實上邊命令加& 後,己經顯示了。
kill -USR1 id //檢視 dd 完成進度
100118036480 bytes (100 GB) copied, 1346.94 seconds, 74.3 MB/s
如果想時時檢視進度,可以用下面語句:
watch -n 1 kill -USR1 3730 // 每 2 秒檢視一次進度
while kill -USR1 3730;do sleep 2;done; //每 2 秒檢視一次進度
這種是通過傳送 USR1 訊號的方法,去產生一個標準的 IO 錯誤,來達到顯示當前 COPY 進度與 COPY 速度的目的。
3. 如果 sdb 原來是一個裸盤沒有格式化過,dd 可能並不能拷貝 superblock 資訊,所以盤不能 mount 起來。
所以只需要進入 fdisk 介面:
# fdisk /dev/sdb
# w
“write table to disk and exit”,sdb 就可以 mount 起來了,如果是格過的,可能需要 fsck 一下就可以了
注意:建議不要輕易 dd,有可能把系統搞壞, 在有把握情況下或資料備份過情況下使用 dd
本文永久更新連結地址:http://www.linuxidc.com/Linux/2017-03/141749.htm