Вопрос или проблема
Система, которую я не настраивал, только обслуживаю (Debian 10/Buster):
root@host:~# df -h
Файловая система Размер Использовано Доступно Использование% Смонтировано в
/dev/p100p1502lp1 4.0T 3.2T 667G 83% /
none 24G 0 24G 0% /sys/fs/cgroup
none 24G 0 24G 0% /dev
tmpfs 24G 0 24G 0% /dev/shm
tmpfs 24G 2.5G 22G 11% /run
tmpfs 5.0M 0 5.0M 0% /run/lock
none 24G 0 24G 0% /run/shm
Но:
root@host:~# cat /etc/fstab
proc /proc proc defaults 0 0
none /dev/pts devpts rw,gid=5,mode=620 0 0
none /run/shm tmpfs defaults 0 0
Как может быть так, что есть раздел root, но в /etc/fstab/
нет для него записи?
Раздел root не в fstab
Ваш root настроен через параметры командной строки ядра с помощью опций
“root=…” и “rootflags=…”. Запись в /etc/fstab затем
перезаписывает эти опции во время загрузки, но если у вас нет записи
в /etc/fstab, то система использует то, что было в командной строке ядра.
Раздел root
можно смонтировать без записи в /etc/fstab
через initramfs
, systemd
или другие.
Initramfs
Во время загрузки initramfs
считывает устройство root из параметров загрузки ядра root=
в конфигурации загрузчика.
systemd
systemd
может динамически обрабатывать файловую систему root на основе параметров загрузки, не полагаясь на /etc/fstab
.
Проверьте это:
/boot/grub/grub.cfg
на предмет root=
sudo cat /proc/cmdline
Команда
mount
показывает только то, что указано в/etc/mtab
. Если вы хотите увидеть все монтирования, вы можете выполнитьcat /proc/mounts
. Вы можете смонтировать что-то без его записи в/etc/mtab
, используя опциюmount -n
.Тот факт, что
/etc/mtab
и/proc/mounts
не обязательно являются одним и тем же, может быть полезен для скриптов завершения работы, так как это позволяет им заботиться только о размонтировании того, что указано в/etc/mtab
.
sudo cat /etc/mtab | grep "root"
Файловая система root не отображается при выполнении mount
Нет записи в fstab, но раздел смонтирован при загрузке
Как /etc/fstab доступен до монтирования root?
При установке linux, почему нам нужно монтировать наш “раздел root” в “/”, и что это делает?
ArchLinux монтирует файловую систему без записей в /etc/fstab
fstab
содержит список вещей, которые ОС должна смонтировать при загрузке. Это не полный список всех смонтированных файловых систем. (Также возможно указать вещи в fstab и пометить их как не автоматически монтируемые.)
Технически, раздел root монтируется очень рано в процессе загрузки, так как он необходим для завершения загрузки. Нет смысла искать в fstab раздел root, так как вы должны смонтировать раздел root, чтобы посмотреть fstab. Он может быть в fstab, но не обязательно, и если он там есть, то используется только для документации и маркировки. (Я даже не уверен, используются ли параметры монтирования для root в fstab, ОС должна будет перемонтировать root, чтобы они вступили в силу.)
Также возможно вручную монтировать разделы с помощью команды mount и автоматически монтировать устройства hot-swap с помощью udev и autofs, и они также не будут перечислены в fstab. (И есть много других возможностей тоже.)
Так что, если вы думаете, что fstab – это авторитетный список всех смонтированных файловых систем, вам нужно переосмыслить это. 🙂
Ответ или решение
Вопрос, почему корневая файловая система может смонтироваться без записи в /etc/fstab
, достаточно интересен и касается механизмов загрузки в Linux, особенно в дистрибутивах, таких как Debian 10 (Buster). Давайте детально рассмотрим, как это возможно и какие механизмы стоят за этим процессом.
1. Конфигурация загрузчика
При загрузке системы производится считывание параметров ядра из конфигурации загрузчика (например, GRUB). Параметр root=
указывает, на каком устройстве находится корневая файловая система. Таким образом, даже если в /etc/fstab
нет записи для корневого раздела, операция монтирования выполняется на основе параметров, переданных ядру.
Пример:
Для проверки параметров ядра можно выполнить следующую команду:
cat /proc/cmdline
Выведенные параметры будут включать, среди прочего, root=
, указывающий на основное устройство.
2. Роль initramfs
В процессе загрузки система сначала загружает initramfs
, что представляет собой временную файловую систему, необходимую для инициализации оборудования и монтирования корневой файловой системы. В initramfs
хранятся драйверы и необходимые утилиты, которые используются для получения доступа к корневому разделу.
Именно на этом этапе initramfs
обращается к параметрам ядра и монтирует указанное устройство как корневую файловую систему, даже если ни одной записи для него нет в /etc/fstab
.
3. Управление системой с помощью systemd
Современные дистрибутивы Linux, такие как Debian 10, используют systemd
для управления службами и целями. systemd
имеет возможность динамически монтировать корневую файловую систему на основе параметров загрузки, не полагаясь на статическую информацию из /etc/fstab
.
Таким образом, даже если раздел не зарегистрирован в fstab
, система все равно может его монтировать на основе динамически определяемых правил.
4. Различия между mtab и mounts
Системные утилиты, такие как mount
, могут использовать разные источники информации о смонтированных файловых системах. Например, можно использовать:
cat /proc/mounts
Это покажет все смонтированные файловые системы, в отличие от /etc/mtab
, который может содержать более ограниченный список. Тем не менее, даже если нет записей в /etc/fstab
, это не значит, что файловая система не может быть смонтирована.
5. Зачем нужен fstab?
Файл /etc/fstab
действительно играет важную роль, но не является исчерпывающим списком всех смонтированных файловых систем. Он в основном используется для автоматического монтирования дополнительных файловых систем при старте системы и для удобства администрирования. Записи в fstab
могут также служить для документирования конфигурации системы, включая параметры монтирования.
Заключение
Таким образом, корневая файловая система может быть смонтирована без записи в /etc/fstab
благодаря параметрам, переданным ядру во время загрузки, и использованию initramfs
, а также динамическому управлению с помощью systemd
. Понимание этих механизмов поможет вам лучше управлять системой и решать возможные проблемы, связанные с монтированием файловых систем.
Если вы хотите убедиться в правильности этого процесса на вашей системе, проверьте конфигурацию загрузчика и параметры ядра, а также изучите initramfs
и возможности systemd
. Это позволит глубже понять, как работает ваша система и как она обрабатывает загрузку файловых систем.