Otázka: Omylem jsem zakázal „root“ účet ve virtuálním počítači CentOS běžícím ve VMWare. Poté jsem vyzkoušel všechny možné způsoby, jak obnovit „root“ účet a nakonec jsem se rozhodl restartovat VM v režimu jednoho uživatele. Bohužel se nepodařilo spustit virtuální počítač v režimu jednoho uživatele a chybové zprávy naznačovaly, že proces spouštění očekává root účet a proces se zastavil na neurčito. Níže je snímek obrazovky vysvětlující scénář:
Abych problém vyřešil, musím nějak upravit /etc/passwd soubor a povolte účet root. K tomu potřebuji obraz disku virtuálního počítače – v mém případě virtuální počítač běžel na VMWare, takže potřebuji vmdk soubor.
Řešení:
V tomto tutoriálu vám ukážu jak používat nástroje libguestfs pro přístup a úpravu souboru obrazu disku virtuálního stroje (VM). libguestfs je knihovna C se sadou nástrojů pro zobrazení a úpravu souborů uvnitř hostů, provádění změn na virtuálních počítačích, sledování využití disku, klonování virtuálních počítačů, formátování disků, změnu velikosti disků a mnoho dalších. Nástroj je schopen číst obraz disku VM z CD, USB disků a také vzdáleně přes SSH.
Před použitím libguestfs nástroje, připravte se s obrazem disku virtuálního stroje. Libguestfs také podporuje proprietární systémy jako VMware a Hyper-V.
Instalovat nástroje libguestfs:
V systému CentOS/Fedora/RHEL:
sudo yum install libguestfs-tools
V systému Debian/Ubuntu:
sudo apt-get install libguestfs-tools
Jak jsem řekl dříve, nástroje libguestfs přicházejí s mnoha příkazy, jako je 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 a mnoho dalších. Ale budeme používat příkaz guestfish – který vám umožňuje přistupovat k obrazům virtuálních strojů a upravovat je.
Hostující ryba:
Hostující ryba lze použít jako interaktivní prostředí i jako nástroj příkazového řádku. Příkaz umožňuje otevřít obraz disku v režimu pouze pro čtení (volba –ro) i pro čtení a zápis (volba –rw).
Caution: Make sure to shutdown the VM before using guesfish to access/modify the image.
Použití guestfish jako interaktivního shellu:
# 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
Nyní přistoupíme k souboru obrázku vmdk (řekněme test-flat.vmdk ).
><fs> add-ro test-flat.vmdk
Poznámka: Vyhledejte příkaz add-ro což znamená přidání nebo přístup k obrázku v režimu pouze pro čtení. Pokud chcete provést změny v obrázku, musíte obrázek otevřít s oprávněním pro čtení a zápis (to uvidíme později).
Vždy spusťte spustit před uvedením systémů souborů v obrazu disku, jak je znázorněno níže:
><fs> run â 25% â¦âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ⧠--:-â 50% â¦âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ⧠00:3â 75% â¦âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ⧠00:1 100% â¦âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ⧠00:00
Výše uvedený příkaz bude chvíli trvat, než přečte obrázek. Po dokončení můžete vypsat dostupné systémy souborů na disku, jak je uvedeno níže:
><fs> list-filesystems /dev/vda1: ext4 /dev/VolGroup/lv_home: ext4 /dev/VolGroup/lv_root: ext4 /dev/VolGroup/lv_swap: swap
Nyní musím připojit /dev/VolGroup/lv_root pro přístup k /etc/passwd .
><fs> mount /dev/VolGroup/lv_root /
Protože jsem obrázek otevřel v režimu pouze pro čtení, mohu zobrazit pouze /etc/passwd .
> cat /etc/passwd ::::::::::::::::::::::
Zde je úplný snímek:
# 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
Použití guestfish jako příkaz a úprava souboru:
# guestfish --rw --add test-flat.vmdk -i edit /etc/passwd
Podívejte se na možnosti
- –rw – otevřít obraz disku virtuálního počítače v režimu čtení a zápisu
- –přidat – přidá obrázek ‚test-flat.vmdk‘
- -i – automaticky připojí disky z obrazu virtuálního stroje
- upravit – příkaz pro úpravu souboru
Výše uvedený příkaz vám umožní upravit soubor přímo z obrázku a také jej uložit.
Pár dalších příkladů:
Předpokládejme, že chcete aktualizovat /etc/resolv.conf v hostovi, pak to můžete udělat následovně.
# guestfish \
add disk.vmdk : run : mount /dev/VolGroup/lv_root / : \
write /etc/resolv.conf "nameserver 8.8.8.8"
Použití guestfish pro přístup k obrazu vzdáleného disku pomocí ssh:
# guestfish -a ssh://somedomain.com/path/to/disk.vmdk
guestfish vám může pomoci dělat zázraky, takže je dobrý nápad podívat se na jeho stránku nápovědy.
# guestfish -N help
A je to. Pro více informací navštivte libguestfs.org.