Po kilku ostatnich aktualizacjach mój komputer nie uruchamia się! Oto, co mogłem ustalić:
- To jest najnowszy komputer, który dostałem od korporacyjnej informatyki. Ma najnowszy procesor Intel (generacja Skylake).
- Na komputerze działa Ubuntu 16.04.
- Komputer ostatnio uruchomił się poprawnie w marcu. Problem jest prawdopodobnie spowodowany aktualizacją oprogramowania lub błędem sprzętowym.
- Mam inny komputer z 16.04 z zainstalowanym prawie tym samym oprogramowaniem (używałem
apt-clone
) i działa dobrze. Ma inny sprzęt (także amd64, ale inny procesor, inny procesor graficzny itp.). - Jądro się uruchamia, initrd działa poprawnie. Kiedy uruchamiam się z ekranem powitalnym w trybie graficznym, pojawia się monit o podanie hasła do mojego woluminu dm-crypt, a ostatnią rzeczą, jaką widzę, jest to, że został pomyślnie zainstalowany.
- Zawieszenie następuje przed wyświetleniem monitu o zalogowanie się. Gdy komputer się zawiesza, trudno się zawiesić. Nawet Alt+ SysRqnie odpowiada. Procesor jest najwyraźniej ustalony na 100%, ponieważ wentylatory włączają się przy pełnym wybuchu.
- Nadal mam jądro, które uruchomiłem przed ponownym uruchomieniem. Kiedy wybieram to jądro w menu Grub, otrzymuję to samo zawieszenie. Wygląda na to, że jest to wcześniejszy błąd jądra, który jest wywoływany przez coś innego - ale co?
- Jeśli wyłączę ekran powitalny (usuń
splash
zlinux
wiersza poleceń w Grub), zobaczę kilka uruchomionych usług, a następnie się zablokuje. Mogę uzyskać powłokę root, dodając
init=/bin/sh
dolinux
wiersza poleceń w Grub. Mogę nawet przejść dalej, dodającsystemd.unit=basic.target systemd.shell
Uruchamia to szereg usług i uruchamia powłokę root na tty9.
- Jeśli uruchomię
systemctl start multi-user.target
z tej powłoki root, komputer się zablokuje. Prawdopodobnie problem jest wywoływany przez jedną z tych usług. - Pobiegłem,
systemctl list-dependencies multi-user.target
aby dowiedzieć się, jakie usługi się zaczną. Ręcznie uruchomiłem wymienione zależności jeden po drugim i wszystko zaczęło się dobrze.
Wygląda to na błąd sprzętowy (ponieważ występuje na jednym komputerze, ale nie na drugim), który jest wywoływany przez niektóre oprogramowanie. Ale jakie oprogramowanie? Ponieważ komputer blokuje się tak mocno, nie mogę uzyskać żadnych dzienników. Nie mogę nawet uzyskać żadnego przydatnego wyjścia konsoli.
Przydatne techniki debugowania:
- Alt+ SysRq: magiczny klucz SysRq , który pozwala wykonywać takie czynności, jak restart awaryjny. Uzyskuje dostęp do jądra na bardzo niskim poziomie, więc działa we wszystkich wypadkach oprócz najgorszych. W moim przypadku Alt+ SysRqnie odpowiada, co pokazuje, jak głęboko się pogarsza.
- Aby zmodyfikować parametry rozruchu, naciśnij i przytrzymaj Shiftkilka sekund po włączeniu zasilania. Musisz go nacisnąć po zainicjowaniu systemu BIOS przez klawiaturę, ale przed uruchomieniem systemu operacyjnego. To sprawia, że pojawia się menu Grub .
- W menu Grub naciśnij, eaby edytować wiersz polecenia dla pozycji menu. Aby zmienić parametry rozruchowe systemu Linux, przejdź do wiersza rozpoczynającego się od
linux
. W nowoczesnym Ubuntu znajdziesz stare jądra w „Zaawansowane opcje Ubuntu”. Po wprowadzeniu żądanych zmian w wierszu poleceń naciśnij Ctrl+, xaby uruchomić. Wszelkie wprowadzone tutaj zmiany dotyczą tylko rozruchu, nie są zapisywane na dysku. - Kilka przydatnych opcji w
linux
wierszu poleceń:quiet nosplash
ukrywa prawie wszystkie komunikaty rozruchowe. Usuń je, aby otrzymywać komunikaty na konsoli podczas rozruchu, co jest konieczne, aby mieć szansę zdiagnozowania problemów.recovery
daje powłokę root bez prawie żadnych usług. Musisz znać hasło roota. Wykorzystuje to pozycja menu „tryb odzyskiwania”.init=/bin/sh
daje powłokę główną bez żadnych usług. Aby wznowić normalny rozruch, uruchomexec init
. W tym momencie możesz przekazać opcje systemowe, np.exec init --unit=basic.target
Aby uruchomić init i kilka usług (pamiętaj, że to nie uruchamia się w żaden sposób, aby się zalogować, więc lepiej, aby powłoka działała na innej konsoli). Zauważ, że główny system plików jest zamontowany tylko do odczytu; biegnij,mount -o remount,rw /
aby móc do niego napisać.systemd.unit=basic.target
uruchamia bardzo podstawowy zestaw usług. Pamiętaj, że nie obejmuje to żadnego sposobu logowania! Możesz ustawić to jako domyślne, uruchamiającsystemctl set-default basic.target
w oknie głównym. Aby przywrócić pierwotny domyślny cel, uruchomsystemctl set-default graphical.target
(lubsystemctl set-default multi-user.target
dla serwera bez GUI).systemd.debug-shell
uruchamia powłokę root na tty9. Możesz włączyć to dla każdego rozruchu, uruchamiającsystemctl enable debug-shell
w wierszu głównym. Nie zapomnij wyłączyć tej opcji po rozwiązaniu problemusystemctl disable debug-shell
. Naciśnij Alt+, F9aby przełączyć na tty9.- Zobacz także Fedory Systemd wskazówek , Arch Linux wskazówek problemu z rozruchem .