Proaktywne zapewnienie dostępu do programu GRUB i sysrq może zaoszczędzić dużo czasu pracy

Dotyczy: ✔️ maszyny wirtualne z systemem Linux

Uzyskanie dostępu do konsoli szeregowej i programu GRUB poprawi czas odzyskiwania maszyny wirtualnej IaaS z systemem Linux w większości przypadków. Program GRUB oferuje opcje odzyskiwania, które w przeciwnym razie odzyskanie maszyny wirtualnej zajęłoby więcej czasu.

Przyczyny odzyskiwania maszyny wirtualnej są wiele i mogą być przypisywane do scenariuszy, takich jak:

  • Uszkodzone systemy plików/jądro/MBR (główny rekord rozruchowy)
  • Nieudane uaktualnienia jądra
  • Nieprawidłowe parametry jądra GRUB
  • Nieprawidłowe konfiguracje fstab
  • Konfiguracje zapory
  • Utracone hasło
  • Pliki konfiguracji sshd mangled
  • Konfiguracje sieci

Wiele innych scenariuszy, jak opisano tutaj

Sprawdź, czy masz dostęp do programu GRUB i konsoli szeregowej na maszynach wirtualnych wdrożonych na platformie Azure.

Jeśli dopiero zaczynasz korzystać z konsoli szeregowej, skorzystaj z tego linku.

Napiwek

Przed wprowadzeniem zmian upewnij się, że kopie zapasowe plików są wykonywane

Obejrzyj to wideo poniżej, aby zobaczyć, jak szybko odzyskać maszynę wirtualną z systemem Linux po uzyskaniu dostępu do programu GRUB

Odzyskiwanie wideo maszyny wirtualnej z systemem Linux

Istnieje wiele metod ułatwiania odzyskiwania maszyn wirtualnych z systemem Linux. W środowisku chmury ten proces był trudny. Postęp jest stale wprowadzany do narzędzi i funkcji w celu zapewnienia szybkiego odzyskania usług.

Konsola szeregowa platformy Azure umożliwia interakcję z maszyną wirtualną z systemem Linux tak, jakby była w konsoli systemu.

Można manipulować wieloma plikami konfiguracji, w tym sposobem rozruchu jądra.

Bardziej doświadczeni administratorzy systemu Linux/Unix docenią tryby pojedynczego użytkownika i trybu awaryjnego, które są dostępne za pośrednictwem konsoli szeregowej platformy Azure, dzięki czemu wymiana dysków i usuwanie maszyn wirtualnych w wielu scenariuszach odzyskiwania są nadmiarowe.

Metoda odzyskiwania zależy od występującego problemu, na przykład utracone lub zagubione hasło można zresetować za pomocą opcji witryny Azure Portal —> Resetuj hasło. Funkcja Resetowanie hasła jest znana jako rozszerzenie i komunikuje się z agentem gościa systemu Linux.

Dostępne są inne rozszerzenia, takie jak skrypt niestandardowy, jednak te opcje wymagają, aby waagent systemu Linux był uruchomiony i w dobrej kondycji, który nie zawsze jest w takim przypadku.

Zrzut ekranu przedstawiający stan agenta na stronie Właściwości w witrynie Azure Portal.

Zapewnienie dostępu do konsoli szeregowej platformy Azure i programu GRUB oznacza, że zmiana hasła lub niepoprawna konfiguracja może zostać naprawiona w ciągu kilku minut zamiast godzin. Można nawet wymusić uruchomienie maszyny wirtualnej z alternatywnego jądra, jeśli w scenariuszu, w którym podstawowe jądro staje się uszkodzone.

Zrzut ekranu przedstawiający wybrany ekran rozruchu systemu operacyjnego w programie GRUB, który pokazuje, że można wybrać wiele jąder.

Sugerowana kolejność metod odzyskiwania

Wymiana dysku Wideo

Jeśli nie masz dostępu do tego filmu wideo i zobaczysz, jak można łatwo zautomatyzować procedurę zamiany dysku w celu odzyskania maszyny wirtualnej

Wyzwania

Nie wszystkie maszyny wirtualne platformy Azure z systemem Linux są domyślnie skonfigurowane dla dostępu GRUB i nie są skonfigurowane do przerwania za pomocą poleceń sysrq. Niektóre starsze dystrybucje, takie jak SLES 11, nie są skonfigurowane do wyświetlania monitu logowania w konsoli szeregowej platformy Azure

W tym artykule zapoznamy się z różnymi dystrybucjami systemu Linux i konfiguracjami dokumentów na temat udostępniania programu GRUB.

Jak skonfigurować maszynę wirtualną z systemem Linux do akceptowania kluczy SysRq

Klucz sysrq jest domyślnie włączony w niektórych nowszych dystrybucjach systemu Linux, chociaż w innych może być skonfigurowany do akceptowania wartości tylko dla niektórych funkcji SysRq. W starszych dystrybucjach może być całkowicie wyłączona.

Funkcja SysRq jest przydatna do ponownego uruchamiania maszyny wirtualnej, która uległa awarii lub nie odpowiada bezpośrednio z poziomu konsoli szeregowej platformy Azure, również pomocne w uzyskaniu dostępu do menu GRUB, alternatywnie ponowne uruchomienie maszyny wirtualnej z innego okna portalu lub sesji SSH może spowodować usunięcie bieżącego połączenia konsoli, co spowoduje wygaśnięcie limitów czasu GRUB, do których są używane do wyświetlania menu GRUB. Maszyna wirtualna musi być skonfigurowana tak, aby akceptowała wartość 1 dla parametru jądra, co umożliwia korzystanie ze wszystkich funkcji sysrq lub 128, co umożliwia ponowne uruchomienie/wyłączanie zasilania

Włączanie pliku wideo sysrq

Aby skonfigurować maszynę wirtualną tak, aby akceptowała ponowny rozruch za pomocą poleceń SysRq w witrynie Azure Portal, należy ustawić wartość 1 dla jądra parametru jądra.sysrq

Aby ta konfiguracja utrwała ponowne uruchomienie, dodaj wpis do pliku sysctl.conf

echo kernel.sysrq = 1 >> /etc/sysctl.conf

Aby dynamicznie skonfigurować parametr jądra

sysctl -w kernel.sysrq=1

Jeśli nie masz dostępu do katalogu głównego lub program sudo zostanie przerwany, nie będzie możliwe skonfigurowanie narzędzia sysrq z poziomu wiersza polecenia powłoki.

W tym scenariuszu można włączyć usługę sysrq przy użyciu witryny Azure Portal. Ta metoda może być przydatna, jeśli plik sudoers.d/waagent został uszkodzony lub został usunięty.

Za pomocą funkcji Operacje w witrynie Azure Portal —> Uruchom polecenie —> Uruchom skrypt RunShellScript wymaga, aby proces waagent był w dobrej kondycji, można następnie wstrzyknąć to polecenie, aby włączyć polecenie sysrq

sysctl -w kernel.sysrq=1 ; echo kernel.sysrq = 1 >> /etc/sysctl.conf

Jak pokazano poniżej:

Zrzut ekranu przedstawiający okno RunShellScript podczas wstrzykiwania polecenia.

Po zakończeniu możesz spróbować uzyskać dostęp do pliku sysrq i zobaczyć, że możliwe jest ponowne uruchomienie.

Zrzut ekranu przedstawiający opcję Wyślij polecenie SysRq w obszarze ikony klawiatury na pasku przycisku.

Wybierz pozycję Reboot and Send SysRq Command (Uruchom ponownie i wyślij polecenie SysRq )

Zrzut ekranu przedstawiający opcję Ponowne uruchamianie w oknie dialogowym Wysyłanie polecenia SysRq do gościa.

System powinien rejestrować komunikat resetowania, taki jak ten

Zrzut ekranu przedstawiający dziennik komunikatów resetowania w interfejsie wiersza polecenia.

Konfiguracja systemu Ubuntu GRUB

Domyślnie powinno być możliwe uzyskanie dostępu do trybu GRUB przez przytrzymanie Esc podczas rozruchu maszyny wirtualnej, jeśli menu GRUB nie zostanie wyświetlone, możesz wymusić i zachować menu GRUB na ekranie w konsoli szeregowej platformy Azure przy użyciu jednej z tych opcji.

Opcja 1 — wymusza wyświetlanie gruba na ekranie

Zaktualizuj plik /etc/default/grub.d/50-cloudimg-settings.cfg, aby zachować menu GRUB na ekranie dla określonego limitu czasu. Nie musisz od razu wyświetlać Esc , ponieważ zostanie wyświetlony komunikat GRUB.

GRUB_TIMEOUT=5
GRUB_TIMEOUT_STYLE=menu

Opcja 2 — umożliwia naciśnięcie Esc przed uruchomieniem

Podobne zachowanie może wystąpić przez wprowadzenie zmian w pliku /etc/default/grub i obserwowanie 3-sekundowego przekroczenia limitu czasu w celu trafienia Esc

Oznacz następujące dwa wiersze jako komentarz:

#GRUB_HIDDEN_TIMEOUT=0
#GRUB_HIDDEN_TIMEOUT_QUIET=true

i dodaj następujący wiersz:

GRUB_TIMEOUT_STYLE=countdown

Ubuntu 12.04

System Ubuntu 12.04 umożliwi dostęp do konsoli szeregowej, ale nie oferuje możliwości interakcji. Logowanie : monit nie jest widoczny

Aby uzyskać identyfikator logowania w wersji 12.04:

  1. Utwórz plik o nazwie /etc/init/ttyS0.conf zawierający następujący tekst:

    # ttyS0 - getty
    #
    # This service maintains a getty on ttyS0 from the point the system is
    # started until it is shut down again.
    start on stopped rc RUNLEVEL=[12345]
    stop on runlevel [!12345]
    
    respawn
    exec /sbin/getty -L 115200 ttyS0 vt102
    
  2. Poproś o rozpoczęcie pracy

    sudo start ttyS0
    

Ustawienia wymagane do skonfigurowania konsoli szeregowej dla wersji systemu Ubuntu można znaleźć tutaj

Tryb odzyskiwania systemu Ubuntu

Dodatkowe opcje odzyskiwania i czyszczenia są dostępne dla systemu Ubuntu za pośrednictwem programu GRUB, jednak te ustawienia są dostępne tylko w przypadku odpowiedniego skonfigurowania parametrów jądra. Nie można skonfigurować tego parametru rozruchu jądra wymusiłoby wysłanie menu Odzyskiwania do Diagnostyka Azure, a nie do konsoli szeregowej platformy Azure. Dostęp do menu odzyskiwania systemu Ubuntu można uzyskać, wykonując następujące kroki:

Przerywanie procesu ROZRUCHu i uzyskiwanie dostępu do menu GRUB

Wybierz pozycję Opcje zaawansowane dla systemu Ubuntu i naciśnij Enter

Zrzut ekranu przedstawia konsolę szeregową z wybranymi opcjami zaawansowanymi dla systemu Ubuntu.

Wybierz wiersz wyświetlany (tryb odzyskiwania) nie naciskaj Enter, ale naciśnij "e"

Zrzut ekranu przedstawia konsolę szeregową z wybraną wersją trybu odzyskiwania.

Znajdź wiersz, który załaduje jądro i zastąp ostatni parametr nomodeset lokalizacją docelową jako console=ttyS0

linux /boot/vmlinuz-4.15.0-1023-azure root=UUID=21b294f1-25bd-4265-9c4e-d6e4aeb57e97 ro recovery nomodeset

change to

linux /boot/vmlinuz-4.15.0-1023-azure root=UUID=21b294f1-25bd-4265-9c4e-d6e4aeb57e97 ro recovery console=ttyS0

Zrzut ekranu przedstawia konsolę szeregową ze zmienioną wartością.

Naciśnij Ctrl-x , aby uruchomić i załadować jądro. Jeśli wszystko pójdzie dobrze, zobaczysz te dodatkowe opcje, które mogą pomóc w wykonaniu innych opcji odzyskiwania

Zrzut ekranu przedstawia konsolę szeregową w menu Odzyskiwania, która oferuje dodatkowe opcje odzyskiwania.

Konfiguracja programu Red Hat GRUB

Konfiguracja oprogramowania Red Hat 7.4+ GRUB

Domyślna konfiguracja /etc/default/grub w tych wersjach jest odpowiednio skonfigurowana

GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL="serial console"
GRUB_SERIAL_COMMAND="serial"
GRUB_CMDLINE_LINUX="console=tty1 console=ttyS0 earlyprintk=ttyS0"
GRUB_DISABLE_RECOVERY="true"

Włączanie klucza SysRq

sysctl -w kernel.sysrq=1;echo kernel.sysrq = 1 >> /etc/sysctl.conf;sysctl -a | grep -i sysrq

Konfiguracja oprogramowania Red Hat 7.2 i 7.3 GRUB

Plik do modyfikacji to /etc/default/grub — domyślna konfiguracja wygląda następująco:

GRUB_TIMEOUT=1
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="console=tty1 console=ttyS0 earlyprintk=ttyS0"
GRUB_DISABLE_RECOVERY="true"

Zmień następujące wiersze w /etc/default/grub

GRUB_TIMEOUT=1 

to

GRUB_TIMEOUT=5
GRUB_TERMINAL_OUTPUT="console"

to

GRUB_TERMINAL="serial console"

Dodaj również następujący wiersz:

GRUB_SERIAL_COMMAND="serial –speed=115200 –unit=0 –word=8 –parity=no –stop=1″

/etc/default/grub powinien teraz wyglądać podobnie do tego przykładu:

GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL="serial console"
GRUB_CMDLINE_LINUX="console=tty1 console=ttyS0 earlyprintk=ttyS0"
GRUB_DISABLE_RECOVERY="true"

Ukończ i zaktualizuj konfigurację grub przy użyciu polecenia

grub2-mkconfig -o /boot/grub2/grub.cfg

Ustaw parametr jądra SysRq:

sysctl -w kernel.sysrq = 1;echo kernel.sysrq = 1 >> /etc/sysctl.conf;sysctl -a | grep -i sysrq

Alternatywnie można skonfigurować elementy GRUB i SysRq przy użyciu pojedynczego wiersza w powłoce lub za pomocą polecenia Uruchom. Przed uruchomieniem tego polecenia wykonaj kopię zapasową plików:

cp /etc/default/grub /etc/default/grub.bak; sed -i 's/GRUB_TIMEOUT=1/GRUB_TIMEOUT=5/g' /etc/default/grub; sed -i 's/GRUB_TERMINAL_OUTPUT="console"/GRUB_TERMINAL="serial console"/g' /etc/default/grub; echo "GRUB_SERIAL_COMMAND=\"serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1\"" >> /etc/default/grub;grub2-mkconfig -o /boot/grub2/grub.cfg;sysctl -w kernel.sysrq=1;echo kernel.sysrq = 1 /etc/sysctl.conf;sysctl -a | grep -i sysrq

Konfiguracja programu Red Hat 6.x GRUB

Plik do zmodyfikowania to /boot/grub/grub.conf. Wartość timeout określi, jak długo jest wyświetlany grub.

#boot=/dev/vda
default=0
timeout=15
splashimage=(hd0,0)/grub/splash.xpm.gz
#hiddenmenu
serial --unit=0 --speed=9600
terminal serial
terminal --timeout=5 serial console

Ostatni wiersz terminala --timeout=5 konsoli szeregowej dodatkowo zwiększy limit czasu GRUB , dodając monit o 5 sekund wyświetlając naciśnięcie dowolnego, aby kontynuować.

Zrzut ekranu przedstawiający konsolę z danymi wyjściowymi.

Menu GRUB powinno być wyświetlane na ekranie dla skonfigurowanego limitu czasu=15 bez konieczności naciskania Esc. Upewnij się, że kliknij konsolę w przeglądarce, aby uaktywnić menu i wybrać wymagane jądro.

Zrzut ekranu przedstawia konsolę z dwiema opcjami systemu Linux.

SuSE

SLES 12 sp1

Użyj narzędzia rozruchowego YaST zgodnie z oficjalną dokumentacją

Lub dodaj/zmień na /etc/default/grub następujące parametry:

GRUB_TERMINAL=serial
GRUB_TIMEOUT=5
GRUB_SERIAL_COMMAND="serial --unit=0 --speed=9600 --parity=no"

```console
Verify that ttys0 is used in the GRUB_CMDLINE_LINUX or GRUB_CMDLINE_LINUX_DEFAULT

```console
GRUB_CMDLINE_LINUX_DEFAULT="console=ttyS0,9600n"

Utwórz ponownie plik grub.cfg

grub2-mkconfig -o /boot/grub2/grub.cfg

SLES 11 Z DODATKIEM SP4

Zostanie wyświetlona konsola szeregowa i zostanie wyświetlony komunikat rozruchowy, ale nie wyświetla monitu logowania:

Otwórz sesję SSH na maszynie wirtualnej i zaktualizuj plik /etc/inittab , usuwając komentarz w tym wierszu:

#S0:12345:respawn:/sbin/agetty -L 9600 ttyS0 vt102

Następnie uruchom polecenie

telinit q

Aby włączyć tryb GRUB, należy wprowadzić następujące zmiany w pliku /boot/grub/menu.lst

timeout 5
serial --unit=0 --speed=9600 --parity=no
terminal --timeout=5 serial console

root (hd0,0)
kernel /boot/vmlinuz-3.0.101-108.74-default root=/dev/disk/by-uuid/ab6b62bb--
1a8c-45eb-96b1-1fbc535b9265 disk=/dev/sda  USE_BY_UUID_DEVICE_NAMES=1 earlyprinttk=ttyS0 console=ttyS0 showopts vga=0x314

Ta konfiguracja umożliwi wyświetlenie komunikatu Naciśnięcie dowolnego w konsoli przez 5 sekund

Następnie wyświetli menu GRUB przez dodatkowe 5 sekund — naciskając strzałkę w dół, przerwisz licznik i wybierz jądro, które chcesz uruchomić, dołączając słowo kluczowe single dla trybu pojedynczego użytkownika, który wymaga ustawienia hasła głównego.

Dołączenie polecenia init=/bin/bash spowoduje załadowanie jądra, ale gwarantuje, że program init został zastąpiony przez powłokę powłoki bash.

Uzyskasz dostęp do powłoki bez konieczności wprowadzania hasła. Następnie możesz kontynuować aktualizowanie hasła dla kont systemu Linux lub wprowadzić inne zmiany konfiguracji.

Wymusić przejście jądra do wiersza polecenia powłoki bash

Posiadanie dostępu do programu GRUB umożliwia przerwanie procesu inicjowania, który jest przydatny w przypadku wielu procedur odzyskiwania. Jeśli nie masz hasła głównego i jeden użytkownik wymaga hasła głównego, możesz uruchomić jądro zastępujące program init monitem powłoki bash — to przerwanie można osiągnąć, dołączając init=/bin/bash do wiersza rozruchu jądra

Zrzut ekranu przedstawia konsolę ze zaktualizowanym wierszem rozruchu.

Ponowne instalowanie systemu plików /(root) RW przy użyciu polecenia

mount -o remount,rw /

Zrzut ekranu przedstawia konsolę z akcją ponownej instalacji.

Teraz możesz przeprowadzić zmianę hasła głównego lub wiele innych zmian konfiguracji systemu Linux

Zrzut ekranu przedstawia konsolę, w której można zmienić hasło główne i inną konfigurację.

Uruchom ponownie maszynę wirtualną za pomocą polecenia

/sbin/reboot -f

Tryb pojedynczego użytkownika

Alternatywnie może być konieczne uzyskanie dostępu do maszyny wirtualnej w trybie awaryjnym lub pojedynczym użytkowniku. Wybierz jądro, które chcesz uruchomić lub przerwać za pomocą strzałek. Wprowadź żądany tryb, dołączając słowo kluczowe single lub 1 do wiersza rozruchu jądra. W systemach RHEL można również dołączyć rd.break.

Aby uzyskać więcej informacji na temat uzyskiwania dostępu do trybu pojedynczego użytkownika, zobacz ten dokument

Zrzut ekranu przedstawiający wpis *Ubuntu w rozruchu wybrany ekran systemu operacyjnego w programie GRUB.

Następne kroki

Dowiedz się więcej o konsoli szeregowej platformy Azure

Skontaktuj się z nami, aby uzyskać pomoc

Jeśli masz pytania lub potrzebujesz pomocy, utwórz wniosek o pomoc techniczną lub zadaj pomoc techniczną społeczności platformy Azure. Możesz również przesłać opinię o produkcie do społeczności opinii na temat platformy Azure.