guestfish (libguestfs)で仮想マシンのディスクイメージにアクセスしてイメージ中のファイルを読み書きする

libguestfs is a set of tools for accessing and modifying virtual machine (VM) disk images.

libguestfsは仮想マシンのディスクイメージにアクセスするライブラリ。で、guestfishはそのフロントエンドのCLIツール。man, guestfish helpみたらだいたいわかる。

shell中で使えるコマンドはman guestfishのGUESTFISH COMMANDSあたりを参照。vi, cat, less, more, grep あたりが使えるので、何かしら設定間違えて仮想マシン起動しないなどの緊急時にファイル確認、変更などが出来る。

他には、

  • copy-in # ホストOSのファイルをディスクイメージにコピー
  • copy-out # ディスクイメージのファイルをホストOSにコピー

など。

変更した場合はsyncを実行しといたほうがいい(man いわく)。

当然だけど、起動中の仮想マシンのディスクイメージにアクセスする場合は、--ro をつけてread-onlyにすること。書き込みをしてしまうと、ファイルシステムが壊れる可能性あり。

WARNING
Using guestfish in read/write mode on live virtual machines can be dangerous,
potentially causing disk corruption. Use the --ro (read-only) option to use
guestfish safely if the disk image or virtual machine might be live.

example

# yum install guestfish
# guestfish --rw -a file.img -i
### -i を指定すればmountまで自動でやってくれる
### ><fs> run
### ><fs> list-filesystems
### /dev/vda1: ext4
### /dev/vg_hoge/lv_root: ext4
### /dev/vg_hoge/lv_swap: swap
### ><fs> mount /dev/vg_svxxx/lv_root /
><fs> cat /etc/hosts
127.0.0.1   hoge localhost localhost.localdomain
><fs> ls /tmp
><fs> write /tmp/hoge "hoge hoge"
><fs> cat /tmp/hoge
hoge hoge
><fs> sync
><fs> quit