1. 创建镜像文件
1.1 loop存储适用场景
把普通文件当成 /dev/loopN 块设备来用,读写走块设备接口,backing file 仍是宿主机上的一个文件
- 挂载 ISO 与磁盘镜像
- 本地练手与压测
- 加密卷与密文镜像
- 模拟云盘或 CSI 块卷
- 只读暴露文件
- 临时挂载
和真实磁盘相比,loop 设备性能受 backing file 所在文件系统影响,关联默认不持久化,重启后一般要重新 losetup 或写进 /etc/fstab。
1.2 创建镜像
在宿主机上准备 backing file
1
| truncate -s 10G /data/tmp/disk.img
|
1
| dd if=/dev/zero of=/data/tmp/disk.img bs=1M count=10240
|
1
| fallocate -l 10G /data/tmp/disk.img
|
1
| dd if=/dev/zero of=/data/tmp/disk.img bs=4k count=2621440
|
2. 关联 loop 设备
把镜像文件挂到 /dev/loopN
1
| losetup -f --show /data/tmp/disk.img
|
1
| losetup /dev/loop0 /data/tmp/disk.img
|
1
2
3
| losetup /dev/loop0 /data/tmp/disk.img \
--sector-size 4096 \
--read-only
|
1
| losetup -j /data/tmp/disk.img
|
3. 格式化
1
| xfs_repair -n /dev/loop0
|
4. 挂载与使用
挂载整盘 loop 设备或镜像文件
1
| mount /dev/loop0 /mnt/looptest
|
1
| mount -o ro /dev/loop0 /mnt/looptest
|
1
| mount -t xfs -o loop /data/tmp/disk.img /mnt/looptest
|
mount 会自动寻找空闲 loop 设备。
1
2
| findmnt /mnt/looptest
mount | grep loop0
|
5. 扩容
镜像扩容后,依次更新 backing file、loop 设备容量、文件系统大小。
1
| fallocate -l 20G /data/tmp/disk.img
|
1
| truncate -s 20G /data/tmp/disk.img
|
1
| xfs_growfs /mnt/looptest
|
6. 卸载与解除关联
按挂载 → loop 关联的顺序释放
1
| umount -l /mnt/looptest
|
1
| fuser -km /mnt/looptest
|
7. 清理
先解除 loop 关联,再删镜像文件。顺序反了会出现 losetup -a 里 backing file 带 (deleted) 的残留。
1
2
3
| umount /mnt/looptest
losetup -d /dev/loop0
rm -f /data/tmp/disk.img
|
1
2
| losetup -a
ls /dev/loop* 2>/dev/null
|
1
2
3
| findmnt /dev/loop0
umount /mnt/looptest # 若仍挂载
losetup -d /dev/loop0
|