マンページ/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
これにより、mountmount a.ext4 /mnt
と/home/xtricman/loop1
manualによって自動的に生成されますmknod loop1 b 7 0
。
/dev/loop0
システムコールを使用するときに「自動生成」はありませんmount(2)
。
これはmount(8)
便利通常のファイル「デバイス」引数(およびいくつかの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