Linux
沒有可用空間的磁碟映像
我有一張可啟動的 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 的尾隨零/垃圾!那需要很長時間。
- 如何在不複製最後一個分區之後的內容的情況下創建映像?
- 當我已經創建了整個 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
然後您將第一兆字節記錄到目標驅動器,請核心使用partprobe
or讀取分區表kpartx
。在此之後,您應該能夠dd
將相應的圖像內容添加到新分區。