losetup命令用于将普通文件(如镜像、ISO)映射为可挂载、格式化、分区的虚拟块设备(如/dev/loop0),支持-f自动分配设备、-P扫描分区、-r只读挂载、-o偏移定位及稀疏文件创建等核心功能。

Linux 中使用 losetup 管理虚拟块设备,核心是把普通文件(如镜像、ISO、空白文件)映射成可挂载、格式化、分区的块设备(如 /dev/loop0)。它不依赖物理磁盘,适合测试、调试和轻量存储实验。关键在于选对参数、注意操作顺序、避免设备繁忙错误。
关联文件到循环设备并自动分配
最常用的是让系统自动找空闲 loop 设备,并支持后续分区访问:
- 用
-f找第一个可用设备,--show直接输出设备名,方便脚本使用:
sudo losetup -f --show disk.img → 返回类似/dev/loop2 - 若镜像含分区表(如树莓派系统镜像、Ubuntu Server .img),务必加
-P扫描分区:
sudo losetup -fP --show ubuntu.img → 自动创建/dev/loop3p1、/dev/loop3p2等子设备 - 只读挂载更安全,尤其分析未知镜像时:
sudo losetup -fPr --show readonly.iso
查看与清理已用设备
避免重复占用或卸载失败,需随时掌握状态:
- 列出所有已绑定的循环设备及其对应文件:
losetup -a - 查某个文件是否已被关联:
losetup -j disk.img - 断开前必须先卸载文件系统,否则报“Device or resource busy”:
sudo umount /mnt/data
sudo losetup -d /dev/loop0
处理带分区镜像的常见操作
很多系统镜像(如 .img)不是单一分区,而是完整磁盘布局,不能直接 mkfs 或 mount 整个 loop 设备:
- 先用
-P关联,再挂载具体分区:
sudo losetup -fP disk.img
sudo mount /dev/loop0p1 /mnt/boot
sudo mount /dev/loop0p2 /mnt/root - 修改镜像后,内核可能未更新分区信息,运行:
sudo partprobe /dev/loop0 强制重读分区表 - 若
-P失效(如旧内核),可用-o手动跳过 MBR,定位第二分区起始位置(需配合fdisk -l disk.img查偏移):
sudo losetup -o $((512*2048)) /dev/loop0 disk.img(示例:从第2048扇区开始)
创建稀疏虚拟磁盘用于空间节省
适合模拟大容量存储但暂不写满的场景(如 LVM 实验、容器镜像层):
- 用
dd创建 20GB 稀疏文件(实际占磁盘几乎为 0):
dd if=/dev/zero of=disk20g.img bs=1 count=0 seek=20G - 关联后可当真实块设备使用:
sudo losetup /dev/loop4 disk20g.img
sudo mkfs.xfs /dev/loop4
sudo mount /dev/loop4 /mnt/test - 验证稀疏性:
ls -sh disk20g.img 显示实际占用(如0 disk20g.img)











