Jak naprawić rozruch z monitu initramfs i „zamontować: nie można odczytać” / etc / fstab ”: Nie ma takiego pliku lub katalogu” i „Nie znaleziono init”?


25

Instalowanie nowego systemu z wykorzystaniem partycjonowanego dysku GPT dedykowanego do pojedynczej partycji, sformatowanego ext4 , extlinux (wersja 4.05) jako bootloader, Ubuntu Core wersja 13.10 amd64 jako rootfs oraz Ubuntu linux-image-3.11.0-18-generic jako jądro, i extlinux-update, aby wygenerować konfigurację bootloadera.

Rezultatem po ponownym uruchomieniu (nadal na maszynie wirtualnej opartej na KVM) jest monit (initramfs) i następujące komunikaty:

mount: can't read '/etc/fstab': No such file or directory
mount: mounting /dev on /root/dev failed: No such file or directory
mount: mounting /sys on /root/sys failed: No such file or directory
mount: mounting /proc on /root/proc failed: No such file or directory
The filesystem doesn't have requested /sbin/init.
No init found. Try passing init= bootarg.

BusyBox to v1.20.2.

Regresja:

  • system plików został sprawdzony za pomocą fsck.ext4

Sprawdź, czy istnieje root

(initramfs) ls -l /dev/[hs]da*
ls: /dev/[hs]da*: No such file or directory

Argument root boot

(initramfs) cat /proc/cmdline
initrd=/boot/initrd.img-3.11.0-18-generic ro quiet BOOT_IMAGE=/boot/vmlinuz-3.11.0-18-generic

Sprawdź załadowane moduły

(initramfs) cat /proc/modules
e1000 145368 0 - Live 0xffffffffa0000000

/ zawartość folderu rozruchowego

$ sudo ls -l boot
-rw------- 1 root root 3296162 Feb 18 22:37 System.map-3.11.0-18-generic
-rw-r--r-- 1 root root 1007681 Feb 18 22:37 abi-3.11.0-18-generic
-rw-r--r-- 1 root root  163258 Feb 18 22:37 config-3.11.0-18-generic
drwxr-xr-x 2 root root    4096 Mar 17 20:13 extlinux
-rw-r--r-- 1 root root 4995000 Mar 16 23:35 initrd.img-3.11.0-18-generic
-rw------- 1 root root 5634192 Feb 18 22:37 vmlinuz-3.11.0-18-generic

Jak sprawić, aby system uruchomił się zgodnie z oczekiwanym domyślnym monitem bash?


Dlaczego dwa obrazy inicjujące? Czy możesz umieścić to na prawdziwym dysku i spróbować go uruchomić? Qemu i EFI mają problemy - na przykład, jeśli nie używasz obrazu oprogramowania rozruchowego EFI, wcale nie zajdziesz daleko.
mikeserv

A jeśli wszystko, czego chcesz, to zachęta do basha, zawsze możesz dołączyć bash do initramfs ...
mikeserv

W rzeczywistości pamiętam patrzenie na DUŻE partycje GPT w Ubuntu i rejestrowanie ich jako całkowicie puste. Po przytrzymaniu shift przy ponownym uruchomieniu, aby uzyskać wybór gruba na dysk na żywo, mogłem wybrać opcję Efi, po której miałem dysk.
mikeserv

Odpowiedzi:


11

Zmodyfikuj parametr rozruchowy jądra, ustawiając root=/dev/sdaXopcję. sdaXbędzie twój /lub rootpartycja. Przy następnym uruchomieniu zobaczysz, że initramfspróbujesz zamontować partycję, zanim spróbujesz uzyskać dostęp /etc/fstabdo systemów plików i zamontować je.

Zobacz pytanie „ Czy initramfs używa / etc / fstab? ”, Aby uzyskać więcej szczegółów.


Dodanie root=/dev/sdaX poprawia sytuację, zamiast tego (initramfs)pojawia się bashmonit o zalogowanie.
Pro Backup

1
Oprócz ręcznego dodawania root=/dev/sdaXdo rozruchu jądra, muszę zaktualizować /mnt/etc/default/extlinuxi zmienić EXTLINUX_ROOT=""sugerowane EXTLINUX_ROOT="/dev/sdaX"i uruchomić extlinux-updateponownie.
Pro Backup

10

Musisz zrozumieć initramfs, że jest to system plików. Od jądra 2.6 jest to w zasadzie jedyny narzucony przez jądro system plików (pomijając VFS, który prawdopodobnie jest także systemem plików) na twoim komputerze. Twój initramfs imagejest obrazem dysku.

W twoim initramfs imagepliku znajdą się wszystkie pliki, które według twojej dystrybucji były na tyle istotne, aby wymagać ich przed znalezieniem dysku głównego. Zwykle jest to Busybox i wszystkie moduły jądra, których potrzebujesz, aby znaleźć i zamontować urządzenie root. To nie działa dla ciebie.

Nie ma tu jednak żadnej tajemnicy, zważywszy na wszystko. Jeśli znajdziesz sposób na obejrzenie terminala, możesz nawigować poinitramfs. Ale najpierw musisz go odszyfrować.

Przede wszystkim i jeszcze raz - to tylko /.rootowanie Linuksa robi rzeczy typu root. W rzeczywistości, jeśli znajduje się on w innym pliku niż jądro, w rzeczywistości jest to już drugie urządzenie root. Każdy Linux kernel zawiera w zasadzie opróżnić /wszystkie swoje własne którym po raz pierwszy wierzchowce przed wyciągnięciem w swojejinitramfs.

Co więcej, initramfsto prawdziwy root. To tutaj jądro Linuksa inicjuje przestrzeń użytkownika, wykonując, inita następnie zrzekając się wszelkiej odpowiedzialności za ewentualne problemy, które mogą wystąpić później. Twoja initwydaje się być Busybox, podobnie jak wiele, co oznacza, że ​​kontrolowanie jej działań powinno być tak proste, jak edytowanie towarzyszących jej skryptów powłoki.

To dlaczego błąd polegający na nie znalezieniu init?Niemal na pewno odnosi się to do programu o nazwie, do initktórego wykonania initzostał poinstruowany twój skrypt.

Najbardziej uderzające jest dla mnie to, że pseudo systemy plików jądra - dev sys proc- nie montują. Jest to albo bardzo niepokojące, albo bardzo dobra wskazówka. Wspominasz KVM, który prowadzi mnie do kwestionowania możliwości jądra, ale zanim pójdziemy tą ciemną i koleinową drogą, czy możemy najpierw spróbować czegoś innego?

cd /root || mkdir /root

Uderza mnie, że komunikat o błędzie jest wielokrotnie:

Brak takiego pliku lub katalogu

W przeciwnym razie musisz odbudować swój initramfsobraz. Uruchom w tym celu dysk na żywo i uruchom dowolne narzędzie, które udostępnia twoja dystrybucja, aby osiągnąć ten cel. Aha, i upewnij się, że ten dysk na żywo jest załadowany w trybie EFI .

Oto jedyna naprawdę niezwykła rzecz initramfs - switchroot.

Jądro Linux zapewnia bardzo specjalne wywołanie systemowe przeznaczone dla wczesnej przestrzeni użytkownika i obsługi przenoszenia z initramfsurządzenia root. Działa, najpierw instalując dysk główny w punkcie montowania, initramfsa następnie przestawiając w nim główny system plików. Zakładam, że twój initramfs'sdocelowy punkt montowania jest rootoparty na tym, jak narzeka na ten temat. Dlaczego nie upewnić się, że tam jest?

W celu dalszego dochodzenia będziesz musiał trochę zirytować. Dostosuj program ładujący, aby przejść ...

init=/bin/sh

... jako parametr jądra.


... docelowym punktem montowania jest root ... Dlaczego nie upewnić się, że tam jest? Nie mam zielonego pojęcia, jak to sprawdzić.
Pro Backup

Już nie musisz. Masz bash, co oznacza, że ​​minąłeś initramfs. Ale nadal jesteś w KVM?
mikeserv

Tak, nadal jestem w KVM.
Pro Backup

@ProBackup Jeśli tam dotarłeś, musisz dać temu facetowi nagrodę - i tak właśnie powiedziałeś. Nieważne - najwyraźniej już to zrobiłeś. Jestem ciekawy, dlaczego musisz określić dwa obrazy init - dlaczego initrd i boot? Co to jest? Chciałbym również wiedzieć, co możesz, jeśli w ogóle, wyłączyć z działania efibootmgrpo otrzymaniu monitu na maszynie wirtualnej.
mikeserv

Zadałem nowe pytanie dotyczące SE: dlaczego: unix.stackexchange.com/questions/120999/... Uwaga: Myślę, że ten KVM (Parallels Desktop v8) ma tylko BIOS (nie UEFI) z powodu komunikatu rozruchowego BIOS.
Pro Backup

0

Miałem ten sam problem. To, co powiedział Alex, jest poprawne. Najpierw dostosowałem mój plik fstab, ale to nie pomogło. Więc sprawdziłem mój grub. Jeśli masz możliwość dostępu do menu grub.

  • Wybierz Linux, od czego chcesz zacząć i który sprawia problemy.
  • Naciśnij „e” i poszukaj „boot_image” lub „boot ... root”.
  • Sprawdź „ uuid ”.
  • W moim przypadku było źle. Robię zdjęcie w initramfs, wpisując „blkid” i biorę identyfikator użytkownika, na którym partycji jest zainstalowany mój Linux.
  • Pomiń poprawny identyfikator UUID od blkid do grub -> boot_image.

To rozwiązało mój problem. Po ponownym uruchomieniu mój system Linux potrzebował więcej czasu, aby rozpocząć sprawdzanie dysku. Ale teraz to działa ponownie.

Mam nadzieję, że mogę ci pomóc.

pozdrowienia

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.