联机帮助页/proc/pid/挂载信息说它有领域
36 35 98:0 /mnt1 /mnt2 rw,noatime master:1 - ext3 /dev/root rw,errors=continue
(1)(2)(3) (4) (5) (6) (7) (8) (9) (10) (11)
(10)挂载源:文件系统特定信息或“无”。
这个字段 (10) 到底是什么意思?我自己的实验得到了奇怪的结果
279 23 7:0 /file//deleted /home/xtricman/file_mnt_point rw,relatime shared:158 - ext4 /dev/loop0 rw
301 23 7:0 /file2//deleted /home/xtricman/file_mnt_point2 rw,relatime shared:158 - ext4 /dev/loop0 rw
268 23 7:0 / /mnt rw,relatime shared:159 - ext4 /dev/loop0 rw
313 23 7:0 / /home/xtricman/home_mnt rw,relatime shared:183 - ext4 /home/xtricman/loop1 rw
/dev/loop0
mount
当我这样做时,由程序自动创建mount a.ext4 /mnt
,并由/home/xtricman/loop1
手动创建mknod loop1 b 7 0
。
所以我想我可以解释我看到的大部分结果,但是为什么设备节点路径出现在(10)字段中?我在 ArchLinux 上使用 Linux 5.0.4 内核,如果这很重要的话。
答案1
这个字段 (10) 到底是什么意思?
source
它要么是传递给系统调用的第一个参数 ( ) mount(2)
,要么是由show_devname()
回调,如果文件系统实现了它。
实际上(7)
是一个可选字段的列表,这些字段可能不存在,因此(10)
实际上可能是(9)
。
/dev/loop0
当我这样做时,由 mount 自动创建mount a.ext4 /mnt
,并由/home/xtricman/loop1
手动创建mknod loop1 b 7 0
。
/dev/loop0
使用mount(2)
系统调用时不会“自动创建”。
这是mount(8)
公用事业当使用常规文件“device”参数调用时(并使用一些 DWIM 猜测),它将首先找到一个空闲循环设备,将其附加到作为参数给出的文件,然后使用mount(2)
循环设备的路径和挂载点作为参数。
例子:
# strace -e trace=ioctl,mount mount /tmp/foo $'/tmp/foox\tX\nX\\X X'
ioctl(3, LOOP_CTL_GET_FREE) = 0
ioctl(4, LOOP_SET_FD, 3) = 0
ioctl(4, LOOP_SET_STATUS64, {lo_offset=0, lo_number=0, lo_flags=LO_FLAGS_AUTOCLEAR, lo_file_name="/tmp/foo", ...}) = 0
ioctl(3, BLKGETSIZE64, [536870912]) = 0
ioctl(3, CDROM_GET_CAPABILITY, 0) = -1 EINVAL (Invalid argument)
ioctl(3, BLKSSZGET, [512]) = 0
mount("/dev/loop0", "/tmp/foox\tX\nX\\X X", "btrfs", MS_MGC_VAL, NULL) = 0