Widziałem na różnych systemach Linux, w których zamiast rzeczywistego węzła urządzenia (na przykład /dev/sda1
:), urządzenie root pojawia się jako /dev/root
, lub zamiast prawdziwego systemu plików, mtab
mówi, że jest to system plików o nazwie rootfs
(który pojawia się jako prawdziwy system plików /proc/filesystems
, ale nie ma kodu <linux-kernel-source-tree>/fs
). Wprowadzono różne narzędzia do korzystania z niektórych atrybutów w celu określenia rzeczywistego węzła urządzenia głównego (takiego jak rdev i rootdev systemu operacyjnego Chromium). Nie mogę znaleźć logicznego wytłumaczenia tego innego niż przeczytanie gdzieś, że bardzo małe urządzenia wbudowane nie zawsze muszą mieć /dev
węzeł urządzenia dla swojego urządzenia root. (Czy to prawda, a jeśli tak, czy to odpowiedź na moje pytanie?) Dlaczego czasami mtab mówi /dev/root
(i myślę, że mogłem to zobaczyćrootdev
raz) zamiast rzeczywistego węzła urządzenia i jak mogę sprawić, by zawsze mówił prawdziwy węzeł urządzenia? Jądro najpierw montuje urządzenie root zgodnie z root
parametrem w cmdline, a następnie init/systemd
montuje je ponownie zgodnie z fstab
, prawda? Jeśli tak, to zakładam, że Zauważyłem, że init
utrzymuje mtab
. Jeśli moja teoria jest poprawna, jak mogę init
napisać do prawdziwego węzła urządzenia głównego mtab
? /etc/mtab
tak naprawdę jest to dowiązanie symboliczne /proc/mounts
, co oznacza mtab
, że jądro utrzymuje je. Jak więc skonfigurować / załączyć jądro, aby zamiast mówić, że ścieżka do węzła urządzeń głównych /dev/root
ma mtab
zawierać rzeczywisty węzeł urządzenia?
źródło
mount
dajerootfs on / type rootfs (rw)
dla initrd i/dev/root on / type ext2 (rw,relatime,block_validity,barrier,user_xattr)
dla dysku twardego ext2 przy tej konfiguracji ./dev/root
jest używany przez niektóre implementacje initramfs, ale nie przez inne - w tych przypadkach nie jest to spowodowane jądrem. Gdy nie używa initramfs, wydaje się, że jest to wartość zastępcza używana przez jądro. (Być może można go jednak usunąć w późniejszej wersji jądra). stackoverflow.com/questions/37310046/…Gentoo ma łatkę, która właśnie to robi (zapewnia pokazanie prawdziwego urządzenia root). Można go znaleźć tutaj: https://lkml.org/lkml/2013/1/31/574
źródło
W systemie Linux,
/dev/root
jeśli jest obecny, jest dowiązaniem symbolicznym do rzeczywistego urządzenia utworzonego w czasie uruchamiania.Możesz użyć
readlink /dev/root
lub,cat /proc/cmdline
aby zobaczyćroot
parametr uruchomionego jądra, a tym samym znaleźć prawdziwe urządzenie za nim.Od człowieka
dracut(8)
źródło
/dev/root
jest artefaktem dystrybucji opartych na RedHat./dev/root/
. Na starym CentOS wydaje się, że jest to rzeczywisty węzeł urządzenia zamiast dowiązania symbolicznego.base-files
przepisie OpenEmbedded jestfstab
mowa o tym/dev/root
, więc nie używają go tylko dystrybutorzy pochodzący z Red Hat.