Partition

‘dd’ 可以用來複製到較小的 HDD,知道分區需要編輯嗎?

  • March 23, 2020

我曾經dd像這樣複製磁碟:

dd if=/dev/sdb of=/dev/sda bs=4096 conv=notrunc,noerror,sync

而且它一直執行良好。‘dd’ 上的任何和所有文件都會努力提醒您目標磁碟的大小必須與源磁碟相同或更大。這一定是真的嗎?

現在,我很明白,如果我複製到一個較小的磁碟,我不能指望目標上任何部分 “越界”的分區都完好無損。

但是,完全清楚我需要稍後在目標上編輯我的分區,刪除“超出範圍”的分區,我仍然可以使用“dd”對源進行暴力複製,直至達到目標的物理尺寸?或者當目標達到其大小限制時,會“dd”將目標縮小為一堆冒煙的殘骸;-)

bs=順便說一句,研究這個,我已經看到了從bs=1024到的所有內容的推薦值bs=32M,什麼才是最好的?

正如其他人在這裡提到dd的那樣,由於放置在磁碟末尾的 GPT 表的副本,使用只是不起作用。

我已設法使用以下方法遷移到較小的驅動器:

首先 - 啟動到您選擇的 liveCD 發行版。

調整源驅動器分區的大小以確實適合較小驅動器的約束(gparted例如使用)。然後,假設sda是源磁碟,使用sgdisk,首先從源驅動器創建 GPT 表的備份以防萬一:`

   sgdisk -b=gpt.bak.bin /dev/sda

假設sdb是目標,將表從源驅動器複製到目標:

   sgdisk -R=/dev/sdb /dev/sda

sgdisk現在會抱怨它嘗試將標頭副本放在目標磁碟的邊界之外,但隨後會回退並將標頭正確放置在目標磁碟的上限。

gparted使用您選擇的工具(例如)驗證是否已在目標驅動器上創建了正確的分區表複製。

使用dd,將每個分區從源驅動器複製到目標:

dd if=/dev/sda1 of=/dev/sdb1 bs=1M
dd if=/dev/sda2 of=/dev/sdb2 bs=1M
dd if=/dev/sda3 of=/dev/sdb3 bs=1M
etc...

顯然,如果您在沒有備份的情況下複製 GPT 分區表或在讀取內容時混淆了驅動器的名稱,dd您可以與您的內容告別 :)

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