Sd-Card

可以對 SD 卡映像文件執行 zerofree 處理嗎?

  • February 9, 2020

在此處輸入圖像描述

Ubuntu 16.04:使用以下命令創建了 64GB SD 卡映像:

date; sudo sh -c 'pv /dev/mmcblk0 >rpi4_Ubuntu18.1_64GB.image'; date

rasbperry pi SD 卡配備 Ubuntu 18.1

Ubuntu 16.04 筆記型電腦可以:

  • 掛載 .image 文件?
  • 在 .image 文件的掛載點上運​​行 zerofree?
  • 解除安裝 .image 文件?

我知道可以將圖像文件恢復到 SD 卡並使用zerofree處理卡並再次捕捉圖像。如果能夠在不將它們恢復到 SD 卡的情況下處理多個 .image 文件,那就太好了。

更新:測試結果

映像成功掛載到 /dev/loop9p2:

$ sudo losetup -P /dev/loop9 rpi4_Ubuntu18.1_64GB.image
$ ls -l /dev/loop9*
brw-rw---- 1 root disk   7, 9 Feb  2 19:12 /dev/loop9
brw-rw---- 1 root disk 259, 0 Feb  2 19:12 /dev/loop9p1
brw-rw---- 1 root disk 259, 1 Feb  2 19:12 /dev/loop9p2

零故障:

$ zerofree -v /dev/loop9p2
zerofree: failed to open filesystem /dev/loop9p2

需要零零sudo

$ sudo zerofree -v /dev/loop9p2
14346339/14348998/15073019
  • 14346339 遇到的非零塊數
  • 14348998 文件系統中的空閒塊數
  • 15073019 文件系統內的總塊數

獎勵:使用腳本pishrink減小圖像大小

zerofree無論底層儲存介質是什麼,都在兼容的文件系統上執行。我的 Debian 10 系統上的版本zerofree支持ext2,ext3ext4文件系統,所以如果 SD 卡上使用的文件系統是其中之一,答案是yes

但看起來您已經對整張卡進行了映像,其中可能有多個分區。如果是這種情況,您將無法僅“掛載映像文件”,因為 mount 命令一次只能處理一個文件系統。而在整盤鏡像上,分區表通常會在磁碟的開頭佔用一些空間,因此您甚至可能無法通過嘗試直接掛載整卡鏡像來訪問鏡像上的第一個文件系統。

如果您的系統有一個losetup支持該-P選項的命令,您可以執行一個losetup -P /dev/loop0 rpi4_Ubuntu18.1_64GB.image,這將為您提供諸如 等設備/dev/loop0p1-/dev/loop0p2一個用於映像文件中的每個分區。然後,您可以掛載每個分區設備並zerofree在它們上執行,然後解除安裝並losetup -d /dev/loop0分離循環設備。

如果您的losetup命令不支持該-P選項,則有另一種選擇:該kpartx工具(有時單獨打包,有時作為device-mapper-multipath工具的一部分)可以為各個分區創建映射。在這種情況下,您將首先使用losetup /dev/loop0 rpi4_Ubuntu18.1_64GB.image附加循環設備,然後kpartx -a /dev/loop為在其上檢測到的每個分區創建映射設備。在這種情況下,分區設備的命名會有所不同:它們將是/dev/mapper/loop0p1等。安裝和zerofree過程將是相同的,但解除安裝文件系統後的清理也需要兩個步驟:首先kpartx -d /dev/loop0刪除分區映射設備,然後losetup -d /dev/loop0刪除主循環設備。

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