Delen via


Opstartproblemen met virtuele Linux-machines oplossen vanwege bestandssysteemfouten

Van toepassing op: ✔️ Virtuele Linux-machines

Dit artikel bevat richtlijnen voor het oplossen van opstartproblemen met virtuele Linux-machines (VM's) die worden veroorzaakt door bestandssysteemfouten.

Symptomen

U kunt geen verbinding maken met een virtuele Azure Linux-machine (VM) met behulp van SSH (Secure Shell Protocol) of de status van de VM-agent in Azure Portal is niet gereed. Wanneer u diagnostische gegevens over opstarten uitvoert in Azure Portal of verbinding maakt met de seriële console, ziet u logboekvermeldingen die lijken op de volgende voorbeelden:

Notitie

  • Niet alle voorbeelden zijn aanwezig.
  • Een koppelingsfout resulteert niet altijd in een VM die de noodmodus ingaat. Als het probleem zich voordoet bij bepaalde kritieke bestandssysteemen, gebruikt de VIRTUELE machine mogelijk geen noodmodus.

Voorbeeld 1: Ext4-bestandssysteem niet koppelen

EXT4-fs (sda1): INFO: recovery required on readonly filesystem
EXT4-fs (sda1): write access will be enabled during recovery
EXT4-fs warning (device sda1): ext4_clear_journal_err:4531: Filesystem error recorded from previous mount: IO failure
EXT4-fs warning (device sda1): ext4_clear_journal_err:4532: Marking fs in need of filesystem check.

Voorbeeld 2: Kan geen EXT-LVM-apparaat (Logical Volume Manager) koppelen

[   14.382472] EXT4-fs error (device dm-0): ext4_iget:4398: inode #8: comm mount: bad extra_isize 4060 (inode size 256)
[   14.389648] EXT4-fs (dm-0): no journal found
<snipped>
[FAILED] Failed to mount /opt/data.

Voorbeeld 3: xfs-bestandssysteem niet koppelen

[    8.543984] XFS (sdc1): Metadata CRC error detected at xfs_agi_read_verify+0xd0/0xf0 [xfs], xfs_agi block 0x10
[    8.553867] XFS (sdc1): Unmount and run xfs_repair
[    8.558993] XFS (sdc1): First 128 bytes of corrupted metadata buffer:
[    8.564893] 00000000: 58 41 47 49 00 00 00 01 00 00 00 00 00 1f ff c0  XAGI............
[    8.572847] 00000010: 00 00 00 40 00 00 00 06 00 00 00 01 00 00 00 3d  ...@...........=
[    8.580476] 00000020: 00 00 00 60 ff ff ff ff ff ff ff ff ff ff ff ff  ...`............
[    8.588219] 00000030: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff  ................
[    8.596280] 00000040: ff 07 f8 ff ff ff ff ff ff ff ff ff ff ff ff ff  ................
[    8.603575] 00000050: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff  ................
[    8.610849] 00000060: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff  ................
[    8.619261] 00000070: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff  ................
[    8.629731] XFS (sdc1): metadata I/O error in "xfs_trans_read_buf_map" at daddr 0x10 len 8 error 74
[    8.637799] XFS (sdc1): xfs_imap_lookup: xfs_ialloc_read_agi() returned error -117, agno 0
[FAILED] Failed to mount /data.
See 'systemctl status data.mount' for details.
[DEPEND] Dependency failed for Local filesystems.

Voorbeeld 4: Opstarten in noodmodus

You are in emergency mode. After logging in, type "journalctl -xb" to view
system logs, "systemctl reboot" to reboot, "systemctl default" or "exit"
to boot into default mode.
Give root password for maintenance
(or press Control-D to continue):

Oorzaak

De bovenstaande logboekvermeldingen geven schijfbeschadiging aan. In bepaalde situaties voorkomt schijfbeschadiging dat de virtuele machine volledig wordt opgestart. Verschillende problemen kunnen leiden tot schijfbeschadiging, zoals Linux-kernelproblemen, stuurprogrammafouten, fouten in de onderliggende fysieke of virtuele hardware, enzovoort.

Oplossing

Als u de opstartproblemen met de Linux-VM wilt oplossen die worden veroorzaakt door bestandssysteemfouten, herstelt u de VM door de schijfbeschadiging te herstellen. Voer de volgende stappen uit om de schijfbeschadiging te herstellen:

  1. Bepaal welke schijf is beschadigd.

  2. Type bestandssysteem identificeren.

  3. Selecteer de herstelmodus (online of offline).

  4. Bereid de herstelomgeving voor op basis van de herstelmodus die u selecteert:

  5. Gebruik opdrachtregelprogramma's om het problematische bestandssysteem op de schijf te herstellen.

    Notitie

    • Het is belangrijk om een back-up te maken van kritieke gegevens omdat gegevensverlies op de herstelde schijf kan optreden.
    • Voordat u wijzigingen aanbrengt in een schijf, maakt u een momentopname om de huidige status van de schijf te behouden, zelfs als deze een foutstatus heeft. Als u de schijfbeschadiging herstelt, worden de gegevens op de schijf gewijzigd, wat risico's met zich meebrengen.

Bepalen welke schijf is beschadigd

Als u wilt bepalen welke schijf is beschadigd, downloadt u het seriële logboek voor uw VIRTUELE machine met behulp van de seriële console of opstartdiagnose, bekijkt u de logboekvermeldingen tijdens het opstarten en zoekt u vervolgens naar de specifieke fout die aangeeft welke schijf of koppeling mislukt.

Hier volgen drie voorbeelden van logboekvermeldingen. In deze voorbeelden ziet u de tekst tussen haakjes, waarmee het beschadigde apparaat wordt gerapporteerd.

In het volgende voorbeeld is sdc1het beschadigde apparaat:

[   14.285807] XFS (sdc1): Mounting V5 Filesystem
[   14.426283] XFS (sdc1): Metadata CRC error detected at xfs_agi_read_verify+0xde/0x100 [xfs], xfs_agi block 0x10
[   14.426284] XFS (sdc1): Unmount and run xfs_repair
<snipped>
[FAILED] Failed to mount /opt/parent.

In het volgende voorbeeld is sda1de partitie waarin een bestandssysteemfout optreedt:

EXT4-fs (sda1): INFO: recovery required on readonly filesystem
EXT4-fs (sda1): write access will be enabled during recovery
EXT4-fs warning (device sda1): ext4_clear_journal_err:4531: Filesystem error recorded from previous mount: IO failure
EXT4-fs warning (device sda1): ext4_clear_journal_err:4532: Marking fs in need of filesystem check.
<snipped>
[FAILED] Failed to mount /boot.

In het volgende voorbeeld is dm-2het beschadigde apparaat. Het is een Linux Device Mapper-apparaat dat een LVM-volume aangeeft.

[   18.014318] EXT4-fs (dm-2): VFS: Can't find ext4 filesystem
[FAILED] Failed to mount /home.
See 'systemctl status home.mount' for details.
[DEPEND] Dependency failed for Local File Systems.
[DEPEND] Dependency failed for Mark the need to relabel after reboot.

Als het schijfapparaat dat wordt aangeroepen een naam gebruikt van de indeling 'sdXN' waarbij X een letter is van a-z en N een optioneel partitienummer is, betekent dit dat de schijf onbewerkt is en kan worden gebruikt met behulp van het pad /dev/sdXN .

Als het schijfapparaat dat wordt gekoppeld, een naam gebruikt zoals /dev/mapper/vgname/lvname, /dev/vgname/lvname of dm-N, betekent dit dat een LVM-apparaat wordt gebruikt. Zorg ervoor dat alle fysieke schijfvolumes (TV's) worden herkend die mogelijk in gebruik zijn.

Het wordt niet ondersteund voor de LVM-volumegroep (VG) om de besturingssysteemschijf en een willekeurig aantal gegevensschijven te bevatten. Voor een dergelijk scenario is er een hoog risico op gegevensverlies. Meerdere gegevensschijven zijn echter toegestaan in een LVM VG.

Bij het bepalen van de toewijzing van besturingssysteemschijfverwijzingen naar Azure-schijfobjecten:

  • Voor Marketplace-installatiekopieën bevindt het hoofdbestandssysteem (/), /boot en /boot/efi zich op de besturingssysteemschijf.
  • Voor op LVM gebaseerde installatiekopieën kunnen veel andere systeemkoppelingen bestaan, zoals /home, /tmp, /usr, /var, /var/log en /opt.
  • Extra bestandssysteem die voor toepassingen zijn gemaakt, bevinden zich op gegevensschijven, bijvoorbeeld /data, /datadisk of /sap. Configureer ze correct zodat het systeem kan worden opgestart, zelfs als er een fout optreedt. Als een gegevensschijf een apparaat is dat wordt opgestart in de noodmodus, raadpleegt u Opstartfouten voorkomen.

Bestandssysteemtype identificeren

Tijdens het uitvoeren van de eerste identificatie gebruikt u de enige methode om het schijftype te bepalen het seriële logboek zoals eerder onderzocht in Identificeren welke schijf is beschadigd. Wanneer het schijfapparaat wordt gerapporteerd in het seriële logboek, worden fouten weergegeven vanuit de Linux-kernelmodule voor het bestandssysteem. Noteer elke regel waar EXT4-fs of XFS is opgegeven. Voor andere bestandstypen bevindt het logboek zich in hetzelfde gebied. Het bestandssysteem dat in de logboekvermeldingen wordt vermeld, wordt bepaald door het /etc/fstab-bestand . Zorg ervoor dat u controleert of de opgegeven indeling juist is bij het uitvoeren van een reparatie.

Zodra u toegang hebt tot een interactieve shell, voert u de lsblk opdracht als volgt uit met de -f vlag om apparaten, paden (als het bestandssysteem is gekoppeld) weer te geven en het bestandstype dat van de schijf zelf wordt gelezen.

[root@localhost ~]# lsblk -f
NAME              FSTYPE      LABEL UUID                                   MOUNTPOINT
sda
|-sda1            vfat              93DA-8C20                              /boot/efi
|-sda2            xfs               d5da486e-fdfe-4ad8-bc01-aa72b91fd47d   /boot
|-sda3
`-sda4            LVM2_member       pdSI2Q-ZEzV-oT6P-R2JG-ZW3h-cmnf-iRN6pU
  |-rootvg-tmplv  xfs               9098eb05-0176-4997-8132-9152a7bef207   /tmp
  |-rootvg-usrlv  xfs               2f9ff36c-742d-4914-b463-d4152801b95d   /usr
  |-rootvg-optlv  xfs               aeacea8e-3663-4569-af25-c52357f8a0a3   /opt
  |-rootvg-homelv xfs               a79e43dc-7adc-41b4-b6e1-4e6b033b15c0
  |-rootvg-varlv  xfs               c7cb68e9-7865-4187-b3bd-e9a869779d86   /var
  `-rootvg-rootlv xfs               d8dc4d62-ada5-4952-a0d9-1bce6cb6f809   /
sdb
`-sdb1            ext4              1dac7c4c-bf8e-4964-8a59-7359eef53d0a   /mnt
sdc               LVM2_member       CRWEZQ-iLhH-ev0b-BAaA-dfLD-nbPT-GgtG0r
`-vgapp-lvapp     xfs               733e25ee-565f-4bfa-a2a1-2451efd25cd1
sdd
`-sdd1            ext4              704d9fb1-2207-4bb9-998c-029f776dc6d2   /opt/data

Hier volgen enkele belangrijke punten in de uitvoer:

  • Met behulp van de ASCII-kunstweergave kunt u zien dat er LVM-volumes aanwezig zijn omdat er een LVM2_MEMBER FSTYPE voor sda4 met objecten met namen zoals rootvg-rootlv en rootvg-homelv.
  • rootvg-homelv is niet gekoppeld, wat wordt aangeduid met het lege MOUNTPOINT-veld.
  • rootvg-homelv heeft het bestandssysteemtype XFS. Het is een contrast met de EXT4-koppelingsfout tijdens het opstarten. Als het bestandstype inconsistent is, vertrouwt u de lsblk uitvoer in plaats van de inhoud van fstab.

Herstelmodus selecteren

U kunt een virtuele machine online herstellen via de noodmodus of modus voor één gebruiker of offline met behulp van een reddings-VM.

Vereisten voor online herstel

  • Toegang tot de virtuele machine via de seriële console .

  • Als de noodmodus wordt gebruikt, moet in de seriële console een prompt voor de noodmodus worden weergegeven, moet het hoofdaccount worden ontgrendeld en moet het wachtwoord bekend zijn.

  • Als de modus voor één gebruiker wordt gebruikt, is het hoofdwachtwoord niet nodig. De modus voor één gebruiker kan worden gebruikt wanneer een ander bestandssysteem dan de vereiste systeempartities, zoals root (/) of /usr beschadigd is.

Vereisten voor offline herstel

Als niet aan de seriële consolevereisten voor onlineherstel kan worden voldaan, voert u offlineherstel uit met behulp van een herstel-VM. Als u offlineherstel wilt uitvoeren, is de mogelijkheid om een virtuele machine te maken en schijven te beheren in Azure vereist. U kunt ook een werkende Linux-VM gebruiken met toegang op Azure-niveau tot de beschadigde schijven.

Omgeving voorbereiden voor online herstel

Wanneer de noodmodus als volgt wordt weergegeven in de aanmeldingsprompt, voert u het hoofdwachtwoord in:

Welcome to emergency mode! After logging in, type "journalctl -xb" to view
system logs, "systemctl reboot" to reboot, "systemctl default" or ^D to
try again to Give root password for maintenance
(or press Control-D to continue):

Als het hoofdwachtwoord niet bekend is of als het hoofdaccount is vergrendeld, zoals in de volgende uitvoer, gebruikt u de modus voor één gebruiker:

Welcome to emergency mode! After logging in, typ
Cannot open access to console, the root account is locked.
See sulogin(8) man page for more details.

Press Enter to continue.

Als de online herstelomgeving onbruikbaar is, gaat u verder met offline herstel.

Omgeving voorbereiden voor offlineherstel

In VM's met één schijf of wanneer de foutieve koppeling een systeempartitie is, zoals het hoofdbestandssysteem (/) of /usrde meest betrouwbare methode voor het herstellen van de schijf, is het gebruik van een reddings-VM om toegang te krijgen tot de schijf. U kunt automatisch of handmatig een reddings-VM maken.

Zie Azure Virtual Machine Repair voor het automatisch maken van een herstel-VM. Zie een herstel-VM maken voor het handmatig maken van een herstel-VM. Koppel in beide gevallen de volumes niet van de probleemschijf, omdat een bestandssysteem niet mag worden gekoppeld om herstelprogramma's te laten werken.

Bestandssysteemherstel uitvoeren

Voordat u het bestandssysteem herstelt, moet u ervoor zorgen dat de volgende stappen zijn voltooid:

  • De probleemschijf en -partitie, of LVM-volumestructuur, zijn geïdentificeerd.
  • Het bestandstype is bepaald.
  • (Optioneel) Er is een kopie van de probleemschijf of schijven in een spanned LVM-volumegroep gekoppeld aan een herstel-VM.
  • Toegang tot een interactieve shell is beveiligd met behulp van toegang tot de schijf.

Als u het bestandssysteem wilt herstellen, gaat u naar Ext4-bestandssysteem herstellen of XFS-bestandssysteem herstellen op basis van het bestandstype.

Ongeacht welke herstelmodus wordt gebruikt, de opdrachten voor het uitvoeren van het bestandssysteemherstel zijn hetzelfde. De noodshell kan beperkingen hebben. Als de opdrachten niet beschikbaar zijn in een omgeving voor noodmodus of als er fouten zijn over onbekende bestandstypen, bereidt u de omgeving voor op offlineherstel.

Met de opdrachten voor het herstellen van het bestandssysteem worden mogelijk niet alle fouten opgelost. Ze werken rond schijfbeschadigingen, maar gegevensverlies kan nog steeds optreden. Zodra de uitvoer van de opdracht aangeeft dat het bestandssysteem is opgeschoond, kunt u de oorspronkelijke VIRTUELE machine opnieuw compileren met de herstelde schijf en de VIRTUELE machine opstarten om gegevens te verifiëren.

In de volgende secties /dev/sdc1 is het beschadigde bestandssysteem in de onbewerkte modus en is de LV homelv in de VG rootvg het LVM-volume. Vervang deze waarden door het werkelijke beschadigde bestandssysteem in alle exemplaren.

Ext4-bestandssysteem herstellen

Gebruik de fsck [-y] FILESYSTEM opdracht om een ext4-bestandssysteem te herstellen. Geef het bestandssysteem op als een schijfpartitie voor een onbewerkt bestandssysteem, bijvoorbeeld /dev/sdc1of het logische LVM-volumepad /dev/rootvg/homelv.

Hier volgt een voorbeeld van de uitvoer van een opdracht:

[root@vm1dev ~]# fsck /dev/sdc1
fsck from util-linux 2.23.2
e2fsck 1.42.9 (28-Dec-2013)
ext2fs_check_desc: Corrupt group descriptor: bad block for block bitmap
fsck.ext4: Group descriptors look bad... trying backup blocks...
/dev/sdc1 was not cleanly unmounted, check forced.
Resize inode not valid.  Recreate<y>? yes
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
Free blocks count wrong for group #0 (23508, counted=23509).
Fix<y>? yes
Free blocks count wrong (8211645, counted=8211646).
Fix<y>? yes

/dev/sdc1: ***** FILE SYSTEM WAS MODIFIED *****
/dev/sdc1: 11/2097152 files (0.0% non-contiguous), 176706/8388352 blocks
[root@vm1dev ~]#

De uitvoer laat zien dat de bevestiging voor het wijzigen van het bestandssysteem drie keer wordt aangevraagd. Als er veel aanvragen zijn, drukt u op Ctrl+C en start u opnieuw fsck op met de -y vlag om 'ja' aan te nemen voor alle vragen. Als bestanden worden gerapporteerd als geplaatst lost+found, identificeert u ze handmatig en plaatst u ze op de juiste locaties.

Als er enkele fouten optreden en vervolgens zijn opgelost, voert u de fsck opdracht opnieuw uit. Herhaal dit totdat de fsck opdracht wordt afgesloten met de clean status. Raadpleeg de volgende uitvoer als voorbeeld:

[root@vm1dev ~]# fsck /dev/sdc1
fsck from util-linux 2.23.2
e2fsck 1.42.9 (28-Dec-2013)
/dev/sdc1: clean, 11/2097152 files, 176706/8388352 blocks
[root@vm1dev ~]#

XFS-bestandssysteem herstellen

Hier volgen opdrachten voor het herstellen van een XFS-bestandssysteem:

  • xfs_repair [-n] FILESYSTEM
  • xfs_repair [-L] FILESYSTEM
  • mount FILESYSTEM MOUNTPOINT

Voer de volgende stappen uit om een XFS-bestandssysteem te herstellen:

  1. Controleer fouten in het bestandssysteem met behulp van de xfs_repair -n opdracht als volgt:

    xfs_repair -n /dev/rootvg/homelv
    
  2. Als de controle slaagt, gaat u verder met de herstelmodus door de -n vlag te verwijderen, waarmee wordt geprobeerd eventuele fouten op te lossen, als volgt:

    xfs_repair /dev/rootvg/homelv
    

Voor XFS-bestandssysteem worden logboeken, maar niet-doorgevoerde wijzigingen behandeld door het bestandssysteem te koppelen. Als u tijdens de probleemoplossing de volgende fout tegenkomt, probeert u een koppeling en bekijkt u de resultaten.

FOUT: Het bestandssysteem bevat waardevolle metagegevenswijzigingen in een logboek die opnieuw moeten worden afgespeeld

Als een herstel-VM wordt gebruikt, maakt u een map voor een tijdelijk koppelpunt, zoals /recoveryen koppelt u het bestandssysteem. Als de herstelomgeving zich in de nood- of modus voor één gebruiker bevindt, koppelt u het bestandssysteem op de beoogde locatie. Raadpleeg de volgende opdrachten als voorbeelden:

mount /dev/rootvg/homelv /recovery

or

mount /home

Als de wijzigingen in het logboek niet worden geschreven wanneer u bestandssysteem koppelt, gebruikt u de -L vlag om het logboek te verwijderen en het bestandssysteem te koppelen alsof alle wijzigingen zijn voltooid. Wanneer de -L vlag wordt gebruikt, treden er gegevensverlies op omdat in het logboek onvolledige bestandsbewerkingen worden weergegeven.

xfs_repair -L /dev/rootvg/homelv /recovery

Opstartfout voorkomen

Als de optie wordt opgegeven bij het nofail koppelen van bestandssysteem, kan de beschadiging van een niet-kritiek bestandssysteem niet voorkomen dat Linux volledig opstart. Zie De schijf koppelen voor meer informatie.nofail De meeste koppels naast de wortel (/), /usren /var kunnen worden gedaan met nofail.

Contacteer ons voor hulp

Als u vragen hebt of hulp nodig hebt, maak een ondersteuningsaanvraag of vraag de Azure-communityondersteuning. U kunt ook productfeedback verzenden naar de Azure-feedbackcommunity.