Pregunta: Por error, había deshabilitado la cuenta 'raíz' en una máquina virtual CentOS que se ejecuta en VMWare. A partir de entonces, probé todas las formas posibles de recuperar la cuenta "raíz" y finalmente decidí reiniciar la máquina virtual en modo de usuario único. Desafortunadamente, la máquina virtual no pudo iniciarse en modo de usuario único y los mensajes de error indicaron que el proceso de inicio está esperando root cuenta y el proceso se colgó indefinidamente. A continuación se muestra la captura de pantalla que explica el escenario:
Para solucionar el problema, de alguna manera tengo que editar /etc/passwd archivo y habilite la cuenta raíz. Para eso, necesito la imagen de disco de la máquina virtual; en mi caso, la VM se ejecutaba en VMWare, por lo que necesito el vmdk archivo.
En este tutorial, te mostraré cómo usar las herramientas de libguestfs para acceder y editar el archivo de imagen de disco de la máquina virtual (VM). libguestfs es una biblioteca C con un conjunto de herramientas para ver y editar archivos dentro de los invitados, realizar cambios en las máquinas virtuales, monitorear el uso del disco, clonar máquinas virtuales, formatear discos, cambiar el tamaño de los discos y mucho más. La herramienta es capaz de leer imágenes de disco de VM desde CD, discos USB y también de forma remota a través de SSH.
Antes de usar libguestfs herramientas, prepárese con el archivo de imagen de disco de su máquina virtual. libguestfs también es compatible con sistemas propietarios como VMware e Hyper-V.
Instalar herramientas libguestfs:
En CentOS/Fedora/RHEL:
sudo yum install libguestfs-tools
En Debian/Ubuntu:
sudo apt-get install libguestfs-tools
Como dije antes, las herramientas libguestfs vienen con muchos comandos como guestfish, guestmount, guestunmount, virt-alignment-scan, virt-builder, virt-cat, virt-copy, virt-edit, virt-diff, virt-customize, virt -filesystems, virt-format, virt-get-kernel, virt-inspector, virt-list-filesystems, virt-list-partitions, virt-log, virt-ls, virt-make-fs, virt-p2v, virt-p2v -make-disk, virt-rescue, virt-tar y muchos más. Pero usaremos el comando guestfish, que le permite acceder y modificar imágenes de máquinas virtuales.
pez invitado:
El pez invitado El comando se puede usar tanto como shell interactivo como como herramienta de línea de comandos. El comando le permite abrir una imagen de disco tanto en modo de solo lectura (opción –ro) como de lectura y escritura (opción –rw).
Caution: Make sure to shutdown the VM before using guesfish to access/modify the image.
Usando guestfish como caparazón interactivo:
# guestfish Welcome to guestfish, the libguestfs filesystem interactive shell for editing virtual machine filesystems. Type: 'help' for help on commands 'man' to read the manual 'quit' to quit the shell
Ahora accedamos al archivo de imagen vmdk (digamos test-flat.vmdk ).
><fs> add-ro test-flat.vmdk
Ejecutar siempre ejecutar comando antes de enumerar los sistemas de archivos en la imagen del disco como se muestra a continuación:
><fs> run â 25% â¦âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ⧠--:-â 50% â¦âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ⧠00:3â 75% â¦âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ⧠00:1 100% â¦âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ⧠00:00
El comando anterior tardará un tiempo en leer la imagen. Una vez hecho esto, puede enumerar los sistemas de archivos disponibles en el disco como se muestra a continuación:
><fs> list-filesystems /dev/vda1: ext4 /dev/VolGroup/lv_home: ext4 /dev/VolGroup/lv_root: ext4 /dev/VolGroup/lv_swap: swap
Ahora, necesito montar /dev/VolGroup/lv_root para acceder a /etc/passwd .
><fs> mount /dev/VolGroup/lv_root /
Como abrí la imagen en modo de solo lectura, solo puedo ver /etc/passwd .
> cat /etc/passwd ::::::::::::::::::::::
Aquí está la instantánea completa:
# guestfish Welcome to guestfish, the libguestfs filesystem interactive shell for editing virtual machine filesystems. Type: 'help' for help on commands 'man' to read the manual 'quit' to quit the shell
><fs> add-ro test-flat.vmdk ><fs> run â 50% â¦âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ⧠--:-â 75% â¦âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ⧠00:0 100% â¦âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ⧠00:00 ><fs> mount /dev/VolGroup/lv_root / ><fs> cat /etc/passwd :::::::::::::::::::::::::::::: ><fs> exit
Usar guestfish como comando y editar un archivo:
# guestfish --rw --add test-flat.vmdk -i edit /etc/passwd
Busque las opciones
- –rw – para abrir la imagen de disco de la VM en modo de lectura y escritura
- –añadir – agrega la imagen 'test-flat.vmdk'
- -yo – monta automáticamente los discos desde una imagen de máquina virtual
- editar – comando para editar el archivo
El comando anterior le permitirá editar un archivo directamente desde la imagen y guardarlo también.
Algunos ejemplos más:
Suponga que desea actualizar /etc/resolv.conf en un invitado, así es como puedes hacerlo.
# guestfish \
add disk.vmdk : run : mount /dev/VolGroup/lv_root / : \
write /etc/resolv.conf "nameserver 8.8.8.8"
Uso de guestfish para acceder a una imagen de disco remoto mediante ssh:
# guestfish -a ssh://somedomain.com/path/to/disk.vmdk
guestfish puede ayudarte a hacer maravillas, por lo que es una buena idea consultar su página de ayuda.
# guestfish -N help
Eso es todo. Consulte libguestfs.org para obtener más información.