5

Я читаю Проект операционной системы Unix Мориса Дж. Баха, и у меня есть два вопроса относительно монтирования файловой системы:

  1. Почему происходит сбой монтирования файловой системы, когда счетчик ссылок inode точки монтирования больше 1 в таблице файлов?

  2. Почему Unix запрещает монтировать файловую систему в нескольких точках? (Какие плохие вещи могут случиться, если это будет разрешено?)

3 ответа3

5

Это не прямой ответ, но вы можете получить поведение, похожее на монтирование в двух местах, используя mount --bind

4

Справочная страница HP (HP-UX) для mount(2) гласит:

Если mount() завершается ошибкой, для errno устанавливается одно из следующих значений.

  • [EACCES] Компонент префикса пути запрещает разрешение поиска.
  • [EBUSY] путь в настоящее время установлен на, чей - то текущий рабочий каталог, или иначе занят.
  • [EBUSY] Файловая система, связанная с fs, в настоящий момент смонтирована.

Вы получите первый EBUSY, когда ваш вопрос (1) применяется, потому что:

  • если каталог уже является точкой монтирования, вы теряете доступ к ранее смонтированному каталогу, что делает предыдущее монтирование неактуальным.
  • если каталог (скажем, /some/where) является текущим каталогом какого-либо процесса, у вас есть процесс с другим представлением содержимого /some/where ; новички видят, что находится в смонтированной файловой системе, но старые процессы видят, что находится в смонтированном каталоге.

Вы получаете второй EBUSY, чтобы ответить на ваш вопрос (2), когда файловая система уже смонтирована - другими словами, вы не можете смонтировать ее дважды. Это хорошая вещь - была бы страшная опасность путаницы, если бы две отдельные точки монтирования обошлись, предполагая, что у них был эксклюзивный доступ к суперблоку и т.д., Когда он фактически был разделен. Это также может сбить с толку, если при создании файла /some/where/newfile также будет одновременно создан /opt/other/newfile потому что одно и то же устройство было смонтировано в /some/where и /opt/other .

Я не проверял справочные страницы AIX, Solaris, Linux, MacOS X, BSD для mount(2) , но я ожидаю, что поведение будет таким же.

0

По сути, возможность монтирования одной файловой системы в нескольких местах нарушает концепцию древовидной иерархической файловой системы, превращая ее в ориентированный ациклический граф (даже вы можете попытаться смонтировать смонтированную файловую систему в подкаталог ее полки, разбив большее число возможных циклических, ненаправленных). общий график). По сути, проблема в том, что при попытке перейти к родительскому каталогу с помощью записи .. в смонтированном корневом каталоге необходимо выбрать, какой из нескольких родительских каталогов теперь следует использовать, чтобы добраться до родительского.

В linux есть опция --bind для монтирования, которая позволяет вам монтировать каталог (не обязательно, чтобы он был корневым каталогом в файловой системе) в каком-то другом месте (не монтируемая файловая система, а простой каталог), так что вы можете Смонтируйте такие вещи, как файловые системы /proc или /sys в процессах chroot (2) и предоставьте им доступ к этой платформе.

Этот тип монтирования отличается в том же смысле, что и различие между мягкими и жесткими ссылками на файлы. Ядро обрабатывает его по-разному, и оно допускает только истинную точку монтирования для корневой файловой системы Причина в основном та же, что вы не можете создавать циклы с жесткими ссылками, а вы можете с помощью soft. Вы не можете снова смонтировать смонтированную файловую систему, и вы можете mount --bind несколько раз в один и тот же каталог.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .