创建空白img镜像并格式化文件系统、挂载使用

# 创建512M的空白镜像
dd if=/dev/zero of=test.img bs=1M count=512

# 格式化文件系统
mkfs.ext4 test.img

# 挂载使用
sudo mount test.img ./tempdir

# 复制文件
cp ./dir1 ./1.txt ./tempdir

对img镜像扩容

# 卸载
sudo umount tempdir

# 将镜像扩容至1G
dd if=/dev/zero of=test.img bs=1M seek=1024 count=0

# 扩容文件系统
e2fsck -f test.img
resize2fs test.img

# 挂载使用
sudo mount test.img ./tempdir

命令解释

1. 创建512MB空白镜像

dd if=/dev/zero of=test.img bs=1M count=512
  • 作用:通过/dev/zero设备生成全零填充的512MB文件。
  • 原理bs=1M定义块大小为1MB,count=512表示写入512个块。
  • 优化:部分系统可能要求使用大写单位(如bs=1MB),建议统一使用bs=1M以兼容多数Linux发行版。

2. 格式化文件系统

mkfs.ext4 test.img
  • 作用:将镜像格式化为ext4文件系统。
  • 问题:未使用-F参数可能导致警告(因目标非块设备)。建议修正为:
mkfs.ext4 -F test.img

3. 挂载镜像到目录

sudo mount test.img ./tempdir
  • 作用:将镜像挂载到./tempdir目录。
  • 问题:缺少-o loop参数,无法通过回环设备挂载文件。修正命令:
sudo mount -o loop test.img ./tempdir

4. 复制文件到挂载点

cp ./dir1 ./1.txt ./tempdir
  • 问题分析
  • dir1是目录,需添加-r参数递归复制。
  • 挂载目录默认属主为root,普通用户需sudo或调整权限。
  • 建议
sudo cp -r ./dir1 ./1.txt ./tempdir/
  • 或通过权限调整:
sudo chown -R $USER:$USER ./tempdir
cp -r ./dir1 ./1.txt ./tempdir/

5. 卸载镜像

sudo umount tempdir
  • 正确性:命令正确,但需确保目录路径完整(建议使用./tempdir)。

6. 镜像扩容至1GB

dd if=/dev/zero of=test.img bs=1M seek=1024 count=0
  • 作用:通过追加空洞(稀疏文件)将镜像扩展至1GB。
  • 原理seek=1024跳过前1024个块(1GB),count=0仅扩展文件不写入数据。
  • 风险:需确保镜像已卸载,否则可能导致数据损坏。

7. 调整文件系统大小

e2fsck -f test.img
resize2fs test.img
  • 作用
  • e2fsck -f强制检查文件系统一致性。
  • resize2fs将ext4文件系统扩展至镜像新大小。
  • 前提:必须在镜像未挂载时执行。

8. 重新挂载镜像

sudo mount test.img ./tempdir
  • 问题:仍缺少-o loop参数。修正为:
sudo mount -o loop test.img ./tempdir

完整修正后的流程

# 创建镜像
dd if=/dev/zero of=test.img bs=1M count=512

# 格式化
mkfs.ext4 -F test.img

# 创建挂载点并挂载
sudo mkdir -p ./tempdir
sudo mount -o loop test.img ./tempdir

# 复制文件(需权限)
sudo cp -r ./dir1 ./1.txt ./tempdir/

# 卸载
sudo umount ./tempdir

# 扩容镜像
dd if=/dev/zero of=test.img bs=1M seek=1024 count=0

# 调整文件系统
e2fsck -f test.img
resize2fs test.img

# 重新挂载
sudo mount -o loop test.img ./tempdir

关键注意事项

  1. 空洞文件风险:扩容生成的稀疏文件可能不立即占用物理空间,需通过ls -lhdu -h对比验证实际占用。
  2. 性能测试:若需精确测试磁盘IO性能,建议使用dd结合conv=fdatasyncoflag=direct参数绕过缓存。
  3. 备份策略:关键操作前可通过dd备份镜像或MBR(例如dd if=test.img of=backup.img)。