Jądro z błędem „Nie można otworzyć urządzenia root”, gdzie mogę dołączyć opcję „root =”?

9

ilekroć próbuję uruchomić system z jądrem Linuksa 3.0.0.13 (zainstalowanym przez aktualizacje), pojawia się błąd paniki jądra:

VFS: Nie można otworzyć urządzenia głównego „sda1” lub nieznanego bloku (0,0) Dołącz poprawną opcję rozruchową „root =”;

Na szczęście, jeśli uruchomię przy użyciu poprzedniej wersji, nie mam żadnych problemów. Jak mogę to rozwiązać? Gdzie mam dołączyć poprawną root= option? Jeśli nie włączę tego jądra, jak mogę usunąć go jako domyślny i trzymać się starszego?

lucacerone
źródło
Mam ten sam problem. Główną różnicą, którą obserwuję, jest to, że do 3.0.0.12 grub conf próbuje zidentyfikować dysk twardy za pomocą UUID, 3.0.0.13 używa teraz / dev / sda6 .. dziwne ...
Dan Soap

Odpowiedzi:

11

Nie dostarczyłeś zbyt wielu informacji do dzienników i tak dalej, ale domyślam się, że najprawdopodobniej ten błąd, z którym się spotkałeś, jest spowodowany pomyleniem jądra przez napęd IDE / SATA. Szybkie wyszukiwanie w Google doprowadziło mnie do linku 1 , linku 2 , linku 3

Poniżej znajduje się fragment linku, do którego odwołuje się jeden z powyższych linków :

Najprawdopodobniej jeden z najczęściej występujących problemów (ale po jego rozwiązaniu najprawdopodobniej nigdy więcej go nie zobaczysz):

Unable to mount root fs on unknown-block(0,0)

lub

VFS: Cannot open root device "sda3" or unknown-block(8,3)
Please append a correct "root=" boot option; here are the available partitions:
  sda driver: sd
    sda1 sda2

Cyfry 0,0lub 8,3mogą być inne w twoim przypadku - odnosi się do urządzenia, do którego jądro próbuje uzyskać dostęp (i które nie działa). Ogólnie mówiąc, jeśli pierwsza cyfra to 0, jądro nie jest w stanie zidentyfikować sprzętu. Jeśli jest to kolejna cyfra (np. 8), nie jest w stanie zidentyfikować systemu plików (ale jest w stanie uzyskać dostęp do sprzętu).

Problem polega na tym, że jądro, które uruchamiasz, nie może przetłumaczyć root=/dev/...podanego parametru (w konfiguracji modułu ładującego) na prawdziwy, dostępny system plików. Kilka przyczyn może spowodować taką awarię:

  • w konfiguracji jądra brakuje sterowników do kontrolera HDD (przypadki 1, 4, 5)
  • w konfiguracji jądra brakuje sterowników magistrali używanej przez kontroler dysku twardego
  • w konfiguracji jądra brakuje sterowników dla używanego systemu plików
  • urządzenie jest błędnie zidentyfikowane w twoim parametrze root = (przypadki 2, 3)

Rozwiązanie problemu jest łatwe, jeśli znasz przyczynę. Najprawdopodobniej nie, więc oto krótka kontrola.

Otwórz kreatora konfiguracji jądra (część make menuconfig ), aby odpowiednio zaktualizować konfigurację jądra.

  • Sprawdź, czy masz wbudowaną (a nie jako moduł) obsługę magistrali / protokołu używanego przez kontroler dysku twardego.
  • Najprawdopodobniej jest to obsługa PCI, obsługa SATA (która jest poniżej obsługi urządzeń SCSI), ...
  • Sprawdź, czy masz wbudowaną (a nie jako moduł) obsługę używanego kontrolera dysku twardego. Jeden z najczęstszych przypadków: wybrałeś obsługę protokołu kontrolera dysku twardego (IDE, SATA, SCSI, ...), ale zapomniałeś
    wybrać samego sterownika kontrolera dysku twardego (np. Intel PIIX). Spróbuj
    uruchomić następującą komendę lscpi i wklej jej dane wyjściowe na
    http://kmuto.jp/debian/hcl/ . Witryna pokaże, które sterowniki jądra należy wybrać dla swojego systemu. W menuconfig
    możesz wpisać „/”, aby otworzyć funkcję wyszukiwania, i wpisać
    nazwę sterownika, aby dowiedzieć się, gdzie się znajduje. # lspci -n
  • Sprawdź, czy masz wbudowaną (a nie jako moduł) obsługę używanych systemów plików.
  • Powiedz, że twój główny system plików używa btrfs (czego zdecydowanie nie polecam), ale nie wybrałeś go lub wybrałeś do zbudowania jako
    moduł, wtedy zobaczysz błąd, który zobaczysz. Upewnij się, że
    obsługa systemu plików jest wbudowana w jądro.
  • Sprawdź, czy parametr jądra root=wskazuje prawidłową partycję.

    To nie jest tak głupie, jak się wydaje. Po uruchomieniu z jednym jądrem może wyświetlać dyski jako / dev / sda, podczas gdy twoje (skonfigurowane) jądro oczekuje, że będzie to / dev / hda. Nie dzieje się tak dlatego, że jądra są ze sobą niespójne, ale ze względu na zastosowane sterowniki: starsze sterowniki używają składni hda, nowsze sda.

    Spróbuj przełączyć hda na sda (i hdb na sdb i ...).

    Ponadto ostatnie jądra zawierają przegląd partycji znalezionych na urządzeniu. Jeśli tak, może pomóc ci zidentyfikować, czy źle wybrałeś partycję (w przykładzie podanym na początku tej sekcji znaleziono tylko dwie partycje, podczas gdy jądro otrzymało polecenie uruchomienia trzeciej). Jeśli nie, najprawdopodobniej jądro nie zna urządzenia na początku (więc nie może próbować wyświetlać partycji).

  • Sprawdź, czy jądro uruchamiane przez moduł ładujący jest prawidłowe. Widziałem ludzi, którzy po zbudowaniu pierwszego jądra (które nie uruchamia się), zapominają, że muszą się zamontować /bootprzed zastąpieniem jądra nowym. W rezultacie kopiują jądro do głównego systemu plików ( /), podczas gdy moduł ładujący nadal oczekuje, że obraz jądra znajdzie się na /bootpartycji.

Nitin Venkatesh
źródło
1
Cześć, minęło dużo czasu, ale dzięki. Miałem wadliwy CD-ROM, usuwając, że wszystko działało dobrze!
lucacerone
Link 1, link 4 i link 5 są już martwe.
zapytania
0

Po przeczytaniu odpowiedzi wyjaśniającej, co się dzieje, spróbuj użyć [Boot-Reapir CD] [1] [1]: https://help.ubuntu.com/community/Boot-Repair

Świetnie sprawdził się w naprawie „urządzenie jest źle zidentyfikowane w twoim parametrze root = (przypadki 2, 3)”.

madcap66
źródło