缩小 qemu 映像内的 ext4 启动分区

缩小 qemu 映像内的 ext4 启动分区

我需要将可启动qemu映像(从 下载glance)的虚拟大小从 12G 减少到 2G:

$ qemu-img info w.img
image: w.img
file format: raw
virtual size: 12 GiB (12884901888 bytes)
disk size: 1.67 GiB
$ sudo virt-df -h w.img
Filesystem                                Size       Used  Available  Use%
w.img:/dev/sda1                           11G        1.4G        10G   13%
w.img:/dev/sda15                          104M       5.2M        99M    5%
$ sudo virt-resize --shrink /dev/sda1 w.img smaller.img
[   0.0] Examining work.img
virt-resize: error: /dev/sda1: This partition contains a ext4 filesystem
which will be damaged by shrinking it below 12304109568 bytes (user asked
to shrink it to 2029748224 bytes).  If you want to shrink this partition,
you need to use the ‘--resize-force’ option, but that could destroy any
data on this partition.  (This error came from ‘--shrink’ option on the
command line.)

If reporting bugs, run virt-resize with debugging enabled and include the
complete output:

  virt-resize -v -x [...]

而且我需要不去破坏它。可以吗?

答案1

首先 - 在任何此类任务中,请提前备份您的文件,因为存在太多粗糙的边缘并且可能会出错。

为了达到“缩小磁盘”的目标,您需要从磁盘末尾释放空间,但据我所知,您的情况需要一些步骤才能实现这一点。

首先,您需要知道如何将其用作块设备,但不要挂载它,因为以下所有操作都需要卸载它。为此 - 因为它是一个原始文件 - 使用 losetup 解释这里

然后你需要按照resize2fs说明缩小 sda1 上的 ext FS这里。这将在 sda1 末尾腾出空间。

接下来你有一个额外的问题,你的启动分区在数据分区之后,所以在最后得到空间,然后你可以缩小它,你还需要移动它,例如如上所述这里

然后,最后就有了空闲空间,你可以通过qemu-img resize --shrink如下方式调整大小:手册页

最后,由于您移动了启动分区,您可能需要修复启动加载程序(并非总是如此,但可能适用于您的情况)。为此,最后安装您的磁盘,使 sda15 成为 sda1 根文件系统下的 /boot。然后 chroot 进入此环境并运行sudo update-grub以确保所有元条目都在正确的位置。最后一步很繁琐,并非总是需要(取决于太多细节)。只有当前一步的结果因找不到启动加载程序而无法启动时才这样做。

总的来说,它非常复杂,而且可能丢失数据,所以也许每个步骤之间都需要备份?

相关内容