Linux

沒有可用空間的磁碟映像

  • July 20, 2018

我有一張可啟動的 16GB SD 卡的圖像。我用以下方法創建了圖像:

cat /dev/sdd | gzip >sdcard.img.gz

我很高興,因為

$ du -h sdcard.img.gz
482M    sdcard.img.gz

482MB 而不是 16GB,耶!

這是(未壓縮)圖像的詳細資訊:

$ du -h sdcard.img
15G     sdcard.img
$ partx -s sdcard.img
NR START     END SECTORS SIZE NAME UUID
1 16384   81919   65536  32M      6e1be81b-01
2 81920 3588095 3506176 1.7G      6e1be81b-02

但是,現在我需要將此圖像寫回 SD 卡,但我不想寫 14GB 的尾隨零/垃圾!那需要很長時間。

  1. 如何在不複製最後一個分區之後的內容的情況下創建映像?
  2. 當我已經創建了整個 SD 卡的圖像時,如何截斷它以不包含無用的垃圾?

關鍵是,我不關心備份中圖像的大小,但我關心傳輸回 SD 卡的大小,因為複製到 SD 卡很慢,複製 14GB 無用數據是沒有意義的。因此,正如 Internet 上的其他答案所暗示的那樣,壓縮磁碟映像或複製到稀疏感知文件系統並不是我想要的。

回答您的第一個問題:假設您在那裡有一個 MBR,我建議您執行類似dd‘ing 原始驅動器的第一個兆字節(包含引導記錄和可能的引導載入程序),然後遍歷其中包含的分區: dev=/dev/sda fdisk -l "$dev" | sed -ne '/^\//s,\(^[^ ]*\) .*,\1,p' | while read part do dd "if=$part" "of=$(basename "$part")" done 然後您將第一兆字節記錄到目標驅動器,請核心使用partprobeor讀取分區表kpartx。在此之後,您應該能夠dd將相應的圖像內容添加到新分區。

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