Использование nullfs

Может возникнуть необходимость примонтировать определённую системную директорию внуть джейла (или директрию джейла в другой джейл на уровне одной хост-системы), но ведь нелогично использовать NFS внутри одной машины. Например, нужно примонтировать директорию с исходным кодом системы и коллекцию портов в джейлы в целях экономии дискового пространства и в целях централизованности обслуживания. С этой задачей справится утилита mount_nullfs.

Из man mount_nullfs. Утилита mount_nullfs создает нулевой слой, дублируя субдерево пространства имён файловой системы как ещё одно субдерево глобального пространства имен. Это позволяет одним и тем же файлам и каталогам существовать и быть доступными под разными путями. Основные различия между виртуальной копией файловой системы и символической ссылкой в том, что getcwd (3) функции корректно работают в виртуальной копии, и что другие файловые системы могут быть примонтированы на виртуальной копии не затрагивая исходной.

Для использования утилиты ядро должно быть собрано со следующей опцией:

options NULLFS

Можно также вручную добавить этот модуль в ядро и автоматически подгружать при старте системы:

# kldload nullfs.ko
# echo 'nullfs_load="YES"' >> /boot/loader.conf

… несмотря на то что модуль автоматически подгрузится при вызове утилиты mount_nullfs из командной оболочки. Далее пробуем монтирование директории /dir/ect/ory/1 в директорию /dir/ect/ory/2:

# mount_nullfs /dir/ect/ory/1 /dir/ect/ory/2
# mount_nullfs /usr/ports /some/jail/usr/ports

Для автоматического монтирования указанных директорий при старте системы указываем в /etc/fstab:

# vi /etc/fstab
/dir/ect/ory/1 /dir/ect/ory/2      nullfs    rw    0    0
/usr/ports /some/jail/usr/ports    nullfs    rw    0    0

Для размонтирования указываем для umount точку монтирования nullfs:

# umount /dir/ect/ory/2
# umount /some/jail/usr/ports