Solución de problemas de arranque de máquinas virtuales Linux debido a errores del sistema de archivos
Se aplica a: ✔️ Máquinas virtuales Linux
En este artículo se proporcionan instrucciones para solucionar problemas de arranque de máquina virtual Linux (VM) causados por errores del sistema de archivos.
Síntomas
No se puede conectar a una máquina virtual Linux (VM) de Azure mediante el protocolo Secure Shell (SSH) o el estado del agente de máquina virtual en Azure Portal no está listo. Al ejecutar los diagnósticos de arranque en Azure Portal o conectarse a la consola serie, verá entradas de registro similares a los ejemplos siguientes:
Nota
- No todos los ejemplos estarán presentes.
- Un error de montaje no siempre da lugar a que una máquina virtual entre en modo de emergencia. Si el problema se produce con determinados sistemas de archivos críticos, es posible que la máquina virtual no use el modo de emergencia.
Ejemplo 1: No se puede montar el sistema de archivos ext4
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.
Ejemplo 2: No se puede montar el dispositivo ext Logical Volume Manager (LVM)
[ 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.
Ejemplo 3: No se puede montar el sistema de archivos xfs
[ 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.
Ejemplo 4: Arranque en modo de emergencia
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):
Causa
Las entradas de registro anteriores indican daños en el disco. En determinadas situaciones, los daños en el disco impedirán que la máquina virtual arranque por completo. Varios problemas pueden causar daños en el disco, como problemas de kernel de Linux, errores de controlador, errores en el hardware físico o virtual subyacente, etc.
Solución
Para resolver los problemas de arranque de la máquina virtual Linux causados por errores del sistema de archivos, recupere la máquina virtual reparando los daños en el disco. Para reparar los daños en el disco, siga estos pasos:
Identifique qué disco está dañado.
Identifique el tipo de sistema de archivos.
Seleccione el modo de recuperación (en línea o sin conexión).
Prepare el entorno de recuperación según el modo de recuperación que seleccione:
Use herramientas de línea de comandos para reparar el sistema de archivos problemático en el disco.
Nota
- Es importante realizar una copia de seguridad de los datos críticos porque la pérdida de datos puede producirse en el disco recuperado.
- Antes de realizar cambios en un disco, tome una instantánea para conservar el estado actual del disco, incluso si se encuentra en un estado de error. Corregir los daños en el disco cambiará los datos del disco, lo que conllevará riesgos.
Identificar qué disco está dañado
Para determinar qué disco está dañado, descargue el registro en serie de la máquina virtual mediante la consola serie o el diagnóstico de arranque, examine las entradas de registro durante el arranque y busque el error específico que llama a qué disco o montaje se produce un error.
Estos son tres ejemplos de entrada de registro. En estos ejemplos, anote el texto entre paréntesis, que informa del dispositivo dañado.
En el ejemplo siguiente, el dispositivo dañado es sdc1
:
[ 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.
En el ejemplo siguiente, la partición donde se produce un error del sistema de archivos es sda1
:
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.
En el ejemplo siguiente, el dispositivo dañado es dm-2
. Es un dispositivo asignador de dispositivos Linux, que indica un volumen LVM.
[ 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.
Si el dispositivo de disco que se llama usa un nombre del formato "sdXN", donde X es una letra de a-z y N es un número de partición opcional, significa que el disco es sin formato y se puede operar mediante la ruta de acceso /dev/sdXN .
Si el dispositivo de disco que se monta usa un nombre como /dev/mapper/vgname/lvname, /dev/vgname/lvname o dm-N, significa que se usa un dispositivo LVM. Tenga cuidado de reconocer todos los volúmenes físicos de disco (PVs) que pueden estar en uso.
No se admite que el grupo de volúmenes de LVM (VG) contenga el disco del sistema operativo y cualquier número de discos de datos. En este escenario, existe un alto riesgo de pérdida de datos. Sin embargo, se permiten varios discos de datos en un VG LVM.
Al determinar la asignación de referencias de disco del sistema operativo a objetos de disco de Azure:
- En el caso de las imágenes de Marketplace, el sistema de archivos raíz (/), /boot y /boot/efi se encuentran en el disco del sistema operativo.
- Para las imágenes basadas en LVM, pueden existir muchos otros montajes del sistema, como /home, /tmp, /usr, /var, /var/log y /opt.
- Los sistemas de archivos adicionales creados para las aplicaciones se encuentran en discos de datos, por ejemplo, /data, /datadisk o /sap. Configúrelos correctamente para que el sistema pueda arrancar incluso si se produce un error. Si un disco de datos es un dispositivo que arranca en modo de emergencia, consulte Evitar errores de arranque.
Identificación del tipo de sistema de archivos
Al realizar la identificación inicial, el único método para determinar el tipo de disco usa el registro serie como se examinó anteriormente en Identificar qué disco está dañado. Cuando se notifica el dispositivo de disco en el registro serie, los errores se mostrarán desde el módulo de kernel de Linux para el sistema de archivos. Tenga en cuenta cada línea donde EXT4-fs
se especifica o XFS
. Para cualquier otro tipo de sistema de archivos, el registro se encuentra en la misma área. El sistema de archivos indicado en las entradas de registro viene determinado por el archivo /etcetera/fstab . Tenga cuidado de comprobar que el formato especificado es correcto al realizar una reparación.
Una vez que tenga acceso a un shell interactivo, ejecute el comando con la lsblk
-f
marca como se indica a continuación para mostrar los dispositivos, las rutas de acceso (si el sistema de archivos está montado) y el tipo de sistema de archivos que se lee desde el propio disco.
[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
Estos son algunos puntos importantes en la salida:
- Al usar la pantalla de arte ASCII, puede ver que hay volúmenes LVM presentes porque hay un FSTYPE de LVM2_MEMBER para sda4 que contiene objetos con nombres como
rootvg-rootlv
yrootvg-homelv
. rootvg-homelv
no está montado, lo que indica el campo MOUNTPOINT vacío.rootvg-homelv
tiene el tipo de sistema de archivos XFS. Es un contraste con el error de montaje EXT4 durante el arranque. Si el tipo de sistema de archivos es incoherente, confíe en lalsblk
salida en lugar del contenido de fstab.
Selección del modo de recuperación
Puede recuperar una máquina virtual en línea mediante el modo de emergencia o el modo de usuario único o sin conexión mediante una máquina virtual de rescate.
Requisitos para la recuperación en línea
Acceso a la consola serie a la máquina virtual.
Si se usa el modo de emergencia, la consola serie debe mostrar un mensaje de modo de emergencia, se debe desbloquear la cuenta raíz y se debe conocer la contraseña.
Si se usa el modo de usuario único, no se necesita la contraseña raíz. El modo de usuario único se puede usar cuando un sistema de archivos distinto de las particiones del sistema necesarias, como raíz (
/
) o/usr
está dañado.
Requisitos para la recuperación sin conexión
Si no se pueden cumplir los requisitos de la consola serie para la recuperación en línea, realice la recuperación sin conexión mediante una máquina virtual de rescate. Para realizar la recuperación sin conexión, se requiere la capacidad de crear una máquina virtual y administrar discos en Azure. Como alternativa, puede usar una máquina virtual Linux en funcionamiento con acceso de nivel de Azure a los discos dañados.
Preparación del entorno para la recuperación en línea
Cuando se muestre el modo de emergencia en el símbolo del sistema de inicio de sesión como se indica a continuación, escriba la contraseña raíz:
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):
Si no se conoce la contraseña raíz o la cuenta raíz está bloqueada, como en la salida siguiente, use el modo de usuario único:
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.
Si el entorno de recuperación en línea no se puede usar, continúe con la recuperación sin conexión.
Preparación del entorno para la recuperación sin conexión
En máquinas virtuales de disco único, o cuando el montaje con errores es una partición del sistema, como el sistema de archivos raíz (/
) o /usr
, el método más confiable para reparar el disco es mediante el uso de una máquina virtual de rescate para obtener acceso al disco. Puede crear una máquina virtual de rescate de forma automática o manual.
Para la creación automatizada de una máquina virtual de rescate, consulte Reparación de máquinas virtuales de Azure. Para la creación manual de una máquina virtual de rescate, consulte Creación de una máquina virtual de recuperación. En cualquier caso, no monte los volúmenes desde el disco del problema porque un sistema de archivos no debe montarse para que funcionen las utilidades de reparación.
Realización de la reparación del sistema de archivos
Antes de reparar el sistema de archivos, asegúrese de que se han completado los pasos siguientes:
- Se ha identificado el disco y la partición del problema, o la estructura del volumen LVM.
- Se ha determinado el tipo de sistema de archivos.
- (Opcional) Se ha conectado una copia del disco del problema o discos de un grupo de volúmenes LVM distribuido a una máquina virtual de rescate.
- El acceso a un shell interactivo se ha protegido mediante el acceso al disco.
Para realizar la reparación del sistema de archivos, vaya a Reparar sistema de archivos ext4 o Reparar sistema de archivos XFS según el tipo de sistema de archivos.
Independientemente del modo de recuperación que se use, los comandos para realizar la reparación del sistema de archivos son los mismos. El shell de emergencia puede tener limitaciones. Si los comandos no están disponibles en un entorno de modo de emergencia o hay errores sobre los tipos desconocidos del sistema de archivos, prepare el entorno para la recuperación sin conexión.
Es posible que los comandos para reparar el sistema de archivos no corrijan todos los errores. Funcionan en torno a daños en el disco, pero la pérdida de datos todavía puede producirse. Una vez que la salida del comando indica que el sistema de archivos está limpio, vuelva a ensamblar la máquina virtual original con el disco reparado y arranque la máquina virtual para comprobar los datos.
En las secciones siguientes, /dev/sdc1
es el sistema de archivos dañado en modo sin procesar y el LV homelv
del VG rootvg
es el volumen LVM. Sustituya estos valores por el sistema de archivos dañado real en todas las instancias.
Reparación del sistema de archivos ext4
Use el fsck [-y] FILESYSTEM
comando para reparar un sistema de archivos ext4. Especifique el sistema de archivos como una partición de disco para un sistema de archivos sin procesar, por ejemplo /dev/sdc1
, o la ruta /dev/rootvg/homelv
de acceso del volumen lógico LVM .
Este es un ejemplo de salida de comando:
[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 ~]#
La salida muestra que la confirmación para modificar el sistema de archivos se solicita tres veces. Si hay muchas solicitudes, presione CTRL+C y reinicie fsck
con la -y
marca para asumir "sí" a todas las preguntas. Si los archivos se notifican como colocados en lost+found
, los identifique manualmente y colóquelos en ubicaciones adecuadas.
Si se producen algunos errores y se corrigen posteriormente, vuelva a ejecutar el fsck
comando. Repita la operación hasta que el fsck
comando salga con el clean
estado . Consulte la siguiente salida como ejemplo:
[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 ~]#
Reparación del sistema de archivos xfs
Estos son los comandos para reparar un sistema de archivos XFS:
xfs_repair [-n] FILESYSTEM
xfs_repair [-L] FILESYSTEM
mount FILESYSTEM MOUNTPOINT
Para reparar un sistema de archivos XFS, siga estos pasos:
Compruebe los errores del sistema de archivos mediante el
xfs_repair -n
comando , como se indica a continuación:xfs_repair -n /dev/rootvg/homelv
Si la comprobación se realiza correctamente, continúe con el modo de reparación quitando la
-n
marca , que intentará corregir los errores detectados, como se indica a continuación:xfs_repair /dev/rootvg/homelv
En el caso de los sistemas de archivos XFS, los cambios en diario pero no confirmados se tratan mediante el montaje del sistema de archivos. Si se produce el siguiente error durante la solución de problemas, intente montar y ver los resultados.
ERROR: El sistema de archivos tiene cambios de metadatos valiosos en un registro que debe reproducirse.
Si se usa una máquina virtual de recuperación, cree un directorio para un punto de montaje temporal, como /recovery
, y monte el sistema de archivos. Si el entorno de recuperación está en modo de emergencia o de usuario único, monte el sistema de archivos en su ubicación prevista. Consulte los siguientes comandos como ejemplos:
mount /dev/rootvg/homelv /recovery
o
mount /home
Si los cambios en diario no se escriben al montar sistemas de archivos, use la -L
marca para descartar el diario y montar el sistema de archivos como si todos los cambios se completaran correctamente. Cuando se usa la -L
marca, se producirá una pérdida de datos porque el registro muestra que se descartan las operaciones de archivo incompletas.
xfs_repair -L /dev/rootvg/homelv /recovery
Evitar errores de arranque
Si se especifica la nofail
opción al montar sistemas de archivos, es posible que los daños de un sistema de archivos no crítico no impidan que Linux arranque por completo. Para obtener más información sobre nofail
, vea Montaje del disco. La mayoría de los montajes aparte de la raíz (/
), /usr
y /var
se pueden realizar con nofail
.
Ponte en contacto con nosotros para obtener ayuda
Si tiene preguntas o necesita ayuda, cree una solicitud de soporte o busque consejo en la comunidad de Azure. También puede enviar comentarios sobre el producto con los comentarios de la comunidad de Azure.