放大文件系統映像
我正在做
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
文件中。我能做些什麼?
要正確執行此操作,您需要:
- 首先展開*
.img
*文件。- 接下來展開裡面的文件系統。
做第一件事的最好
dd
方法是使用. 不管出於什麼原因,有些人認為這種工作方式有一種神秘感dd
,但實際上沒有。例如,要在文件末尾附加一個孔**.img
:dd bs=1kx1k seek=100 of=.img </dev/null
在將文件截斷為 100MiB 的任何 POSIX 系統上。在 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 vs MBR vs hybrid-MBR),它是否是文件分區表中的最後一個分區等等。如果沒有更多資訊,我會猶豫在這裡冒險任何細節:如果您需要有關如何處理分區的建議,.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
對於不同的文件系統,命令會有所不同,例如
btrfs filesystem resize /dev/loop0 max
,或xfs_growfs /test.img/is/mounted/here
。