Чому в деяких системах Linux коренева файлова система відображається як / dev / root замість / dev / <реальний вузол пристрою> в mtab?


11

Я бачив у різних системах Linux, де замість реального вузла пристрою (наприклад /dev/sda1:) кореневий пристрій з'являється як /dev/root, або замість реальної файлової системи, mtabкаже, що це називається файлова система rootfs(яка з'являється як реальна файлова система в /proc/filesystems, але не містить коду в <linux-kernel-source-tree>/fs). Різні утиліти були використані для використання певних атрибутів для визначення реального вузла кореневого пристрою (наприклад, rdev та rootdev Chromium OS). Я не можу знайти жодного логічного пояснення цьому, крім того, щоб десь прочитати, що дуже маленькі вбудовані пристрої не завжди повинні мати /devвузол пристрою для свого кореневого пристрою. (Це правда, і якщо так, це відповідь на моє запитання?) Чому mtab іноді говорить /dev/root(і я думаю, що я, можливо, бачив, що це говоритьrootdevодин раз) замість реального вузла пристрою, і як я можу змусити його завжди говорити про реальний вузол пристрою? Ядро спочатку монтує кореневий пристрій, слідуючи rootпараметру в cmdline, потім init/systemdповторно монтує його відповідно до fstab, правильно? Якщо так, то, я припускаю, initпідтримує mtab. Якщо моя теорія правильна, як я можу змусити initзаписати реальний вузол кореневого пристрою mtab? Я помітив, що /etc/mtabнасправді символічне посилання на /proc/mounts, що означатиме mtab, що підтримується ядром. Тож як я можу налаштувати / виправити ядро, щоб замість того, щоб сказати шлях вузла кореневих пристроїв /dev/root, mtabмістити реальний вузол пристрою?

Відповіді:


4

Це, як правило, артефакт використання initramfs.

З документації на ядро ​​( https://www.kernel.org/doc/Documentation/filesystems/ramfs-rootfs-initramfs.txt )

Що таке корінці?

Rootfs - це особливий екземпляр ramfs (або tmpfs, якщо це ввімкнено), який завжди присутній в системах 2.6. Ви не можете вимкнути rootfs приблизно з тієї ж причини, що не можете вбити процес init; замість того, щоб мати спеціальний код для перевірки та обробки порожнього списку, він менший і простіший для ядра, щоб просто переконатися, що певні списки не можуть стати порожніми.

Більшість систем просто монтують іншу файлову систему над rootfs і ігнорують її. Обсяг місця, який займає порожній екземпляр ramfs, невеликий.

Таким чином rootfs, коренева файлова система, створена для initramfs, і її неможливо відключити.

Щодо /dev/rootмене, я менш впевнений у цьому, але якщо я пам'ятаю правильно, /dev/rootвін створюється при використанні initrd (не те саме, що і initramfs).


mountдає rootfs on / type rootfs (rw)для initrd та /dev/root on / type ext2 (rw,relatime,block_validity,barrier,user_xattr)для жорсткого диска ext2 з цією установкою .
Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功

/dev/rootвикористовується деякими реалізаціями initramfs, але не іншими - у цих випадках це не пов'язано з ядром. Якщо не використовується initramfs, здається, це значення заповнювача, яке використовується ядром. (Можливо, він може бути видалений у більш пізній версії ядра). stackoverflow.com/questions/37310046 / ...
sourcejedi


2

У Linux, /dev/rootякщо він присутній, є символьним посиланням на фактичний пристрій, створений під час завантаження.

Ви або використовуєте, readlink /dev/rootабо cat /proc/cmdlineбачите rootпараметр завантаженого ядра, і таким чином з'ясовуєте реальний пристрій за ним.

Від людини dracut(8)

Однак, щоб продовжити успішне завантаження, мета - знайти ваш кореневий об'єм і створити символьну посилання / dev / root, який вказує на файлову систему.


Я не зовсім впевнений, чи /dev/rootє артефактом дистрибуції на основі RedHat.
Rui F Ribeiro

Ну, у мого Debian 8 немає /dev/root/. На старому CentOS, здається, це фактичний вузол пристрою замість симпосилання.
ilkkachu

1
Ну, згадується рецепт OpenEmbeddedbase-filesfstab/dev/root , тому не просто дистрибутиви, що походять від Red Hat.
ак
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.