losetup 把文件变成块设备
losetup 把普通文件关联成块设备(/dev/loopN),于是可以挂载 ISO、在文件上建文件系统、检查磁盘镜像内容。-P 会扫描镜像里的分区表并自动创建分区节点(如 /dev/loop0p1)。用完必须 losetup -d 分离,否则 loop 设备与文件句柄会一直被占用,累积到一定程度就报没有可用设备。
基本信息
| 适用平台 | Linux(util-linux,需要 loop 内核模块) |
|---|---|
| 语法 | losetup [选项] [loop设备] [文件] |
| 常用选项 | -f 找空闲设备、-P 扫描分区、-a 列出全部映射、-d 分离、--show 打印设备名 |
| 权限要求 | root |
| 相关命令 | mount -o loop、lsblk、kpartx |
典型使用场景
- 挂载 ISO 查看或提取内容
- 只读浏览磁盘镜像内容(排障与取证前的检查)
- 在文件上建文件系统做实验,不碰真盘
- 处理虚拟机磁盘镜像
- 临时挂载文件系统镜像的单个分区
常用示例
常用示例
losetup -f # 找空闲的 loop 设备
sudo losetup -P /dev/loop0 disk.img # 关联镜像并自动扫描分区
ls /dev/loop0p* # 看到 p1、p2 等分区节点
sudo mount -o ro /dev/loop0p1 /mnt # 只读挂载更安全
sudo losetup -a # 查看所有映射,排查残留
sudo losetup -d /dev/loop0 # 用完分离
mount -o loop,ro disk.iso /mnt/iso # 一步挂载 ISO 的简写方式
lsblk | grep loop # 核对 loop 设备与挂载点常用选项
| 选项 | 作用 | 注意 |
|---|---|---|
| -f | 查找空闲 loop 设备 | 也可配合 --show 直接拿到设备名 |
| -P | 扫描分区表并创建分区节点 | 带分区表的镜像必须加,否则只看到整盘设备 |
| -a | 列出所有关联 | 排查残留映射的第一条命令 |
| -d | 分离设备 | 忘记分离会一直占用设备与文件句柄 |
| -o offset | 指定偏移 | 手工挂载镜像内某个分区时用 |
| mount -o loop | 一步挂载 | 适合 ISO 这类无分区表的镜像 |
对镜像做写挂载会直接修改文件内容:检查、取证或校验场景一律用 -o ro 只读挂载,保持原始数据不变。
fdisk、lsblk 里看到的 loop0 就是这些映射;报 no free loop device 的原因基本是残留映射没有释放,先 losetup -a 查看再逐个 -d 清理。
只想读镜像里的某一个分区时不必挂整盘:用 -o offset 指定偏移即可(偏移量等于分区起始扇区乘以 512,可用 fdisk -l 查看起始位置),对很大的镜像更省事。
挂载期间不要删除或移动镜像文件:即使已经关联成功,内核后续读写仍然依赖该文件,删掉会导致 IO 错误甚至数据丢失。