写在开头

使用 ext4 镜像作为文件系统时,如果需要向其中添加某些大型文件,则可能会遇到镜像空间不足的问题,本篇尝试对此给出几种解决方案。

无大小对齐要求的扩容

如果对最终的大小没有对齐要求,则可以直接采用如下方式:

  1. 创建一个空的镜像,需求扩容多大创建多大:dd if=/dev/zero of=blank.ext4 bs=1M count=需求大小
  2. 将额外的空白文件追加到镜像文件中:cat blank.ext4 >> myimage.ext4
  3. 修复文件系统:e2fsck -f myimage.ext4
  4. 调整文件系统大小:resize2fs myimage.ext4

有大小对齐要求的扩容

操作

如果对最终的大小有对齐要求,则推荐创建一个指定大小的空的ext4新镜像,将旧镜像内容复制到新的镜像中:

  1. 创建一个空的镜像,需求扩容多大创建多大:dd if=/dev/zero of=myimage.ext4 bs=1M count=需求大小
  2. 在空镜像上建立ext4文件系统:mkfs.ext4 myimage.ext4
  3. 将空镜像、旧镜像挂载:
    1
    2
    3
    4
    mkdir myimage
    sudo mount myimage.ext4 myimage
    mkdir oldimage
    sudo mount oldimage.ext4 oldimage
  4. 将旧镜像内容复制到新的镜像中:cp -r ./oldimage/. myimage
  5. 卸载空镜像、旧镜像
    1
    2
    sudo umount myimage
    sudo umount oldimage

注意事项

这种复制方式可能导致镜像中的文件权限位发生变化,如果镜像是一个文件系统,则可以会导致一些权限问题,例如使用镜像中的文件系统时,使用 sudo 命令,会提示:/usr/bin/sudo 必须属于用户 ID 0(的用户)并且设置 setuid 位,这就是由于 sudo 可执行文件的权限位被改导致的,修复方法如下:

1
2
chmod 4755 /usr/bin/sudo
chmod 755 /usr

详细修复方法见此篇文章