![我如何让 losetup -a 正常工作?](https://linux22.com/image/17474/%E6%88%91%E5%A6%82%E4%BD%95%E8%AE%A9%20losetup%20-a%20%E6%AD%A3%E5%B8%B8%E5%B7%A5%E4%BD%9C%EF%BC%9F.png)
# losetup /dev/loop0 /tmp/tmpuUwgbn
# losetup -a
# losetup -f
/dev/loop1
# losetup /dev/loop0
/dev/loop0: [0806]:33654 (/tmp/tmpuUwgbn)
# ls -la /tmp/tmpuUwgbn
-rw------- 1 root root 0 2011-08-24 15:49 /tmp/tmpuUwgbn
# losetup -a
#
明明知道的情况下为什么不losetup -a
列出来呢?/dev/loop0
该man
页面没有给出任何提示。
答案1
备份文件小于 512B 的循环设备不会在 中列出/proc/partitions
,lostup 使用它来查找循环设备。我相信它没有在那里列出的原因是通过创建这样的循环设备,您得到的块设备小于其块大小(在循环设备的情况下为 512B)。
因此,虽然 losetup 和内核允许您创建小于 512B 的循环设备,但您无论如何都不能使用它(无法读取或写入它blocksize --getsize returns 0
)。您可以使用此类设备做的唯一事情是 - 据我了解 - 增长支持文件并调用losetup -c /dev/loopX
- 如果支持文件 >=512B,则循环设备现在出现在/proc/partitions
和 中$(losetup -a)
。
恕我直言,这种能力losetup -c
是内核支持使用 <511B 后备文件创建循环设备而不是返回错误的原因。
答案2
这是因为losetup -a
由于某种原因没有列出关联文件小于 512 字节的循环设备:
# losetup /dev/loop1 `mktemp`
# losetup -a
# losetup -d /dev/loop1
# t=`mktemp`; truncate --size 1 $t; losetup /dev/loop1 $t
# losetup -a
# losetup -d /dev/loop1
# t=`mktemp`; truncate --size 511 $t; losetup /dev/loop1 $t
# losetup -a
# losetup -d /dev/loop1
# t=`mktemp`; truncate --size 512 $t; losetup /dev/loop1 $t
# losetup -a
/dev/loop1: [0806]:33683 (/tmp/tmp.M0F7bovkxK)
为什么?我希望我知道。我觉得该man
页面应该在某处提到这一点。