我有一个磁盘映像,需要稍微缩短一下(说来话长 - 但它涉及闪存驱动器大小的变化)。分区已经足够短了,但驱动器大小不够。
基本上,我有一个 15678308352 字节(30621696 个扇区)的磁盘映像。我想将磁盘映像大小减小到 15678292992 字节(30621666 个扇区)。任何“真实”分区使用的最后一个扇区是 30621662(我也可以在那里结束,但为了安全起见,我将其填充了 4 个扇区)。无论如何,我想调整分区表的大小,但我真的不知道该怎么做,尤其是因为 GPT 表位于“受保护的 MBR”内。
以下是 fdisk 的输出,显示受保护的 MBR:
fdisk mydisk.img
Disk: mydisk.img geometry: 1906/255/63 [30621696 sectors]
Signature: 0xAA55
Starting Ending
#: id cyl hd sec - cyl hd sec [ start - size]
------------------------------------------------------------------------
1: EE 0 0 2 - 1023 255 63 [ 1 - 30621695] <Unknown ID>
2: 00 0 0 0 - 0 0 0 [ 0 - 0] unused
3: 00 0 0 0 - 0 0 0 [ 0 - 0] unused
4: 00 0 0 0 - 0 0 0 [ 0 - 0] unused
以下是显示 GPT 信息的 gdisk 输出:
GPT fdisk (gdisk) version 1.0.10
Partition table scan:
MBR: protective
BSD: not present
APM: not present
GPT: present
Found valid GPT with protective MBR; using GPT.
Command (? for help): p
Disk mydisk.img: 30621696 sectors, 14.6 GiB
Sector size (logical): 512 bytes
Disk identifier (GUID): BD99B4B8-8070-0648-AEA4-B28BCD949EB7
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 30621662
Partitions will be aligned on 2048-sector boundaries
Total free space is 18398 sectors (9.0 MiB)
Number Start (sector) End (sector) Size Code Name
1 8192 249855 118.0 MiB 8300 primary
2 260096 30621662 14.5 GiB 8300 primary
正如您所看到的,我有足够的空间来缩小磁盘,但我不知道该怎么做。
我尝试在 hexedit 中手动编辑 MBR 分区大小,但随后我在 GPT 分区上收到各种警告。
有任何想法吗?
可能还有其他工具可以做到这一点,但我还是自己编写了工具来实现这一点。我制作了一个可以实现这一点的Docker 镜像。
YOURIMAGE.img
给定当前目录中想要缩小的多分区映像 ( ),运行以下命令:如果你下载了图像,那么执行此操作的文件是
/usr/bin/diskshrinker.sh
。但是,如果有人感兴趣,基本步骤如下:losetup -Pf
从文件创建环回设备(需要在映像分区上使用 e2fs 工具)resize2fs -M
减少分区大小tune2fs
查找块数和块大小sgdisk
查找当前分区信息,包括分区代码和 GUID(某些引导加载程序所必需的)truncate
使用新的尺寸截断图像。sgdisk -C
修复 MBR 并sgdisk -e
设置备份 GPT 分区。