`/proc/self/mountinfo` 中的“文件系统特定信息”是什么?

`/proc/self/mountinfo` 中的“文件系统特定信息”是什么?

联机帮助页/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/loop0mount当我这样做时,由程序自动创建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

相关内容