Mój system uruchamia się OK z tym w mojej konfiguracji GRUB 2:
linux /bzImage root=/dev/sda2 init=/usr/lib/systemd/systemd ro
Ale jeśli /dev/sda2
zastąpię odpowiednim UUID:
linux /bzImage root=UUID=666c2eee-193d-42db-a490-4c444342bd4e init=/usr/lib/systemd/systemd ro
następnie kończy się niepowodzeniem podczas rozruchu:
kernel panic - not syncing: VFS: unable to mount root fs on unknown-block(0,0)
UUID wydaje się być poprawny:
# blkid
/dev/sda1: UUID="97ac3744-39de-4d6d-9a81-e3a3ea08a8bb" TYPE="ext2"
/dev/sda2: UUID="666c2eee-193d-42db-a490-4c444342bd4e" TYPE="ext4"
Dlaczego to nie działa? Czy to dlatego, że nie używam initramfs?
To jest Gentoo Linux x86_64 z jądrem 3.10.7. Korzystam z tabeli partycji MBR sda
i tabeli partycji GUID sdb
.
unknown-block(0,0)
dla mnie wygląda jak urządzenie GRUB. zgaduję, że GRUB z jakiegoś powodu nie może użyć tego UUID.sda1
. Nieinit
.Odpowiedzi:
Dla wyjaśnienia
UUID
s to jedyny niezawodny sposób na identyfikację dysków twardych przez jądro. Istnieją dwa typy: UUID, który jest przechowywany w systemie plików i nie jest dostępny dla jądra podczas rozruchu, oraz PARTUUID, który jest przechowywany w tablicy partycji i jest dostępny w czasie uruchamiania. Więc musisz użyćco
/dev/sd??
może się zmienić w przypadku urządzeń podłączonych / odłączonych.Nie zapomnij wykorzystać liczbę szesnastkową
SSSSSSSS-PP
otrzymasz odblkid
!Łatwiejszy w użyciu
działa tylko z tym,
initramfs
który pobiera te identyfikatory.Jeśli więc użyjesz niepustego
initramfs
, możesz mieć wszystkie trzy! Z pustyminitramfs
masz tylkoPARTUUID
.źródło
cpio
archiwum, do którego jądro rozpakowuje się/
przy starcie systemu. initramfs jest systemem plików - zawsze jest pierwszym/
montowanym i skąd wywołuje jądroinit
. Możesz skompilować zawartość do jądra lub rozpakować ją przy starcie systemu - są to dwie opcje.Parametrem, który musisz przekazać, aby uruchomić z UUID, jest
PARTUUID
. Tak powinno byćroot=PARTUUID=666c2eee-193d-42db-a490-4c444342bd4e
.Dokumentacja wyjaśnia, dlaczego wraca z
unknown-block(0,0)
:kernel-parameters.txt :
init / do_mounts.c :
Ostatni bit na końcu mówi, że jeśli nie może zrozumieć wartości, zwraca
(0,0)
, stąd błąd.źródło
PARTUUID=666c2eee-193d-42db-a490-4c444342bd4e
nie działa. Byłem jednak w stanie użyćPARTUUID=SSSSSSSS-02
(gdzie SSSSSSSS jest sygnaturą dysku NT pokazaną tuż przed komunikatem o błędzie).root=UUID
, tylkoroot=PARTUUID
. Jeśli chcesz użyć UUID systemu plików, myślę, że potrzebujesz initramfs, który może obsługiwać montowanie systemów plików przez UUID.grub
buty całkiem szczęśliwieroot=UUID
.To jest 5-letni wątek. Ale wciąż nie ma pełnej odpowiedzi. Brakuje małego przykładu. Oto on:
W tym przykładzie:
... za pomocą partycji GPT. W przypadku MBR (partycja dos) PARTUUID są krótsze, ale procedura jest taka sama ...
zdobądź PARTUUID z blkid:
/boot/grub/grub.cfg:
/ etc / fstab /:
Jest to znane z tego, że DZIAŁA z lfs8.1 (jądro 4.12.7). Ale myślę, że powinien on działać również z większością innych jąder (starszych i nowszych ...)
źródło