linux系統下的硬盤複製方法
首先將要複製和被複制的硬盤均連接到linux系統,然後
用fdisk -l查看當前所有分區信息(記得用root,否則執行了啥也看不到),如:
Device Boot Start End Blocks Id System
/dev/sdb1 2048 1002047 500000 83 Linux
/dev/sdb2 1002048 12002047 5500000 83 Linux
/dev/sdb3 12002048 13002047 500000 83 Linux
/dev/sdb4 13002048 15002047 1000000 83 Linux
上面是我爲了方便寫文檔而做的分區,可以看到Blocks十分工整,那是故意而爲之的。
全盤拷貝的命令:
dd if=/dev/sdb of=/dev/sdc
分區拷貝:
dd bs=512 count=[fdisk命令中最大的end數+1] if=/dev/sdb of=name.img
以上爲例:
dd bs=512 count=15002048 if=/dev/sdb of=ghost_linux_latelee.img
由於ghost_linux_latelee.img會很大,可以在拷貝時將其壓縮:
dd bs=512 count=15002048 if=/dev/sdb | gzip -9 > ghost_linux_latelee.img.gz
上面所做的,就是傳說的系統“備份”,或叫“系統克隆”。
對應的,有系統恢復的操作。命令如下:
dd if=ghost_linux_latelee.img of=/dev/sda
如果是壓縮包,則命令爲:
gzip -c -d ghost_linux_latelee.img.gz | dd of=/dev/sda
在上面的拷貝過程中,並不知道拷貝了多少,只有最終結束時才顯示出時間、拷貝速度。爲了查看進度,可以在另一個終端輸入(記得用root):
watch -n 5 killall -USR1 dd
(注:killall並不是傳說中把進程kill掉,而是發送一個指定的信號到指定的進程)
之後,就能執行dd的終端看到進度了,如:
58299+0 records in
58298+0 records out
29848576 bytes (30 MB) copied, 4.67728 s, 6.4 MB/s
161403+0 records in
161402+0 records out
82637824 bytes (83 MB) copied, 9.69359 s, 8.5 MB/s
238651+0 records in
238650+0 records out
122188800 bytes (122 MB) copied, 14.7105 s, 8.3 MB/s
備註:用dd的方式,得到的鏡像文件十分龐大——取決於所要做的系統的大小。比如,拷貝4GB的分區,真的就是拷貝4GB,即使是用gzip壓縮,也壓縮不了多少,文件依然很大。
另外dd的方式也消除了我之前的擔心,因爲現在的Linux發行版的分區使用硬盤uuid作爲標識,而不是/dev/sda1這種格式,據說uuid更好。但用dd拷貝,竟然連硬盤的uuid也一一拷貝,毫無變化,這的確讓我吃驚。不過,目前看沒什麼時間研究dd了。
PS:使用dd命令,可以讀取硬盤的mbr扇區,示例如下:
dd if=/dev/sdb of=mbr.bin bs=512 count=1