Dd

如何將整個磁碟複製到更大的磁碟然後解除安裝?

  • December 20, 2018

我所做的是複製一個具有三個分區的小型 32GB 快閃記憶體模組。我碰巧有一個 32GB 的 USB,所以我認為它可能會起作用;它沒有。東芝的 32GB 似乎與 Sandisk 的 32GB 有點不同。

無論如何,然後拿了一個 2TB 的外部驅動器並做了完全相同的事情。具體來說,我做了以下事情:

dd if=/dev/sdX of=/dev/sdY bs=100M

最後一個塊是作為部分副本出現還是如果首先到達EOF,它會被丟棄**?**

以便從本質上複製整個快閃記憶體模組 - 分區表和所有。32GB -> 2TB 很容易,因為dd實用程序在讀取最後(第三個)分區的末尾後正確停止。

所以,我現在要做的只是創建一個包含整個快閃記憶體映像的簡單二進制 blob。我的 2TB 驅動器現在相對於原始驅動器進行了相同的分區:sdx1, sdx2, sdx3. 所以,我再次接受dd了以下內容:

dd if=/dev/sdx of=firmware.bin bs=100M

這樣做不僅會複製我感興趣的第一個 32GB,而且還會繼續複製整個 2TB 驅動器,或者當我嘗試它時也是如此。我可以通過以下方法找到感興趣的分區的確切字節長度:

$ lsblk -b
NAME                         MAJ:MIN RM          SIZE RO TYPE  MOUNTPOINT
sdc                            8:32   0 2000398933504  0 disk  
├─sdc1                         8:33   0     134217728  0 part  
├─sdc2                         8:34   0    2147483648  0 part  
└─sdc3                         8:35   0   29734297600  0 part  

解決此問題的明確方法是將塊大小設置dd為一個字節,然後將要讀取的塊數設置為上述三個大小的總和:

dd if=/dev/sdc of=firmware.bin bs=1 count=32015998976

但我無法想像這實際上需要多長時間。

編輯:對上述好奇心的快速測試顯示穩定的~150KB/s 傳輸速率。


tl; dr我如何才能獨占複製遠大於分區總和的磁碟的前三個分區?

如果您也需要,只需複制您需要的分區和 MBR。

MBR 儲存在磁碟的前 512 個字節中。

dd if=/dev/sdX of=/path/to/mbr_file.img bs=512 count=1

複製每個分區

dd if=/dev/sdX1 of=/path/to/partition1.img bs=512

dd if=/dev/sdX2 of=/path/to/partition2.img bs=512

dd if=/dev/sdX3 of=/path/to/partition3.img bs=512

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