我尝试了这篇文章中的过程调整图像文件上的分区大小。我没有成功地理解为什么在我的例子中会出错。
我使用 生成了 8GB 图像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调整分区大小会造成不一致,因为在resize2fs
清理之后e2fsck
。
有什么想法可以探索如何缩小图像文件吗?
答案1
谢谢@sudodus 和@fra-san。
resize2fs
我认为组合和parted
缩小文件系统/分区时存在兼容性问题。 resize2fs 使用 4k 块,parted 使用字节或 MB、GB 等。
我最终找到了另一种缩小第二个分区的方法:gnome-disks
。它随 Linux Mint 一起提供并且运行良好。 parted 和 gparted 未能缩小第二个分区,而 gnome-disks 在一次操作中成功调整了 fs 和分区的大小。
fs/分区收缩后,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/分区错误。