放大文件系统图像

放大文件系统图像

dpkg --configure -a我在 Debian 中干得气喘吁吁。并得到这个错误:

dpkg --configure -a
dpkg: failed to write status record about `libcairo2' to `/var/lib/dpkg/status': No space left on device

我被chroot到一个.img文件中。我能做些什么?

答案1

如果 chroot 文件系统已满,您可以放大映像文件。

例如使用dd conv=notrunc oflag=append bs=1M count=X of=file.img.要非常非常小心:)。如果可以的话,强烈建议先卸载 chroot 并备份 .img 文件。

然后调整文件系统的大小,以便它可以使用额外的空间。对于 ext4 文件系统,命令为resize2fs.联机帮助页建议您必须在循环设备上运行最后一个命令,而不是文件:

# losetup -f file.img
# losetup -l
NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE
/dev/loop0         0      0         0  0 /home/alan/file.img
# resize2fs /dev/loop0
...
# losetup -d /dev/loop0

对于不同的文件系统,命令会有所不同,例如btrfs filesystem resize /dev/loop0 max、 或xfs_growfs /test.img/is/mounted/here

答案2

要正确执行此操作,您需要:

  1. 首先展开.img文件。
  2. 接下来扩展其中的文件系统。

最好的做第一件事的方法是与dd.不管出于什么原因,有些人对这种运作方式赋予了一种神秘感dd,但实际上并不存在。例如,要附加一个到你的结束.img文件:

dd bs=1kx1k seek=100 of=.img </dev/null

在任何 POSIX 系统上截短文件大小为 100MiB。在 GNU 系统上,该1kx1k位可以缩短为Mdd在文件中查找 100MiB,第一次读取时遇到 EOF,然后关闭文件。这是一个单一的操作,不需要读取(超出第一个空的)或者写——它几乎是原子的。

如果文件之前为 50MiB,现在将多分配 50MiB。如果文件之前为 150MiB,则会将尾部的最后 50MiB 砍掉。在能够理解的文件系统上文件,附加文件实际上,不会使用任何磁盘空间,并且只会在填充时使用必要的空间。

在某些系统上执行相同操作的其他方法:

fallocate -l100M .img
truncate -s100M .img

...这两个命令都会做完全相同的事情dd。我推荐是dd因为这些工具都不可移植,dd其行为是POSIX 规范,一旦您学会了如何使用磁盘销毁器正确地说,不会再出现任何磁盘挡住你的路。

如果您只是添加到您的.img无论是否安装,您都可以执行上述操作(不过如果你要带一些已安装的.img离开它可能无法按预期工作),但你很可能需要umount.img无论如何,首先要调整其构成文件系统的大小,所以也可以。不过,您不需要-d破坏循环设备。

你如何处理第二件事取决于是否.img是否已分区。如果不是,正如我根据您在其他地方的评论猜测的那样,那么您只需要按 fs 的类型来处理它。为ext[234] .img您应该使用的文件resize2fs并完成它。对于其他人,您需要查看相关的用户空间工具及其man页面。

如果.img被分区的话可能会更复杂。在这种情况下,您如何处理这种情况将取决于使用哪种分区表(例如 GPT、MBR 与混合 MBR),无论是最后的文件分区表中的分区等等。在没有更多信息的情况下,我犹豫是否要在这里冒险任何细节:如果您需要有关如何处理分区的建议.img请让我知道更多细节,我将尽我所能。

相关内容