Although libguestfs gives you a nice structured library and tools for manipulating disk images, sometimes you just want to run a few Linux commands like
fdisk against a disk image. For those times there is another tool called virt-rescue. It gives you a “rescue shell” connected to the disk image, and the usual set of command line Linux tools:
$ truncate -s 10G disk.img
$ virt-rescue -a disk.img
The virt-rescue escape key is ‘^]’. Type ‘^] h’ for help.
Welcome to virt-rescue, the libguestfs rescue shell.
Note: The contents of / (root) are the rescue appliance.
You have to mount the guest's partitions under /sysroot
before you can examine them.
><rescue> fdisk /dev/sda
><rescue> mke2fs /dev/sda1
Virt-rescue was a bit clumsy to use before because it didn’t (for example) pass Ctrl-C through to the rescue shell, so using that or other control keys would kill, stop or do other drastic things to the whole program.
I spent a bit of time last week fixing all of this, to make a really great, usable rescue shell.
The first thing is that ^C now works right:
><rescue> cat > /tmp/foo
The second most requested feature is support for automatically mounting up the guest’s filesystems (rather than having to tediously type
mount commands at the shell prompt). As with guestfish, the
-i option now does the right thing:
$ virt-builder debian-7
$ virt-rescue -a debian-7.img -i
><rescue> chroot /sysroot
><rescue> cat /etc/debian_version
Finally virt-rescue now comes with an escape key which lets you suspend the shell and come back to it, and do some other interesting operations:
^] ? - print this message
^] h - print this message
^] i - print inspection data
^] q - quit virt-rescue
^] s - sync the filesystems
^] u - unmount filesystems
^] x - quit virt-rescue
^] z - suspend virt-rescue
to pass the escape key through to the rescue shell, type it twice
attempting to sync filesystems ...
+ Stopped virt-rescue -a debian-7.img -i
This is all available in libguestfs ≥ 1.37.1.