在 linux 中我们可以像一个块设备一样挂载一个文件,这是通过 loopdev 实现的。它可以将一个文件虚拟为一个块设备。
1 | losetup `losetup -f` 镜像文件 |
- losetup -f 找到第一个空闲的 loop 设备
然后 mount 便能令其挂载。但是我们平时使用 mount 命令时却并不需要这样做,因为现代的 mount 可以自动帮我们做这件事。具体可以看 mount man 的 LOOP-DEVICE SUPPORT 章节。而且当它 umount 时也会自动释放占用的 loop 设备。
问题来了,那 umount 怎么知道要释放 loop 设备而且不会误释放我们手动设置的 loop 设备呢?
通过查看 util-linux 的代码可以知道,是通过 user_mountflags 的 MNT_MS_LOOP 标志实现的。
1 | /** |