Udostępnij za pośrednictwem


Proaktywne zapewnienie dostępu do narzędzia GRUB i narzędzia sysrq może zaoszczędzić dużo czasu przestoju

Dostęp do konsoli szeregowej i narzędzia GRUB w większości przypadków skróci czas odzyskiwania maszyny wirtualnej IaaS z systemem Linux. Grub oferuje opcje odzyskiwania, które w przeciwnym razie zajęłoby więcej czasu, aby odzyskać maszynę wirtualną.

Przyczyn odzyskiwania maszyny wirtualnej jest wiele i można je przypisać scenariuszom takim 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
  • Zniekształcone pliki konfiguracji sshd
  • Konfiguracje sieci

Wiele innych scenariuszy opisanych tutaj

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

Jeśli dopiero dopiero korzystasz z konsoli szeregowej, skorzystaj z tego linku.

Porada

Przed wprowadzeniem zmian upewnij się, że wykonujesz kopie zapasowe plików

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

Odzyskiwanie wideo maszyny wirtualnej z systemem Linux

Istnieje wiele metod ułatwiających odzyskiwanie maszyn wirtualnych z systemem Linux. W środowisku chmury ten proces był trudny. Nieustannie postępuje się w zakresie narzędzi i funkcji, aby zapewnić szybkie odzyskiwanie usług.

Konsola szeregowa platformy Azure umożliwia interakcję z maszyną wirtualną z systemem Linux tak, jakby znajdowała się 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 tryby awaryjne , 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 napotkanego problemu, na przykład utracone lub niesłuszne hasło można zresetować za pośrednictwem opcji Azure Portal ->Resetuj hasło. Funkcja Resetuj hasło jest znana jako rozszerzenie i komunikuje się z agentem gościa systemu Linux.

Inne rozszerzenia, takie jak Skrypt niestandardowy są dostępne, jednak te opcje wymagają, aby waagent systemu Linux był w dobrej kondycji, co nie zawsze ma miejsce.

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

Zapewnienie dostępu do konsoli szeregowej platformy Azure i narzędzia GRUB oznacza, że zmiana hasła lub nieprawidłowa konfiguracja może zostać naprawiona w ciągu kilku minut, a nie godzin. Możesz nawet wymusić rozruch maszyny wirtualnej z alternatywnego jądra, jeśli masz wiele jąder na dysku w scenariuszu, w którym podstawowe jądro ulega uszkodzeniu.

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

Sugerowana kolejność metod odzyskiwania

Wideo zamiany dysku

Jeśli nie masz dostępu do narzędzia GRUB watch tym filmie 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 do uzyskiwania dostępu do programu GRUB i nie wszystkie są skonfigurowane tak, aby były przerywane 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 przejrzymy różne dystrybucje systemu Linux i konfiguracje dokumentów dotyczące sposobu udostępniania narzędzia 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 konsoli szeregowej platformy Azure, również przydatna 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 wszystkie funkcje programu sysrq lub 128, co umożliwia ponowne uruchomienie/wyłączenie

Włączanie wideo sysrq

Aby skonfigurować maszynę wirtualną do akceptowania ponownego uruchomienia za pomocą poleceń SysRq na Azure Portal, należy ustawić wartość 1 dla parametru jądra kernel.sysrq

Aby ta konfiguracja utrwaliła ponowny rozruch, 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 sudo zostanie przerwane, nie będzie możliwe skonfigurowanie narzędzia sysrq z poziomu wiersza polecenia powłoki.

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

Korzystanie z funkcji Azure Portal Operations —> Run Command —> RunShellScript wymaga, aby proces waagent był w dobrej kondycji, a następnie wstrzyknąć to polecenie, aby włączyć narzędzie sysrq

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

Jak pokazano tutaj:

Zrzut ekranu okna RunShellScript po wstrzyknięciu polecenia.

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

Zrzut ekranu przedstawiający opcję Wyślij polecenie SysRq pod ikoną klawiatury na pasku przycisku.

Wybierz pozycję Uruchom ponownie i wyślij polecenie SysRq

Zrzut ekranu przedstawiający opcję Ponowny rozruch 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 narzędzia GRUB systemu Ubuntu

Domyślnie podczas rozruchu maszyny wirtualnej powinno być możliwe uzyskiwanie dostępu do narzędzia GRUB, przytrzymując klawisz Esc , jeśli menu GRUB nie zostanie wyświetlone, możesz wymusić i utrzymać menu GRUB na ekranie w konsoli szeregowej platformy Azure przy użyciu jednej z tych opcji.

Opcja 1 — wymusza wyświetlenie grub na ekranie

Zaktualizuj plik /etc/default/grub.d/50-cloudimg-settings.cfg, aby zachować menu GRUB na ekranie dla określonego limitu czasu. Nie jest wymagane trafienie klawisza Esc , ponieważ grub zostanie wyświetlony natychmiast.

GRUB_TIMEOUT=5
GRUB_TIMEOUT_STYLE=menu

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

Podobne zachowanie można napotkać, wprowadzając zmiany w pliku /etc/default/grub i obserwuj 3-sekundowy limit czasu, aby trafić esc

Dodaj komentarz do tych dwóch wierszy:

#GRUB_HIDDEN_TIMEOUT=0
#GRUB_HIDDEN_TIMEOUT_QUIET=true

i dodaj ten wiersz:

GRUB_TIMEOUT_STYLE=countdown

Ubuntu 12.04

System Ubuntu 12.04 umożliwia 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: monit:

  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. Zapytaj upstart, aby rozpocząć getty

    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 oczyszczania są dostępne dla systemu Ubuntu za pośrednictwem narzędzia GRUB, jednak te ustawienia są dostępne tylko wtedy, gdy odpowiednio skonfigurujesz parametry jądra. Nieskonfigurowanie tego parametru rozruchu jądra wymusi 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 klawisz Enter

Zrzut ekranu przedstawiający konsolę szeregową z opcjami zaawansowanymi dla systemu Ubuntu.

Wybierz wiersz wyświetlający (tryb odzyskiwania) nie naciskaj klawisza Enter, ale naciśnij klawisz "e"

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

Znajdź wiersz, który załaduje jądro i zastąp element nomodeset ostatniego parametru elementem docelowym 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 klawisze 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 przedstawiający konsolę szeregową w menu Odzyskiwania, które oferuje dodatkowe opcje odzyskiwania.

Konfiguracja narzędzia Red Hat GRUB

Konfiguracja narzędzia 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 programu Red Hat 7.2 i 7.3 GRUB

Plik do zmodyfikowania to /etc/default/grub — domyślna konfiguracja wygląda jak w tym przykładzie:

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ż ten 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ę narzędzia 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ć narzędzia GRUB i SysRq przy użyciu jednego wiersza w powłoce lub za pomocą polecenia Uruchom. Przed uruchomieniem tego polecenia utwórz 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 narzędzia Red Hat 6.x GRUB

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

#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

W terminalu ostatniego wiersza –-timeout=5 konsoli szeregowej jeszcze bardziej zwiększy limit czasu GRUB przez dodanie monitu 5 sekund wyświetlania Naciśnij dowolny klucz, aby kontynuować.

Zrzut ekranu przedstawia konsolę z danymi wyjściowymi.

Menu GRUB powinno być wyświetlane na ekranie dla skonfigurowanego limitu czasu=15 bez konieczności naciskania klawisza Esc. Pamiętaj, aby kliknąć pozycję Konsola 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 bootloadera YaST zgodnie z oficjalną dokumentacją

Możesz też dodać/zmienić 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"

Odtwórz plik grub.cfg

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

SLES 11 SP4

Konsola szeregowa jest wyświetlana i wyświetla komunikaty rozruchowe, ale nie wyświetla monitu logowania:

Otwórz sesję ssh na maszynie wirtualnej i zaktualizuj plik /etc/inittab , cofając komentowanie tego wiersza:

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

Następnie uruchom polecenie

telinit q

Aby włączyć narzędzie 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śnij dowolny klucz w konsoli przez 5 sekund

Następnie zostanie wyświetlone menu GRUB przez dodatkowe 5 sekund — naciśnięcie strzałki w dół spowoduje przerwanie licznika i wybranie jądra, które ma zostać uruchomione, dołącza jednokrotne słowo kluczowe w trybie 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 zostanie zastąpiony powłoką 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 wprowadzać inne zmiany konfiguracji.

Wymuszanie na jądrze monitu powłoki bash

Dostęp 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, a pojedynczy 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 polecenie init=/bin/bash do wiersza rozruchu jądra

Zrzut ekranu przedstawiający konsolę ze zaktualizowanym wierszem rozruchu.

Ponowne instalowanie /(główny) system plików RW przy użyciu polecenia

mount -o remount,rw /

Zrzut ekranu przedstawiający konsolę z akcją ponownej instalacji.

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

Zrzut ekranu przedstawiający 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 pojedynczego użytkownika lub w trybie awaryjnym. Wybierz jądro, które chcesz uruchomić lub przerwać przy użyciu klawiszy strzałek. Wprowadź żądany tryb, dołączając słowo kluczowe pojedyncze lub 1 do wiersza rozruchu jądra. W systemach RHEL można również dołączyć plik rd.break.

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

Zrzut ekranu przedstawiający wpis *Ubuntu w rozruchu wybranego ekranu 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 pytanie w społeczności wsparcia dla platformy Azure. Możesz również przesłać opinię o produkcie do społeczności opinii platformy Azure.