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.
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.
Sugerowana kolejność metod odzyskiwania
Konsola szeregowa platformy Azure
Wymiana dysku — można zautomatyzować przy użyciu jednego z następujących elementów:
Starsza metoda
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
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:
Po zakończeniu możesz spróbować uzyskać dostęp do pliku sysrq i zobaczyć, że możliwe jest ponowne uruchomienie.
Wybierz pozycję Reboot and Send SysRq Command (Uruchom ponownie i wyślij polecenie SysRq )
System powinien rejestrować komunikat resetowania, taki jak ten
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:
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
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
Wybierz wiersz wyświetlany (tryb odzyskiwania) nie naciskaj Enter, ale naciśnij "e"
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
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
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ć.
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.
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
Ponowne instalowanie systemu plików /(root) RW przy użyciu polecenia
mount -o remount,rw /
Teraz możesz przeprowadzić zmianę hasła głównego lub wiele innych zmian konfiguracji systemu Linux
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
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.