Dd

將源磁碟複製到多個目標磁碟的腳本方法?

  • July 4, 2018

我需要將可引導磁碟複製到不同電腦上的多個磁碟(不同大小),並且它需要是可編寫腳本的,但我找不到辦法。

我在所有東西上都使用 Ubuntu 16.04。

首先我試過dd了,我跑了(解除安裝了磁碟):

$ dd if=/dev/sda bs=1K count=10000000 status=progress | gzip -c > os.img

那大約是 10GB,壓縮文件大約是 3.8GB,源磁碟是 120GB,我正在測試的目標磁碟是 16GB,所以我確信它適用於所有大小,我寫到磁碟:

$ gunzip -c os.img | dd bs=1K of=/dev/sda status=progress

但它沒有啟動,我得到:

核心恐慌 - 不同步:VFS:無法在未知塊 (0,0) 上掛載 root fs

不知道這意味著什麼,所以我用Google搜尋了它,但我沒有找到解決方案。然後我嘗試將磁碟安裝在實時作業系統上,看看是否至少可以正常工作,但我得到:

$ sudo mount /dev/sda1 /mnt
EXT4-fs (sda1): bad geometry: block count 29306624 exceeds size of device (14653670 blocks)

這對我來說沒有意義。任何人都知道我是否可以解決這個問題或者是否有更好的方法來做到這一點?我看到有人推薦 clonezilla,但我找不到可編寫腳本的版本,看來我只能將它與“終端 GUI”一起使用。

問題是源磁碟的大小大於(某些)目標磁碟。這意味著分區表不起作用,因為它是為不同大小的磁碟製作的。

在你的位置,我會編寫一個腳本,使用fdisketc. 首先刪除磁碟上的所有分區,然後創建一個固定大小的分區(它應該與你的圖像來自的分區的大小相同;你可能有創建這樣的分區),然後使其可啟動。這將確保分區表對於該大小的磁碟是正確的。最後你複製分區(例如/dev/sda1)而不是整個磁碟。

順便說一句,同時使用gzip/gunzipdd沒有意義(除非您喜歡進度顯示)-dd所做的只是確保寫入具有特定的大小。你可以使用

gzip -c /dev/sda1 > os.img
gunzip -c os.img > /dev/sdb1

等等,如果你想顯示進度,還有pv.

引用自:https://unix.stackexchange.com/questions/453213