losetup命令
🧩 概要
losetup是Linux系统中用于管理loop设备的命令行工具。loop设备是一种虚拟块设备,允许将普通文件“映射”为块设备,从而可以对文件进行像对磁盘分区那样的操作。losetup负责将一个普通文件绑定到一个loop设备,或者解除绑定。
💡 loop设备简介
Linux中的块设备(block device)通常是物理硬盘、SSD、U盘等。loop设备将普通文件当作虚拟磁盘,内核会把对loop设备的读写请求转发到该文件的相应偏移处。- 这样,普通文件就可以被格式化、挂载、写入数据等,类似真实硬盘。
⚙️ 常见应用场景
- 使用
Snap包管理器挂载.snap文件。 - 测试和开发需要块设备的应用。
- 结合
LVM或RAID技术创建虚拟磁盘阵列。
🧰 常用命令示例
✨ 创建一个100MB的空文件,作为虚拟磁盘镜像
1
$ dd if=/dev/zero of=disk.img bs=1M count=100
1
2
3
100+0 records in
100+0 records out
104857600 bytes (105 MB, 100 MiB) copied, 0.0395708 s, 2.6 GB/s
🔌 将文件关联到空闲的loop设备
1
$ sudo losetup -f disk.img
-f表示查找第一个空闲的loop设备,自动绑定文件。- 绑定后可以用
losetup -a查看当前绑定状态。
1
2
3
4
5
6
7
$ losetup -a
...
/dev/loop21: []: (/tmp/disk.img)
/dev/loop11: []: (/var/lib/snapd/snaps/gnome-42-2204_176.snap)
/dev/loop2: []: (/var/lib/snapd/snaps/code_194.snap)
/dev/loop0: []: (/var/lib/snapd/snaps/bare_5.snap)
...
🎯 手动绑定到指定的loop设备
1
$ sudo losetup /dev/loop5 disk.img
将disk.img绑定到/dev/loop5。
🔓 解除绑定
1
$ sudo losetup -d /dev/loop5
解除/dev/loop5和文件的绑定。
🗄️ 创建文件系统并挂载
1
2
$ sudo mkfs.ext4 /dev/loop5
$ sudo mount /dev/loop5 /mnt
📋 losetup常用选项
| 选项 | 说明 |
|---|---|
-f | 查找并返回第一个空闲的loop设备 |
-a | 列出所有绑定的loop设备 |
-d <device> | 解除绑定指定loop设备 |
--show | 绑定时显示被使用的loop设备名称 |
-o <offset> | 绑定时指定偏移量(文件内偏移) |
-r | 以只读模式绑定文件 |
⚙️ 原理简述
losetup通过ioctl调用向内核的loop设备驱动发送请求。- 内核
loop模块会将用户指定的文件描述符关联到一个loop设备结构体。 - 之后,所有对该设备的块操作被转发到对应的文件。
⚠️ 注意事项
- 绑定的文件大小决定了虚拟设备大小,超出部分不可用。
- 绑定期间,
loop设备被其他程序访问时,文件内容会被修改或读取。 - 操作完成后,务必执行解除绑定,否则文件可能处于被占用状态。
This post is licensed under CC BY 4.0 by the author.