Что означает 4-й столбец (корневой) в /proc/.../mountinfo?

Что означает 4-й столбец (корневой) в /proc/.../mountinfo?

В procруководстве 4-й столбец назван mountinfo"корневым" и описан как "путь к каталогу в файловой системе, который образует корень этого монтирования". Но как это понимать?

Я думал, что основными элементами монтирования являются исходный и целевой пути, поскольку «исходный монтирование» находится в 10-м столбце, а цель — в 5-м столбце, то для чего тогда используется корень?

Для большинства сведений о монтировании корень — это просто /, кажется, бессмысленно. Я обнаружил, что только монтирования bind имеют корень, отличный от /, поэтому это полезно только в монтированиях bind? И в случае bind, почему бы не показать абсолютный путь в root? Например, когда bind to /run/test_dir/a, /run/test_dir/bстолбец root показывает /test_dir/a, зачем скрывать /runчасть?

решение1

Трудно объяснить это с помощью языковых элементов (по крайней мере, с моим знанием английского), поэтому я решил дать ответ на основе примера:

Корневой каталог часто называютнаибольшийилисамый высшийкаталог. Это верно лишь отчасти. Этот каталогпредполагаетсякакнаибольшийкаталог. Вы могли бы описать это так: «с этого каталога я начну — я предполагаю, что это самый высокий каталог и выше ничего нет».

Несколько примеров, поясняющих значение слова «root»:

  • Представьте, что вы запустили веб-сервер и установили корневой каталог домена example.comна /var/www/html/example.com. Теперь вы создаете файл /var/www/html/example.com/test.html. Если вы откроете его https://example.com/test.htmlв браузере. вы получите содержимое созданного файла. Если вы установили его /var/www/htmlкак root, вы должны открытьhttps://example.com/example.com/test.html
  • Если вы chrootв каталоге /home/test/testSystem/. Корень этой среды будет /home/test/testSystem. Если вы сделаете lsвнутри chrooted среды, ls /вы получите содержимое/home/test/testSystem/

Точка монтирования с правами root/

Например, USB-накопитель содержит:

/
├── dir1
│   ├── subfile1
│   └── subfile2
├── file1
├── file2
└── file3

Если вы смонтируете этот USB-накопитель, то /mntполучите ожидаемый нормальный вывод, поскольку вы используете каталог /USB-накопителя в качестве корневого:

531 137 0:52 / /mnt rw,nosuid,nodev shared:75 - /dev/sdb [...]

Таким образом, в большинстве случаев корнем точек монтирования действительно будет /.

Точка монтирования с корнем, отличным от/

Вы можете попробовать это самостоятельно: свяжите два каталога в вашей файловой системе вместе с помощью

$ mount --bind /var/test1 /var/test2

Вывод mountinfoбудет примерно таким:

564 29 0:26 /var/test1 /var/test2 rw,relatime shared:1 - ext4 /dev/sda rw [...]

Корень точки монтирования находится под /var/test2. /var/test1Источник монтирования (то, что вы смонтировали) находится/dev/sda

Возвращаясь к примеру с USB: если вы теперь смонтируете содержимое /mnt/dir1во что-то другое, вы получите корень монтирования /dir1, а источником монтирования будет /dev/sdb(USB). /mntЧасть сбрасывается здесь.

«Зачем скрывать часть /run»

Короче говоря: /runудалено, потому что это раздел tmpfs. Почему эти части удалены?

В примере с USB мы монтировали dir1в . Вывод будет следующим /dev/sdb:/home/test/usbmnt/

564 29 0:26 /dir1 /home/test/usbmnt/ rw,relatime shared:1 - ext4 /dev/sdb rw [...]

Видите ли, мы смонтировали содержимое /dir1 (с USB, а НЕ с вашего жесткого диска) в каталог usbmnt. Возможно, будет полезно прочитать его как /dev/sdb/dir1.

Если бы root был указан, так как /mnt/usb/dir1мы не могли бы знать, каково реальное местоположение на USB: Это могло бы быть /dir1, /usb/dir1или, может быть,/mnt/usb/dir1

Связанный контент