Я видел в различных системах Linux, где вместо реального узла устройства (например:) /dev/sda1
, корневое устройство отображается как /dev/root
или вместо реальной файловой системы, mtab
говорит, что называется файловой системой rootfs
(которая выглядит как настоящая файловая система /proc/filesystems
, но нет кода в <linux-kernel-source-tree>/fs
). Различные утилиты были созданы для использования определенных атрибутов для определения реального корневого узла устройства (например, rdev и Chromium OS rootdev). Я не могу найти никакого логического объяснения этому, кроме чтения где-то, что очень маленькие встроенные устройства не всегда должны иметь /dev
узел устройства для своего корневого устройства. (Это правда, и если да, то это ответ на мой вопрос?) Почему mtab иногда говорит /dev/root
(и я думаю, я мог видеть, что это говоритrootdev
один раз) вместо реального узла устройства, и как я могу сделать так, чтобы он всегда говорил реальный узел устройства? Ядро сначала монтирует корневое устройство, следуя root
параметру в cmdline, затем init/systemd
перемонтирует его в соответствии с fstab
, правильно? Если так, то я полагаю, Я заметил, что init
поддерживает mtab
. Если моя теория верна, как я могу init
записать настоящий корневой узел устройства mtab
? /etc/mtab
это на самом деле символическая ссылка на /proc/mounts
, что означает, mtab
что поддерживается ядром. Итак , как настроить / пропатчить ядро на, вместо того , чтобы говорить путь корневого узла устройства /dev/root
, которые mtab
содержат узел реального устройства?
mount
даетrootfs on / type rootfs (rw)
для initrd и/dev/root on / type ext2 (rw,relatime,block_validity,barrier,user_xattr)
для ext2 жесткого диска с этой настройкой .