我是dpkg --configure -a
在我的 Debian wheezy 中做的。并得到这个错误:
dpkg --configure -a
dpkg: failed to write status record about `libcairo2' to `/var/lib/dpkg/status': No space left on device
Run Code Online (Sandbox Code Playgroud)
我被 chroot 到一个.img
文件中。我能做什么?
如果 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
Run Code Online (Sandbox Code Playgroud)
对于不同的文件系统,命令会有所不同,例如btrfs filesystem resize /dev/loop0 max
, 或xfs_growfs /test.img/is/mounted/here
.
要正确执行此操作,您需要:
.img
文件。做第一件事的最佳方法是使用dd
。不管出于什么原因,有些人对这种运作方式赋予了一种神秘感dd
,但实际上并不存在。例如,要将一个洞附加到文件末尾.img
:
dd bs=1kx1k seek=100 of=.img </dev/null
Run Code Online (Sandbox Code Playgroud)
在任何将文件截断为 100MiB 的 POSIX 系统上。在 GNU 系统上,该1kx1k
位可以缩短为M
。dd
在文件中查找 100MiB,第一次读取时遇到 EOF,然后关闭文件。这是一个单一的操作,不需要读取(除了第一个空操作)或写入 - 它几乎是原子的。
如果文件之前为 50MiB,现在将多分配 50MiB。如果文件之前为 150MiB,则会将尾部的最后 50MiB 砍掉。在理解稀疏文件的文件系统上,附加的文件洞实际上不会使用任何磁盘空间,并且只会在填充时使用必要的内容。
在某些系统上执行相同操作的其他方法:
fallocate -l100M .img
truncate -s100M .img
Run Code Online (Sandbox Code Playgroud)
...这两个命令都会做完全相同的事情dd
。我dd
之所以推荐,是因为这两种工具都不可移植,dd
其行为符合POSIX 规范,一旦您学会了如何正确使用磁盘销毁器,就再也没有磁盘敢挡您的路了。
如果您只是添加到您的文件中,.img
无论它是否已安装,您都可以执行上述操作(尽管如果您要拿走一些已安装的文件,.img
它可能无法按预期工作),但您很可能需要umount
.img
首先调整其大小无论如何,组成文件系统也是如此。不过,您不需要-d
破坏循环设备。
如何处理第二件事取决于是否.img
分区。如果不是,正如我根据您在其他地方的评论猜测的那样,那么您只需要按 fs 的类型来处理它。对于一个ext[234]
.img
文件,您应该使用resize2fs
它并完成它。对于其他人,您需要查看相关的用户空间工具及其man
页面。
如果.img
是分区的话可能会更复杂。在这种情况下,如何处理这种情况将取决于使用哪种分区表(例如 GPT、MBR、混合 MBR)、它是否是文件分区表中的最后一个分区等等。在没有更多信息的情况下,我犹豫是否要在这里透露任何细节:如果您需要有关如何处理分区的建议,.img
请让我知道更多详细信息,我将尽我所能。