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
要正确执行此操作,您需要:
- 首先展开
.img
文件。 - 接下来扩展其中的文件系统。
这最好的做第一件事的方法是与dd
.不管出于什么原因,有些人对这种运作方式赋予了一种神秘感dd
,但实际上并不存在。例如,要附加一个洞到你的结束.img
文件:
dd bs=1kx1k seek=100 of=.img </dev/null
在任何 POSIX 系统上截短文件大小为 100MiB。在 GNU 系统上,该1kx1k
位可以缩短为M
。dd
在文件中查找 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
请让我知道更多细节,我将尽我所能。