# ls d1 Проверка того, что это изменение можно увидеть

через каталог d1

x y

Во втором примере выполняется связанное монтирование файла в другое местоположение. Показано, что изменения файла в одном каталоге становятся видны и в другой точке монтирования:

# cat > f1 Создание файла, который будет связан

с другим местоположением

Chance is always powerful. Let your hook be always cast.

Нажимаем клавиши Ctrl+D

# touch f2 Это новая точка монтирования

# mount — bind f1 f2 Связывание f1 с f2

# mount | egrep '(d1|f1)' Просмотр того, как выглядит монтирование

/testfs/d1 on /testfs/d2 type none (rw,bind)

/testfs/f1 on /testfs/f2 type none (rw,bind)

# cat >> f2 Меняем файл f2

In the pool where you least expect it, will be a fish.

# cat f1 Изменение можно увидеть и в исходном файле

Chance is always powerful. Let your hook be always cast.

In the pool where you least expect it, will be a fish.

# rm f2 Выполнить невозможно, поскольку это точка монтирования

rm: cannot unlink `f2': Device or resource busy

# umount f2 Поэтому выполняем размонтирование

# rm f2 Теперь можно удалить файл f2

Одним из примеров, в котором можно было бы использовать связанное монтирование, является создание «клетки» системного вызова chroot (см. раздел 18.12). Вместо репликации множества стандартных каталогов (таких как /lib) в «клетку», мы можем всего лишь создать связанные точки монтирования для этих каталогов (которые, возможно, смонтированы только для чтения) внутри данной «клетки».

14.9.5. Рекурсивное связанное монтирование

По умолчанию, если мы создаем связанную точку монтирования для какого-либо каталога с использованием флага MS_BIND, то в новом местоположении будет смонтирован только этот каталог; если в каталоге-источнике присутствуют вложенные точки монтирования, они не будут реплицированы в целевой точке монтирования target. В версии Linux 2.411 добавлен флаг MS_REC, который можно с помощью команды ИЛИ использовать вместе с флагом MS_BIND как часть аргумента flags системного вызова mount(), чтобы вложенные точки монтирования были реплицированы в целевой точке. Такой вариант называется рекурсивным связанным монтированием. Команда mount(8) снабжена параметром — rbind, который позволяет достичь такого же результата из оболочки, как показано в приведенном ниже сеансе работы.

Начнем с создания дерева каталогов (src1), смонтированного в точке top. Это дерево содержит вложенную структуру (src2) в точке монтирования top/sub.

$ su

Password:

# mkdir top Это точка монтирования верхнего уровня

# mkdir src1 Будем монтировать это в точке top

# touch src1/aaa

# mount — bind src1 top Создаем нормальное связанное монтирование

# mkdir top/sub Создаем каталог для вложенного монтирования под точкой top

# mkdir srcБудем монтировать это в точке top/sub

# touch src2/bbb

# mount — bind src2 top/sub Создаем нормальное связанное монтирование

# find top Проверяем содержимое дерева монтирования top

top

top/aaa

top/sub Это вложенное монтирование

top/sub/bbb

Теперь выполним еще одно связанное монтирование (dir1), использовав в качестве источника top. Поскольку это новое монтирование является нерекурсивным, вложенная точка монтирования не реплицируется.

# mkdir dir1

# mount — bind top dir1 Здесь мы используем обычное связанное монтирование

# find dir1

dir1

dir1/aaa

dir1/sub

Отсутствие строки dir1/sub/bbb среди результатов работы команды find говорит о том, что вложенная точка монтирования top/sub не была реплицирована.

Выполним теперь рекурсивное связанное монтирование (dir2), используя точку top как источник.

# mkdir dir2

# mount — rbind top dir2

# find dir2

dir2

dir2/aaa

dir2/sub

dir2/sub/bbb

Наличие строки dir2/sub/bbb среди результатов работы команды find говорит о том, что вложенная точка монтирования top/sub была реплицирована.

14.10. Файловая система виртуальной памяти: tmpfs
Перейти на страницу:

Похожие книги