Solucionar problemas de una máquina virtual Linux adjuntando el disco del sistema operativo a una máquina virtual de recuperación con la CLI de Azure
Si la máquina virtual Linux (VM) encuentra un error de arranque o disco, es posible que deba realizar los pasos de solución de problemas en el propio disco duro virtual. Un ejemplo común sería una entrada no válida que /etc/fstab impide que la máquina virtual pueda arrancar correctamente. En este artículo se detalla cómo usar la CLI de Azure para conectar el disco duro virtual a otra máquina virtual linux para corregir los errores y, a continuación, volver a crear la máquina virtual original.
Introducción al proceso de recuperación
El proceso de solución de problemas es el siguiente:
- Detenga la máquina virtual afectada.
- Tome una instantánea desde el disco del sistema operativo de la máquina virtual.
- Cree un disco de la instantánea del disco del sistema operativo.
- Adjunte y monte el nuevo disco del sistema operativo a otra máquina virtual Linux para solucionar problemas.
- Conectar a la máquina virtual de solución de problemas. Edite archivos o ejecute cualquier herramienta para solucionar problemas en el nuevo disco del sistema operativo.
- Desmonte y desasoye el nuevo disco del sistema operativo de la máquina virtual de solución de problemas.
- Cambie el disco del sistema operativo de la máquina virtual afectada.
Para realizar estos pasos de solución de problemas, necesita la CLI de Azure más reciente instalada e iniciada sesión en una cuenta de Azure con az login.
Puede usar los comandos de reparación de máquina virtual para automatizar los pasos 1, 2, 3, 4, 6 y 7. Para obtener más documentación e instrucciones, consulte Repair a Linux VM by using the Azure Virtual Machine repair commands.
Importante
Los scripts de este artículo solo se aplican a las máquinas virtuales que usan Managed Disks.
En los ejemplos siguientes, reemplace los nombres de parámetros por sus propios valores, como myResourceGroup y myVM.
Determinación de los problemas de arranque
Examine la salida en serie para determinar por qué la máquina virtual no puede arrancar correctamente. Un ejemplo común es una entrada no válida en /etc/fstab, o el disco duro virtual subyacente que se elimina o mueve.
Obtenga los registros de arranque con az vm boot-diagnostics get-boot-log. En el siguiente ejemplo se obtiene el resultado en serie de la máquina virtual denominada myVM en el grupo de recursos denominado myResourceGroup:
az vm boot-diagnostics get-boot-log --resource-group myResourceGroup --name myVM
Revise la salida en serie para determinar por qué la máquina virtual no se está iniciando. Si la salida en serie no proporciona ninguna indicación, /var/log es posible que deba revisar los archivos de registro una vez que tenga el disco duro virtual conectado a una máquina virtual para solucionar problemas.
Parada de la máquina virtual
En el ejemplo siguiente se detiene la máquina virtual llamada myVM del grupo de recursos myResourceGroup:
az vm stop --resource-group MyResourceGroup --name MyVm
Tomar una instantánea desde el disco del sistema operativo de la máquina virtual afectada
Una instantánea es una copia completa de solo lectura de un disco duro virtual. No se puede adjuntar a una máquina virtual. En el siguiente paso, crearemos un disco a partir de esta instantánea. En el ejemplo siguiente se crea una instantánea llamada mySnapshot del disco del sistema operativo de la máquina virtual "myVM".
#Get the OS disk Id
$osdiskid=(az vm show -g myResourceGroup -n myVM --query "storageProfile.osDisk.managedDisk.id" -o tsv)
#creates a snapshot of the disk
az snapshot create --resource-group myResourceGroupDisk --source "$osdiskid" --name mySnapshot
Creación de un disco a partir de la instantánea
Este script crea un disco administrado llamado myOSDisk desde la instantánea denominada mySnapshot.
#Provide the name of your resource group
$resourceGroup="myResourceGroup"
#Provide the name of the snapshot that will be used to create Managed Disks
$snapshot="mySnapshot"
#Provide the name of the Managed Disk
$osDisk="myNewOSDisk"
#Provide the size of the disks in GB. It should be greater than the VHD file size.
$diskSize=128
#Provide the storage type for Managed Disk. Premium_LRS or Standard_LRS.
$storageType="Premium_LRS"
#Provide the OS type
$osType="linux"
#Get the snapshot Id
$snapshotId=(az snapshot show --name $snapshot --resource-group $resourceGroup --query id -o tsv)
# Create a new Managed Disks using the snapshot Id.
az disk create --resource-group $resourceGroup --name $osDisk --sku $storageType --size-gb $diskSize --source $snapshotId
Si el grupo de recursos y la instantánea de origen no están en la misma región, recibirá el error "Recurso no se encuentra" al ejecutar az disk create. En este caso, debe especificar para --location <region> crear el disco en la misma región que la instantánea de origen.
Ahora ya tiene una copia del disco del sistema operativo original. Puede montar este nuevo disco en otra máquina virtual Windows para solucionar problemas.
Adjuntar el nuevo disco duro virtual a otra máquina virtual
Para los siguientes pasos, se usa otra máquina virtual para solucionar problemas. El disco se adjunta a esta máquina virtual de solución de problemas para examinar y editar el contenido del disco. Este proceso le permite corregir los errores de configuración o revisar archivos de registro adicionales de la aplicación o del sistema.
Este script adjunta el disco a myNewOSDisk la máquina virtual MyTroubleshootVM:
# Get ID of the OS disk that you just created.
$myNewOSDiskid=(az disk show -g $resourceGroup -n $osDisk --query id -o tsv)
# Attach the disk to the troubleshooting VM
az vm disk attach --disk $myNewOSDiskid --resource-group $resourceGroup --size-gb $diskSize --sku $storageType --vm-name MyTroubleshootVM
Montar el disco de datos adjunto
Nota
En los ejemplos siguientes se detallan los pasos necesarios en una máquina virtual de Ubuntu. Si usa un distro de Linux diferente, como Red Hat Enterprise Linux o SUSE, mount las ubicaciones y los comandos del archivo de registro pueden ser un poco diferentes. Consulte la documentación del distro específico para ver los cambios adecuados en los comandos.
SSH a la máquina virtual de solución de problemas con las credenciales adecuadas. Si este disco es el primer disco de datos conectado a la máquina virtual de solución de problemas, es probable que el disco esté conectado a
/dev/sdc. Sedmesgusa para ver discos adjuntos:dmesg | grep SCSIEl resultado es similar al siguiente ejemplo:
[ 0.294784] SCSI subsystem initialized [ 0.573458] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 252) [ 7.110271] sd 2:0:0:0: [sda] Attached SCSI disk [ 8.079653] sd 3:0:1:0: [sdb] Attached SCSI disk [ 1828.162306] sd 5:0:0:0: [sdc] Attached SCSI diskEn el ejemplo anterior, el disco del sistema operativo está en y
/dev/sdael disco temporal proporcionado para cada máquina virtual está en/dev/sdb. Si tenía varios discos de datos, deberían estar en/dev/sdd,/dev/sde, y así sucesivamente.Cree un directorio para montar el disco duro virtual existente. En el siguiente ejemplo se crea un directorio denominado
troubleshootingdisk:sudo mkdir /mnt/troubleshootingdiskSi tiene varias particiones en el disco duro virtual existente, monte la partición necesaria. En el ejemplo siguiente se monta la primera partición principal en
/dev/sdc1:sudo mount /dev/sdc1 /mnt/troubleshootingdiskNota
El procedimiento recomendado es montar discos de datos en máquinas virtuales en Azure mediante el identificador único universal (UUID) del disco duro virtual. Para este escenario de solución de problemas breve, no es necesario montar el disco duro virtual con el UUID. Sin embargo, en un uso normal,
/etc/fstabla edición para montar discos duros virtuales con el nombre del dispositivo en lugar de UUID puede provocar que la máquina virtual no arranque.
Corregir problemas en el nuevo disco del sistema operativo
Con el disco duro virtual existente montado, ahora puede realizar los pasos de mantenimiento y solución de problemas según sea necesario. Una vez que se han resuelto los problemas, continúe con los pasos siguientes.
Desmonte y desasose el nuevo disco del sistema operativo
Una vez resueltos los errores, desmonta y desasoyera el disco duro virtual existente de la máquina virtual de solución de problemas. No puede usar el disco duro virtual con ninguna otra máquina virtual hasta que se libera la concesión que adjunte el disco duro virtual a la máquina virtual de solución de problemas.
De la sesión SSH a la máquina virtual de solución de problemas, desmonte el disco duro virtual existente. Cambie primero del directorio primario del punto de montaje:
cd /Ahora desmonte el disco duro virtual existente. En el siguiente ejemplo se desmonta el dispositivo en
/dev/sdc1:sudo umount /dev/sdc1Ahora desasoye el disco duro virtual de la máquina virtual. Salga de la sesión SSH a la máquina virtual de solución de problemas:
az vm disk detach -g MyResourceGroup --vm-name MyTroubleShootVm --name myNewOSDisk
Cambio del disco del sistema operativo de la máquina virtual afectada
Puede usar la CLI de Azure para intercambiar los discos del sistema operativo. No es necesario eliminar ni volver a crear la máquina virtual.
En este ejemplo se detiene la máquina virtual myVM y se asigna el disco denominado myNewOSDisk como nuevo disco del sistema operativo.
# Stop the affected VM
az vm stop -n myVM -g myResourceGroup
# Get ID of the OS disk that is repaired.
$myNewOSDiskid=(az disk show -g $resourceGroup -n $osDisk --query id -o tsv)
# Change the OS disk of the affected VM to "myNewOSDisk"
az vm update -g myResourceGroup -n myVM --os-disk $myNewOSDiskid
# Start the VM
az vm start -n myVM -g myResourceGroup
Siguientes pasos
Si tiene problemas para conectarse a la máquina virtual, consulte Troubleshoot SSH connections to an Azure VM. Para obtener acceso a las aplicaciones que se ejecutan en la máquina virtual, consulte Solucionar problemas de conectividad de aplicaciones en una máquina virtual Linux.