創建 SD 卡的磁碟映像時出現問題
我已經建構了一個分區大小為 3.1 GB 的 Armbian 自定義映像,現在我已經完成了它的工作。它目前被寫入使用 GUID 分區表 (GPT) 的可引導 64 GB SD 卡。
我的問題是,當我想使用 Ubuntu 製作卡的圖像時,我得到一個 63 GB 大小的圖像文件,但我不想要一個有 60 GB 空白空間的圖像文件。
我尋找通過使用
truncate
命令縮短圖像文件的其他方法,並使用創建圖像dd count=
但它不起作用。當我使用dd
它時,它會創建一個圖像文件,該文件在安裝時是所有“可用空間”和 PMBR,並truncate
會破壞一個工作圖像文件。所以(除非我做錯了),我怎樣才能創建一個包含啟動資訊的 SD 卡的 3 GB 映像?
truncate
是一個很好的工具。您需要縮小映像,因此它包含分區表中定義的每個分區。換句話說,如果最接近末尾的分區的末尾扇區是N
(注意它不一定是編號最高的分區),N+1
則需要圖像的扇區(+1
因為編號從 開始0
)。使用
gdisk -l image
來了解N
.該卡很可能使用 512 字節扇區,並且分區表在根據 512 字節扇區解釋時是有效的(為了比較:看看當這個假設不成立時會發生什麼)。所以你需要
(N+1)*512
字節(或更多,擁有更多並不是致命的)。truncate
因此。首先直接從卡中讀取這個字節數會給你同樣的結果。一種簡單的方法(儘管非 POSIX,請參閱此)是
head -c number-of-bytes-here /dev/sdx > image
.然後,您需要 33 個額外的邏輯扇區用於輔助(備份)GPT。再次使用
truncate
並將33*512
字節添加到文件 (truncate -s +16896 image
)。truncate
我們可以使用第一個(或使用 閱讀更多內容)將圖像縮小到所需的最終大小head
,但是分兩步執行此操作會導致這額外的 33 個扇區包含零,而不是可能會立即乾擾的垃圾。第一次截斷(或創建部分圖像)丟棄了原始的輔助 GPT。使用
gdisk image
並讓它解決問題。它會告訴你disk size is smaller than the main header indicates
和invalid backup GPT header, but valid main header; regenerating backup header from main header
。多虧了第二個truncate
,才有了備用 GPT 的空間。您只需要“將w
表寫入磁碟並退出”;該工具將重寫 GPT,包括備份的。