我的問題在 dd/harddisk/iso-images 的上下文中更通用。以下是詳細資訊。
我有一個即時 ISO 映像,其中包含兩個安裝為/dev/loop1p1
和 的分區/dev/loop1p2
,並且我有一個硬碟,末尾有很多未分配的空白空間。此外,我連接了一個 USB 驅動器(寫入了相同的圖像),內容可在/dev/sdb1
、 和 處獲得/dev/sdb2
。
所以我的任務非常基本:
/dev/sdb2
將USB 分割區(或安裝的 iso )複製/dev/loop1p2
到 HDD 中的空/未分配空間。
我相信dd
這是前進的方向,因為情況總是如此。
if=
邊:
儘管dd
接受整個磁碟 ( )或/dev/sdb
分區 (等) 作為第一個參數,但 HDD ( ) 中的其餘參數需要是同構的,並且似乎是決定方。/dev/sdb1
/dev/sdb2
if=
of=
/dev/sda
of=
邊:
我還沒有在硬碟端創建分區來將其傳遞給命令of=
的參數dd
。如果我使用完整的硬碟/dev/sda
作為of
描述符,硬碟上現有的分割區將會遺失,這絕對是不可取的。
所以重申一下這個問題:
如何將特定 USB 驅動器克隆到 HDD?
/dev/sdb2
另外,如果我以某種方式在硬碟上創建一個新的空分區,其尺寸與or的“精確”尺寸/dev/loop1p2
並使用它作為參數,會有什麼幫助嗎of=
?
答案1
/dev/sdb2
如果我以某種方式在硬碟上建立一個新的空分區,其尺寸與or的「精確」尺寸/dev/loop1p2
並使用它作為參數,會有什麼幫助嗎of=
?
是的,這可能是最簡單的方法。大小不必完全相等,可以更大。嚴格來說,它至少必須與內部文件系統一樣大/dev/loop1p2
,這可能比它本身小得多/dev/loop1p2
。取得給定檔案系統的確切大小的方法取決於檔案系統(ext、btrfs 等不同的工具)。不過,檔案系統比其分割區小得多的情況並不常見,因此 的大小/dev/loop1p2
是合理且合理的。安全的最低限度。
如果新分割區對於檔案系統來說太小,您最終會得到不健康的檔案系統克隆,可能會遺失一些資料和/或元資料。適當的fsck
工具可能會也可能不會使克隆正式健康,但它不會恢復任何不適合的資料。
如果新分區更大,就不會發生任何壞事。無論 中有什麼檔案系統/dev/loop1p2
,它都不應該關心目標分割區是否更大。建立更大的分割區會浪費空間,除非您打算隨後擴大檔案系統以佔用整個分割區。
所以是的, 的大小/dev/loop1p2
很可能最適合新分割區。有些工具可能會關注分割區類型,因此您應該正確設定新分割區的ID(對於不同的分割區)MBR 中的 DOS 分區表和GUID分區表)。
可以在不建立新分割區的情況下進行複製嗎?是的,但這不值得。
像這樣的設備節點/dev/sdx3
只是一個有用的抽象,用於存取預先定義的片段/dev/sdx
(並且該片段之外沒有任何內容)。這意味著dd of=/dev/sdx3
您可以dd of=/dev/sdx
運行恰當的偏移量 ( obs=
, seek=
),通常注意不要寫入超出片段 ( count=
) 的範圍。很麻煩,但完全可以將您的克隆/dev/sdb2
到目標硬碟上的未分配空間,而無需在那裡創建分區。但:
- 任何拼字錯誤或計算錯誤都可能導致覆蓋目標硬碟中您不想觸及的部分(然後您就會知道
dd
代表「資料破壞者」); - 儘管很少有工具可以使用
/dev/sdx
和偏移,但您確實需要一個分區,/dev/sdx3
例如方便地在實踐中使用克隆的檔案系統,所以遲早你會創建它; - 如果沒有分區,克隆佔用的空間被認為是空閒的;任何理智的工具都不應主動使用它,但是你可能會忘記被佔用片段的確切大小,甚至忘記它被佔用的事實。
由於這些原因,在克隆之前創建分區是正確的做法。一旦你擁有它,of=
正確的方式就是指向dd
它。