Question : Par erreur, j'avais désactivé le compte "root" dans une machine virtuelle CentOS fonctionnant sous VMWare. Par la suite, j'ai essayé tous les moyens possibles pour récupérer le compte "root" et j'ai finalement décidé de redémarrer la VM en mode mono-utilisateur. Malheureusement, la VM n'a pas pu démarrer en mode mono-utilisateur et les messages d'erreur indiquaient que le processus de démarrage attendait root compte et le processus suspendu indéfiniment. Ci-dessous, la capture d'écran expliquant le scénario :
Afin de résoudre le problème, je dois en quelque sorte modifier /etc/passwd fichier et activer le compte root. Pour cela, j'ai besoin de l'image disque de la machine virtuelle - dans mon cas, la machine virtuelle fonctionnait sur VMWare, j'ai donc besoin du vmdk fichier.
Solution :
Dans ce didacticiel, je vais vous montrer comment utiliser les outils libguestfs pour accéder et modifier le fichier image disque de la machine virtuelle (VM). libguestfs est une bibliothèque C avec un ensemble d'outils pour afficher et modifier des fichiers à l'intérieur des invités, apporter des modifications aux VM, surveiller l'utilisation du disque, cloner des VM, formater des disques, redimensionner des disques et bien d'autres. L'outil est capable de lire l'image disque de VM à partir de CD, de disques USB et à distance via SSH également.
Avant d'utiliser libguestfs outils, préparez-vous avec le fichier image disque de votre machine virtuelle. Le libguestfs prend également en charge les systèmes propriétaires tels que VMware et Hyper-V.
Installer les outils libguestfs :
Sur CentOS/Fedora/RHEL :
sudo yum install libguestfs-tools
Sur Debian/Ubuntu :
sudo apt-get install libguestfs-tools
Comme je l'ai dit plus tôt, les outils libguestfs sont livrés avec de nombreuses commandes telles que 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 et bien d'autres. Mais nous utiliserons la commande guestfish, qui vous permet d'accéder aux images de machines virtuelles et de les modifier.
poisson invité :
Le poisson invité La commande peut être utilisée à la fois comme shell interactif et comme outil de ligne de commande. La commande vous permet d'ouvrir une image disque en mode lecture seule (option –ro) et en lecture-écriture (option –rw).
Caution: Make sure to shutdown the VM before using guesfish to access/modify the image.
Utiliser guestfish comme shell interactif :
# 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
Accédons maintenant au fichier image vmdk (disons test-flat.vmdk ).
><fs> add-ro test-flat.vmdk
Remarque : Recherchez la commande add-ro ce qui signifie, ajouter ou accéder à l'image en mode lecture seule. Si vous souhaitez apporter des modifications à l'image, vous devez ouvrir l'image avec le privilège de lecture-écriture (nous verrons cela plus tard).
Toujours exécuter run commande avant de lister les systèmes de fichiers dans l'image disque comme indiqué ci-dessous :
><fs> run â 25% â¦âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ⧠--:-â 50% â¦âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ⧠00:3â 75% â¦âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ⧠00:1 100% â¦âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ⧠00:00
La commande ci-dessus prendra un certain temps pour lire l'image. Une fois cela fait, vous pouvez répertorier les systèmes de fichiers disponibles sur le disque comme indiqué ci-dessous :
><fs> list-filesystems /dev/vda1: ext4 /dev/VolGroup/lv_home: ext4 /dev/VolGroup/lv_root: ext4 /dev/VolGroup/lv_swap: swap
Maintenant, je dois monter /dev/VolGroup/lv_root pour accéder à /etc/passwd .
><fs> mount /dev/VolGroup/lv_root /
Comme j'ai ouvert l'image en mode lecture seule, je ne peux voir que /etc/passwd .
> cat /etc/passwd ::::::::::::::::::::::
Voici l'instantané complet :
# 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
Utiliser guestfish comme commande et modifier un fichier :
# guestfish --rw --add test-flat.vmdk -i edit /etc/passwd
Faites attention aux options
- –rw – pour ouvrir l'image disque de la VM en mode lecture-écriture
- –ajouter – ajoute l'image 'test-flat.vmdk'
- -i – monte automatiquement les disques à partir d'une image de machine virtuelle
- modifier – commande pour éditer le fichier
La commande ci-dessus vous permettra de modifier un fichier directement à partir de l'image et de l'enregistrer également.
Quelques autres exemples :
Supposons que vous souhaitiez mettre à jour /etc/resolv.conf dans un invité, voici comment procéder.
# guestfish \
add disk.vmdk : run : mount /dev/VolGroup/lv_root / : \
write /etc/resolv.conf "nameserver 8.8.8.8"
Utilisation de guestfish pour accéder à une image disque distante à l'aide de ssh :
# guestfish -a ssh://somedomain.com/path/to/disk.vmdk
guestfish peut vous aider à faire des merveilles, c'est donc une bonne idée de consulter sa page d'aide.
# guestfish -N help
C'est ça. Consultez libguestfs.org pour plus d'informations.