1. 程式人生 > >dd 命令 sd卡系統遷移

dd 命令 sd卡系統遷移

trac ace rds content 出現問題 bind data repl star

Linux系統如果想做備份還原,使用ghost的時候經常出現問題,後來發現可以直接使用dd命令完成硬盤的克隆和還原.當拷貝完硬盤後,就可以拿這個硬盤放到其它設備上跑了。也就是完成了“燒寫”了。

實際操作中,最好使用另一個系統啟動,如另一個硬盤的系統,或者用live cd。當然,拷貝當前運行中的系統也是可以的,但不知當前的這個系統還有哪些不確定東西,所以還是不建議。

用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

dd 命令 sd卡系統遷移