Linux

如何縮小由 dd 生成的文件圖像?

  • July 9, 2020

我嘗試了這個 post resize partition on an image file的過程。我沒有成功理解為什麼在我的情況下會出錯。

我使用dd. 映像包含兩​​個分區。

我用losetup -P /dev/loop0 $image-file.

然後:

resize2fs /dev/loop0p2 4000M
resize2fs 1.44.1 (24-Mar-2018)
Resizing the filesystem on /dev/loop0p2 to 1536000 (4k) blocks.
The filesystem on /dev/loop0p2 is now 1536000 (4k) blocks long.

e2fsck -f /dev/loop0p2 ->>> clean

parted /dev/loop0
(parted) resizepart 2 4000MB` ; print gives 4GB partition
(parted) quit

partprobe -s /dev/loop0

lsblk /dev/loop0
NAME      MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
loop0       7:0    0   7,5G  0 loop 
├─loop0p1 259:2    0   256M  0 loop 
└─loop0p2 259:3    0   3,5G  0 loop 

root@O3:/home/m/tmp# e2fsck -f /dev/loop0p2
e2fsck 1.44.1 (24-Mar-2018)
The filesystem size (according to the superblock) is 1903360 blocks
The physical size of the device is 1154143 blocks
**Either the superblock or the partition table is likely to be corrupt**!
Abort? yes

使用 parted 調整分區大小會產生不一致,因為之後resize2fse2fsck乾淨的。

有什麼想法可以探索以縮小圖像文件?

謝謝@sudodus 和@fra-san。

resize2fs我認為在組合和parted縮小 fs/分區時存在兼容性問題。resize2fs 使用 4k 塊,parted 時使用 Byte 或 MB、GB 等。

我最終找到了另一種縮小第二個分區的方法:gnome-disks. 它隨 Linux Mint 一起提供並且執行良好。在 parted 和 gparted 未能縮小第二個分區的情況下,gnome-disks 在一次操作中成功地調整了 fs 和分區的大小。

在 fs/partition 收縮後,loop0p2 中有尾隨空白空間。我想縮小圖像文件。所以我做了:

root@O3:/home/m# fdisk -l /dev/loop0
Disk /dev/loop0: 7,5 GiB, 8068792320 bytes, 15759360 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x8889db7f

Device       Boot  Start     End Sectors  Size Id Type
/dev/loop0p1        8192  532479  524288  256M  c W95 FAT32 (LBA)
/dev/loop0p2      532480 8355839 7823360  3,7G 83 Linux

截斷大小?(8192 + 524288 + 7823360) * 512 = 4278190080 B

truncate --size=4278190080 image-file.img

再次將生成的圖像文件映射到 loop0 後,不再出現 fs/分區錯誤。

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