Maszyna wirtualna z systemem Linux uruchamia się na ratunek GRUB
Uwaga
CentOS, do którego odwołuje się ten artykuł, jest dystrybucją systemu Linux i osiągnie koniec życia (EOL). Rozważ użycie i odpowiednio zaplanuj. Aby uzyskać więcej informacji, zobacz Wskazówki dotyczące końca życia systemu CentOS.
W tym artykule omówiono wiele warunków powodujących problemy z ratowaniem grub i przedstawiono wskazówki dotyczące rozwiązywania problemów.
Podczas procesu rozruchu moduł ładujący rozruchu próbuje zlokalizować jądro systemu Linux i oddać kontrolkę rozruchu. Jeśli nie można wykonać tego przekazania, maszyna wirtualna wchodzi do konsoli ratunkowej GRUB. Monit konsoli ratunkowej GRUB nie jest wyświetlany w dzienniku konsoli szeregowej platformy Azure, ale można go wyświetlić na zrzucie ekranu diagnostyki rozruchu platformy Azure.
Identyfikowanie problemu z ratowaniem grub
Wyświetl zrzut ekranu diagnostyki rozruchu na stronie diagnostyki rozruchu maszyny wirtualnej Azure Portal. Ten zrzut ekranu pomaga zdiagnozować problem z ratowaniem grub i określić, czy błąd rozruchu powoduje problem.
Poniższy tekst jest przykładem problemu z akcją ratunkową GRUB:
error: file '/boot/grub2/i386-pc/normal.mod' not found.
Entering rescue mode...
grub rescue>
Rozwiązywanie problemów z ratowaniem narzędzia GRUB w trybie offline
Aby rozwiązać problem z ratowaniem grub, wymagana jest maszyna wirtualna do ratowania/naprawy. Użyj poleceń naprawy maszyny wirtualnej , aby utworzyć maszynę wirtualną naprawczą, która ma dołączoną kopię dysku systemu operacyjnego maszyny wirtualnej, którego dotyczy problem. Zainstaluj kopię systemów plików systemu operacyjnego na maszynie wirtualnej naprawy przy użyciu narzędzia chroot.
Uwaga
Alternatywnie można ręcznie utworzyć maszynę wirtualną ratunkową przy użyciu Azure Portal. Aby uzyskać więcej informacji, zobacz Rozwiązywanie problemów z maszyną wirtualną z systemem Linux, dołączając dysk systemu operacyjnego do maszyny wirtualnej odzyskiwania przy użyciu Azure Portal.
Zidentyfikuj problem z ratowaniem grub. Jeśli napotkasz jeden z następujących problemów z ratowaniem grub, przejdź do odpowiedniej sekcji, aby rozwiązać ten problem:
Po rozwiązaniu problemu z ratowaniem grub wykonaj następujące akcje:
Odinstaluj kopię systemów plików z maszyny wirtualnej ratowniczej/naprawczej.
Uruchom polecenie ,
az vm repair restore
aby zamienić naprawiony dysk systemu operacyjnego na oryginalny dysk systemu operacyjnego maszyny wirtualnej. Aby uzyskać więcej informacji, zobacz Krok 5 w artykule Naprawianie maszyny wirtualnej z systemem Linux przy użyciu poleceń naprawy maszyny wirtualnej platformy Azure.Sprawdź, czy maszyna wirtualna może zacząć od przyjrzenia się konsoli szeregowej platformy Azure, czy próby nawiązania połączenia z maszyną wirtualną.
Jeśli brakuje całej partycji /boot lub innej ważnej zawartości i nie można jej odzyskać, zalecamy przywrócenie maszyny wirtualnej z kopii zapasowej. Aby uzyskać więcej informacji, zobacz How to restore Azure VM data in Azure Portal (Jak przywrócić dane maszyny wirtualnej platformy Azure w Azure Portal).
Zapoznaj się z poniższymi sekcjami, aby uzyskać szczegółowe informacje o błędach, możliwych przyczynach i rozwiązaniach.
Uwaga
W poleceniach wymienionych w poniższych sekcjach zastąp /dev/sdX
element odpowiednim urządzeniem dyskowym systemu operacyjnego.
Błąd: nieznany system plików
Poniższy zrzut ekranu przedstawia komunikat o błędzie:
Ten błąd może być skojarzony z jednym z następujących problemów:
/boot uszkodzenie systemu plików.
Aby rozwiązać ten problem, wykonaj kroki opisane w temacie Rozwiązywanie problemów z uszkodzeniem systemu plików /boot.
Moduł ładujący rozruchu GRUB wskazuje nieprawidłowy dysk lub partycję.
Aby rozwiązać ten problem, zainstaluj ponownie plik GRUB i ponownie wygeneruj plik konfiguracji GRUB.
Problemy z tabelą partycji dysku systemu operacyjnego spowodowane błędem ludzkim.
Aby rozwiązać takie problemy, wykonaj kroki opisane w temacie Błąd: Brak takiej partycji z zaleceniami dotyczącymi ponownego utworzenia partycji /boot, jeśli brakuje lub nie utworzono niepoprawnie.
Rozwiązywanie problemów z uszkodzeniem systemu plików /boot
Sprawdź, czy utworzono maszynę wirtualną ratunkową/naprawczą. Jeśli nie został utworzony, wykonaj krok 1 w temacie Rozwiązywanie problemów z ratowaniem grub w trybie offline , aby utworzyć maszynę wirtualną.
Zapoznaj się z tematem Rozwiązywanie problemów z błędami uszkodzenia systemu plików w systemie Azure Linux , aby rozwiązać problemy z uszkodzeniem w odpowiedniej partycji /boot.
Przejdź do kroku 3 w temacie Rozwiązywanie problemów z ratowaniem grub w trybie offline , aby zamienić dysk systemu operacyjnego.
Ponowne instalowanie pliku GRUB i ponowne generowanie pliku konfiguracji GRUB
Sprawdź, czy utworzono maszynę wirtualną ratunkową/naprawczą. Jeśli nie został utworzony, wykonaj krok 1 w temacie Rozwiązywanie problemów z ratowaniem grub w trybie offline , aby utworzyć maszynę wirtualną. Zainstaluj wszystkie wymagane systemy plików, w tym /i /boot na maszynie wirtualnej ratunkowej/napraw, a następnie wprowadź środowisko chroot .
Zainstaluj ponownie grub i ponownie wygenerować odpowiedni plik konfiguracji GRUB przy użyciu jednego z następujących poleceń:
Maszyny wirtualne RHEL/CentOS/Oracle 7.x/8.x z systemem Linux bez interfejsu UEFI (oparte na systemie BIOS — gen1)
grub2-install /dev/sdX grub2-mkconfig -o /boot/grub2/grub.cfg sed -i 's/hd2/hd0/g' /boot/grub2/grub.cfg
Maszyny wirtualne RHEL/CentOS/Oracle 7.x/8.x z systemem Linux z interfejsem UEFI (Gen2)
grub2-install /dev/sdX grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg sed -i 's/hd2/hd0/g' /boot/efi/EFI/redhat/grub.cfg
Jeśli na maszynie wirtualnej działa system CentOS, zastąp
redhat
centos
ciąg w bezwzględnej ścieżce pliku grub.cfg/boot/efi/EFI/centos/grub.cfg.SLES 12/15 Gen1 i Gen2
grub2-install /dev/sdX grub2-mkconfig -o /boot/grub2/grub.cfg sed -i 's/hd2/hd0/g' /boot/grub2/grub.cfg
Ubuntu 18.04/20.04
grub-install /dev/sdX update-grub
Przejdź do kroku 3 w temacie Rozwiązywanie problemów z ratowaniem grub w trybie offline , aby zamienić dysk systemu operacyjnego.
Błąd 15: Nie znaleziono pliku
Poniższy zrzut ekranu przedstawia komunikat o błędzie:
Aby rozwiązać ten problem, wykonaj następujące kroki:
Sprawdź, czy utworzono maszynę wirtualną ratunkową/naprawczą. Jeśli nie został utworzony, wykonaj krok 1 w temacie Rozwiązywanie problemów z ratowaniem grub w trybie offline , aby utworzyć maszynę wirtualną. Zainstaluj wszystkie wymagane systemy plików, w tym /i /boot na maszynie wirtualnej ratunkowej/napraw, a następnie wprowadź środowisko chroot .
Sprawdź zawartość /boot systemu plików i określ, czego brakuje.
Jeśli brakuje pliku konfiguracji NARZĘDZIA GRUB, zainstaluj ponownie plik GRUB i ponownie wygeneruj plik konfiguracji GRUB.
Sprawdź, czy uprawnienia do pliku w /boot systemu plików są OK. Uprawnienia można porównać przy użyciu innej maszyny wirtualnej z tą samą wersją systemu Linux.
Jeśli brakuje całej partycji /boot lub innej ważnej zawartości i nie można jej odzyskać, zalecamy przywrócenie maszyny wirtualnej z kopii zapasowej. Aby uzyskać więcej informacji, zobacz How to restore Azure VM data in Azure Portal (Jak przywrócić dane maszyny wirtualnej platformy Azure w Azure Portal).
Po rozwiązaniu problemu przejdź do kroku 3 w temacie Rozwiązywanie problemów z ratowaniem grub w trybie offline , aby zamienić dysk systemu operacyjnego.
Błąd: nie znaleziono pliku "/boot/grub2/i386-pc/normal.mod".
Poniższy zrzut ekranu przedstawia komunikat o błędzie:
Sprawdź, czy utworzono maszynę wirtualną ratunkową/naprawczą. Jeśli nie został utworzony, wykonaj krok 1 w sekcji Rozwiązywanie problemów z ratownictwem GRUB w trybie offline , aby go utworzyć. Zainstaluj wszystkie wymagane systemy plików, w tym /i /boot na maszynie wirtualnej ratunkowej/napraw, a następnie wprowadź środowisko chroot .
Jeśli nie możesz zainstalować /boot systemu plików z powodu błędu uszkodzenia, napraw /boot uszkodzenie systemu plików.
Jeśli znajdujesz się wewnątrz chroot, sprawdź zawartość w katalogu /boot/grub2/i386-pc . Jeśli brakuje zawartości, skopiuj zawartość z pliku /usr/lib/grub/i386-pc. W tym celu użyj następujących poleceń:
ls -l /boot/grub2/i386-pc cp -rp /usr/lib/grub/i386-pc /boot/grub2
Jeśli zawartość
/boot
partycji jest pusta, użyj następujących poleceń, aby ją ponownie utworzyć:Uwaga
Poniższe kroki dotyczą maszyn wirtualnych RHEL/CentOS/Oracle 7.x/8.x z systemem Linux bez interfejsu UEFI (BIOS — Gen1).
W ramach procesu chroot ponownie zainstaluj grub. Zastąp
/dev/sd[X]
odpowiednio odpowiednią kopią dysku systemu operacyjnego dołączonego do maszyny wirtualnej naprawy/ratowania:grub2-install /dev/sd[X]
Upewnij się, że
/etc/resolv.conf
ma prawidłowy wpis DNS, aby rozpoznać nazwę repozytorium:cat /etc/resolv.conf
Zainstaluj ponownie jądro:
yum reinstall $(rpm -qa | grep -i kernel)
Twórca plik grub.cfg:
grub2-mkconfig -o /boot/grub2/grub.cfg sed -i 's/hd2/hd0/g' /boot/grub2/grub.cfg
Przejdź do kroku 3 w temacie Rozwiązywanie problemów z ratowaniem grub w trybie offline , aby zamienić dysk systemu operacyjnego.
Błąd: brak takiej partycji
Poniższy zrzut ekranu przedstawia komunikat o błędzie:
Ten błąd występuje na maszynie wirtualnej opartej na systemie RHEL (Red Hat, Oracle Linux, CentOS) w jednym z następujących scenariuszy:
- Partycja /boot jest usuwana przez pomyłkę.
- Partycja /boot jest ponownie tworzona przy użyciu niewłaściwych sektorów początkowych i końcowych.
Rozwiązanie: Ponowne tworzenie partycji /boot
Jeśli brakuje partycji /boot, utwórz ją ponownie, wykonując następujące kroki:
Sprawdź, czy utworzono maszynę wirtualną ratunkową/naprawczą. Jeśli nie został utworzony, wykonaj krok 1 w temacie Rozwiązywanie problemów z ratowaniem grub w trybie offline , aby utworzyć maszynę wirtualną.
Określ, czy tabela partycji jest tworzona jako typ dos lub GPT przy użyciu następującego polecenia:
sudo fdisk -l /dev/sdX
Tabela partycji dos
Tabela partycji GPT
Jeśli tabela partycji ma wartość dos jako typ tabeli partycji, utwórz ponownie partycję /boot w systemach dos. Jeśli tabela partycji ma gpt jako typ tabeli partycji, utwórz ponownie /boot partycji w systemach GPT.
Upewnij się, że moduł ładujący rozruchu GRUB jest zainstalowany przy użyciu odpowiedniego dysku. Aby go zainstalować i skonfigurować, możesz wykonać kroki opisane w temacie Ponowne instalowanie pliku konfiguracji GRUB i ponowne generowanie go .
Przejdź do kroku 3 w temacie Rozwiązywanie problemów z ratowaniem grub w trybie offline , aby zamienić dysk systemu operacyjnego.
Ponowne tworzenie /boot partycji w systemach dos
Utwórz ponownie partycję /boot przy użyciu następującego polecenia:
sudo fdisk /dev/sdX
Użyj wartości domyślnych w pierwszych iostatnich sektorach oraz typu partycji (83). Upewnij się, że tabela partycji /boot jest oznaczona jako rozruchowa przy użyciu
a
opcji w narzędziufdisk
, jak pokazano w następujących danych wyjściowych:sudo fdisk /dev/sdc The device presents a logical sector size that is smaller than the physical sector size. Aligning to a physical sector (or optimal I/O) size boundary is recommended, or performance may be impacted. Welcome to fdisk (util-linux 2.23.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Command (m for help): n Partition type: p primary (1 primary, 0 extended, 3 free) e extended Select (default p): p Partition number (1,3,4, default 1): 1 First sector (2048-134217727, default 2048): Using default value 2048 Last sector, +sectors or +size{K,M,G} (2048-2099199, default 2099199): Using default value 2099199 Partition 1 of type Linux and of size 1 GiB is set Command (m for help): t Partition number (1,2, default 2): 1 Hex code (type L to list all codes): 83 Changed type of partition 'Linux' to 'Linux' Command (m for help): a Partition number (1,2, default 2): 1 Command (m for help): p Disk /dev/sdc: 68.7 GB, 68719476736 bytes, 134217728 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O size (minimum/optimal): 4096 bytes / 4096 bytes Disk label type: dos Disk identifier: 0x000b7179 Device Boot Start End Blocks Id System /dev/sdc1 * 2048 2099199 1048576 83 Linux /dev/sdc2 2099200 134217727 66059264 8e Linux LVM Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table.
Po ponownym utworzeniu brakujących partycji /boot sprawdź, czy system plików /boot został wykryty. Powinien być widoczny wpis (
/dev/sdX1
brak partycji /boot).sudo blkid /dev/sdX1
sudo blkid /dev/sdc1 /dev/sdc1: UUID="<UUID>" TYPE="ext4"
Jeśli /boot system plików nie jest widoczny w
blkid
po ponownym utworzeniu partycji, oznacza to, że /boot danych już nie istnieje. Należy ponownie utworzyć /boot systemu plików (przy użyciu tego samego formatu UUID i systemu plików, który znajduje się w /etc/fstab /boot wpis), a następnie przywrócić jego zawartość z kopii zapasowej.
Ponowne tworzenie /boot partycji w systemach GPT
Utwórz ponownie partycję /boot przy użyciu następującego polecenia:
sudo gdisk /dev/sdX
Użyj wartości domyślnych w pierwszych iostatnich sektorach oraz typu partycji (8300), jak pokazano w następujących danych wyjściowych:
sudo gdisk /dev/sdc GPT fdisk (gdisk) version 1.0.3 Partition table scan: MBR: protective BSD: not present APM: not present GPT: present Found valid GPT with protective MBR; using GPT. Command (? for help): n Partition number (1-128, default 1): 1 First sector (34-134217694, default = 1026048) or {+-}size{KMGTP}: Last sector (1026048-2050047, default = 2050047) or {+-}size{KMGTP}: Current type is 'Linux filesystem' Hex code or GUID (L to show codes, Enter = 8300): Changed type of partition to 'Linux filesystem' Command (? for help): p Disk /dev/sdc: 134217728 sectors, 64.0 GiB Model: Virtual Disk Sector size (logical/physical): 512/4096 bytes Disk identifier (GUID): 6D915856-445A-4513-97E4-C55F2E1AD6C0 Partition table holds up to 128 entries Main partition table begins at sector 2 and ends at sector 33 First usable sector is 34, last usable sector is 134217694 Partitions will be aligned on 2048-sector boundaries Total free space is 6076 sectors (3.0 MiB) Number Start (sector) End (sector) Size Code Name 1 1026048 2050047 500.0 MiB 8300 Linux filesystem 2 2050048 134215679 63.0 GiB 8E00 14 2048 10239 4.0 MiB EF02 15 10240 1024000 495.0 MiB EF00 EFI System Partition Command (? for help): w Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING PARTITIONS!! Do you want to proceed? (Y/N): Y OK; writing new GUID partition table (GPT) to /dev/sdc. Warning: The kernel is still using the old partition table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8) The operation has completed successfully.
Sprawdź, czy /boot system plików jest wykrywany przez system przy użyciu następującego polecenia:
sudo blkid /dev/sdX1
Powinien być widoczny wpis (
/dev/sdX1
brak partycji /boot).sudo blkid /dev/sdc1 /dev/sdc1: UUID="<UUID>" BLOCK_SIZE="4096" TYPE="xfs" PARTLABEL="Linux filesystem" PARTUUID="<PARTUUID>"
Jeśli system plików /boot nie jest widoczny po ponownym utworzeniu partycji, oznacza to, że /boot danych już nie istnieje. Musisz ponownie utworzyć system plików /boot (przy użyciu tego samego identyfikatora UUID, który znajduje się we wpisie /etc/fstab /boot), a następnie przywrócić jego zawartość z kopii zapasowej.
Błąd: nie znaleziono symbolu "grub_efi_get_secure_boot"
Poniższy zrzut ekranu przedstawia komunikat o błędzie:
Jądro systemu Linux w wersji 4.12.14 (używane w programie SLES 12 SP5) nie obsługuje opcji Bezpiecznego rozruchu . W związku z tym, jeśli bezpieczny rozruch jest włączony podczas wdrażania maszyny wirtualnej (tj. pole Typ zabezpieczeń jest ustawione na zaufane uruchamianie maszyn wirtualnych), maszyna wirtualna generuje błąd bezpiecznego rozruchu za pośrednictwem konsoli podczas próby uruchomienia przy użyciu tej wersji jądra SUSE na obrazie maszyny wirtualnej Gen2.
Rozwiązanie
Aby rozwiązać problem z błędem rozruchu, wykonaj następujące kroki:
Sprawdź, czy utworzono maszynę wirtualną ratunkową/naprawczą. Jeśli nie został utworzony, wykonaj krok 1 w temacie Rozwiązywanie problemów z ratowaniem grub w trybie offline , aby utworzyć maszynę wirtualną. Zainstaluj wszystkie wymagane systemy plików, w tym /i /boot, a następnie wprowadź środowisko chroot .
Uruchom następujące polecenie YaST w środowisku chroot:
yast2 bootloader
Wyczyść znak "x" z opcji Włącz obsługę bezpiecznego rozruchu , a następnie wybierz pozycję F10 , aby zapisać zmianę.
Wykonaj krok 3 w temacie Rozwiązywanie problemu z ratowaniem grub w trybie offline , aby zamienić dysk systemu operacyjnego.
Inne błędy ratowania GRUB
Poniższy zrzut ekranu przedstawia komunikat o błędzie:
Ten rodzaj błędu jest wyzwalany w jednym z następujących scenariuszy:
- Brak pliku konfiguracji NARZĘDZIA GRUB.
- Używana jest niewłaściwa konfiguracja narzędzia GRUB.
- Brak partycji /boot lub jej zawartości.
Aby rozwiązać ten błąd, wykonaj następujące kroki:
Sprawdź, czy utworzono maszynę wirtualną ratunkową/naprawczą. Jeśli nie został utworzony, wykonaj krok 1 w temacie Rozwiązywanie problemów z ratowaniem grub w trybie offline , aby utworzyć maszynę wirtualną. Zainstaluj wszystkie wymagane systemy plików, w tym /i /boot, a następnie wprowadź środowisko chroot .
Upewnij się, że plik konfiguracji /etc/default/grub jest skonfigurowany. Zatwierdzone obrazy systemu Linux platformy Azure mają już wymagane konfiguracje. Aby uzyskać więcej informacji, zapoznaj się z następującymi artykułami:
Zainstaluj ponownie plik GRUB i ponownie wygeneruj plik konfiguracji GRUB.
Uwaga
Jeśli brakujący plik to /boot/grub/menu.lst, ten błąd dotyczy starszych wersji systemu operacyjnego (RHEL 6.x, Centos 6.x i Ubuntu 14.04). Polecenia będą się różnić, ponieważ wersja GRUB 1 jest używana w tych systemach. Wersja 1 programu GRUB nie jest opisana w tym artykule.
Jeśli brakuje całej partycji /boot, wykonaj kroki opisane w temacie Błąd: brak takiej partycji.
Po rozwiązaniu problemu przejdź do kroku 3 w temacie Rozwiązywanie problemów z ratowaniem grub w trybie offline , aby zamienić dysk systemu operacyjnego.
Następne kroki
Jeśli określony błąd rozruchu nie jest problemem z ratowaniem grub, zapoznaj się z tematem Rozwiązywanie problemów z błędami rozruchu Virtual Machines systemu Azure Linux, aby uzyskać dalsze opcje rozwiązywania problemów.
Zastrzeżenie dotyczące innych firm
Produkty innych firm omówione w tym artykule są wytwarzane przez producentów niezależnych od firmy Microsoft. Firma Microsoft nie udziela żadnych gwarancji, dorozumianych ani żadnego innego rodzaju, w odniesieniu do wydajności lub niezawodności tych produktów.
Wyłączenie odpowiedzialności za kontakty z osobami trzecimi
Firma Microsoft udostępnia informacje kontaktowe innych firm, które ułatwiają znalezienie dodatkowych informacji na ten temat. Informacje te mogą zostać zmienione bez powiadomienia. Firma Microsoft nie gwarantuje dokładności informacji kontaktowych innych firm.
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.
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla