Domanda: Per errore avevo disabilitato l'account "root" in una macchina virtuale CentOS in esecuzione in VMWare. Successivamente, ho provato tutti i modi possibili per recuperare l'account "root" e alla fine ho deciso di riavviare la VM in una modalità utente singolo. Sfortunatamente, la VM non è riuscita ad avviarsi in modalità utente singolo e i messaggi di errore indicavano che il processo di avvio si aspetta root account e il processo si è bloccato a tempo indeterminato. Di seguito è riportato lo screenshot che spiega lo scenario:
Per risolvere il problema, devo modificare in qualche modo /etc/passwd file e abilita l'account root. Per questo, ho bisogno dell'immagine del disco della macchina virtuale:nel mio caso, la VM era in esecuzione su VMWare, quindi ho bisogno di vmdk file.
Soluzione:
In questo tutorial ti mostrerò come utilizzare gli strumenti libguestfs per accedere e modificare il file immagine disco della macchina virtuale (VM). libguestfs è una libreria C con un set di strumenti per visualizzare e modificare i file all'interno dei guest, apportare modifiche alle VM, monitorare l'utilizzo del disco, clonare VM, formattare dischi, ridimensionare i dischi e molto altro. Lo strumento è in grado di leggere l'immagine del disco della VM da CD, dischi USB e anche in remoto tramite SSH.
Prima di usare libguestfs strumenti, preparati con il file immagine del disco della tua macchina virtuale. libguestfs supporta anche sistemi proprietari come VMware e Hyper-V.
Installa strumenti libguestfs:
Su CentOS/Fedora/RHEL:
sudo yum install libguestfs-tools
Su Debian/Ubuntu:
sudo apt-get install libguestfs-tools
Come ho detto prima, gli strumenti libguestfs sono dotati di molti comandi come guestfish, guestmount, guestunmount, virt-alignment-scan, virt-builder, virt-cat, virt-copy, virt-edit, virt-diff, virt-customize, virt -filesystem, formato virt, virt-get-kernel, virt-inspector, virt-list-filesystem, virt-list-partitions, virt-log, virt-ls, virt-make-fs, virt-p2v, virt-p2v -make-disk, virt-rescue, virt-tar e molti altri. Ma utilizzeremo il comando guestfish, che ti consente di accedere e modificare le immagini della macchina virtuale.
Ospite:
Il guestfish comando può essere utilizzato sia come shell interattiva che come strumento da riga di comando. Il comando consente di aprire un'immagine disco sia in modalità di sola lettura (opzione –ro) che di lettura-scrittura (opzione –rw).
Caution: Make sure to shutdown the VM before using guesfish to access/modify the image.
Utilizzare guestfish come shell interattiva:
# 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
Ora accediamo al file immagine vmdk (diciamo test-flat.vmdk ).
><fs> add-ro test-flat.vmdk
Nota: Cerca il comando add-ro il che significa aggiungere o accedere all'immagine in modalità di sola lettura. Se vuoi apportare modifiche all'immagine, devi aprire l'immagine con il privilegio di lettura-scrittura (lo vedremo più avanti).
Esegui sempre esegui comando prima di elencare i file system nell'immagine del disco come mostrato di seguito:
><fs> run â 25% â¦âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ⧠--:-â 50% â¦âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ⧠00:3â 75% â¦âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ⧠00:1 100% â¦âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ⧠00:00
Il comando precedente impiegherà del tempo per leggere l'immagine. Una volta terminato, puoi elencare i file system disponibili nel disco come mostrato di seguito:
><fs> list-filesystems /dev/vda1: ext4 /dev/VolGroup/lv_home: ext4 /dev/VolGroup/lv_root: ext4 /dev/VolGroup/lv_swap: swap
Ora devo montare /dev/VolGroup/lv_root per accedere a /etc/passwd .
><fs> mount /dev/VolGroup/lv_root /
Poiché ho aperto l'immagine in modalità di sola lettura, posso solo visualizzare /etc/passwd .
> cat /etc/passwd ::::::::::::::::::::::
Ecco lo snapshot completo:
# 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
Utilizzare guestfish come comando e modificare un file:
# guestfish --rw --add test-flat.vmdk -i edit /etc/passwd
Cerca le opzioni
- –rw – per aprire l'immagine del disco della macchina virtuale in modalità lettura-scrittura
- –aggiungi – aggiunge l'immagine 'test-flat.vmdk'
- -i – monta automaticamente i dischi dall'immagine di una macchina virtuale
- modifica – comando per modificare il file
Il comando sopra ti consentirà di modificare un file direttamente dall'immagine e di salvarlo.
Altri esempi:
Supponiamo di voler aggiornare /etc/resolv.conf in un ospite, ecco come puoi farlo.
# guestfish \
add disk.vmdk : run : mount /dev/VolGroup/lv_root / : \
write /etc/resolv.conf "nameserver 8.8.8.8"
Utilizzo di guestfish per accedere a un'immagine disco remota utilizzando ssh:
# guestfish -a ssh://somedomain.com/path/to/disk.vmdk
guestfish può aiutarti a fare miracoli, quindi è una buona idea dare un'occhiata alla sua pagina di aiuto.
# guestfish -N help
Questo è tutto. Controlla libguestfs.org per ulteriori informazioni.