Можно ли выполнить chroot или иным образом создать несвязанный (в основной корневой файловой системе) каталог? Насколько я понимаю, ядро автоматически удаляет любой файл / папку, на которую нет ссылки в файловой системе, но есть ли способ получить второй корень?
1 ответ
Да, и вполне возможно, что у вас уже есть несколько из них. Помните, что вы можете иметь несколько независимых файловых систем, смонтированных в разных местах - и каждая из них имеет свой собственный "корень".
Например, если отдельный раздел "data" смонтирован в /mnt/data
, то этот каталог на самом деле является корневым каталогом файловой системы, и нет ..
который будет указывать над ним. (То же самое относится и к внутренним файловым системам, таким как /sys или /dev.)
В Linux уровень VFS - "виртуальная файловая система" - делает эту работу. Это позволяет root 1 быть доступным в /
и root 2 в /mnt/data
, и это создает иллюзию ссылки /mnt/data/..
на /mnt
.
(Опять же, в Linux у VFS есть несколько других интересных функций, обычно используемых для /
. Например, когда ядро запускается, /
присоединяется к пустой файловой системе "tmpfs", где initramfs распаковывается. В конце концов, основная корневая файловая система монтируется где-то в /new_root
или около того и перемещается в /
используя специальный pivot_root
или более общий mount --move
. Плюс, конечно, вы уже упомянули chroot
.
Другими словами, корневой каталог VFS не обязательно рожден таким.
Можно иметь несколько корней VFS одновременно - не только с помощью chroot, но и с помощью пространств имен монтирования, где разные процессы могут видеть разные монтирования VFS полностью; это используется «контейнерами», такими как Docker.)
Однако неверно, что корень файловой системы не имеет ссылок. Он не имеет только ссылок сверху, но может легко содержать ссылки снизу - в обычных подкаталогах (таких как /bin) ..
является реальной ссылкой, поэтому /
будет иметь ссылки из /bin/..
, /etc/..
и так далее.
(Интересно, что именно поэтому вы можете переименовывать каталоги только для чтения, но не перемещать их в другое место, потому что последний потребует записи в каталог для обновления его ..
ссылки.)