libguestfs: http://libguestfs.org/
ディスクイメージを直接編集できる。QCOW2以外にもVMDKなど多数のフォーマットに対応している。
- cloud-initの設定をしたい
- yum.confにproxyの設定をしておきたい
- 気になるあの子のVMにバックドアを埋め込みたい
といった場合に有用。
また、ディスクが溢れてOSが死んだとか、VMがぶっ壊れたとか、そういう時にも有用。
ディスクイメージからのデータの吸い出しや不要ファイルの削除により、データの保護や迅速な復旧が期待できる。
インストール
yum install libguestfs-tools # or apt-get install libguestfs-tools
Ubuntuでは途中でsupermin-applianceのインストールのためにncursesの赤い画面が出る。
<Yes>で良いと思うが、びっくりして思わず<No>を選んだ場合でも、インストール後に
sudo update-guestfs-appliance
とすればOK。
ちなみに、結構な数の依存パッケージがインストールされる。libvirtとかqemuとかいう文字が見えたりしても、インストール後にlibvirtdとdnsmasqがデーモン起動していたとしてもビビらないこと。つまり、一時的に小さいLinuxカーネルのVMを作成し、そのVMに操作対象のディスクイメージをSCSIで認識させて編集するという仕組み。psするとqemuが起動していることが確認できる。
ただ、そういうわけなので、KVMホストで直接guestfishを使うのは避けたほうが良いだろう。
使い方
ディスクイメージを取得
qemuユーザーでVMが起動するので、qemuユーザーが見えるところにイメージを置く。/tmpとか。
cd /tmp
wget hoge.com/test.qcow2
guestfishを起動
EDITOR環境変数でedit時のエディタを指定できる。指定しないとviが使われる。ゆとりには辛い。
sudo guestfish --rw -i -a test.qcow2 EDITOR=vim
VMが起動するので、シェルが使えるようになるまで少し時間がかかる。
guestfishシェル
><fs>
このシェルで使用可能なコマンドは山ほどあるが、ls/cat/edit/copy-in/copy-outなどを最低限覚えておけばよさそう。他にもla/touch/rm/llなど見覚えのあるコマンドもある。これらのコマンドはguestfishの引数に付けることもできる。
sudo guestfish --rw -i -a test.qcow2 edit /etc/cloud/cloud.cfg
guestfishラッパー
guestfishのコマンドを直接使わなくても、便利なラッパーコマンドが多数用意されている(virt-ls/virt-resque/virt-edit)。man virt-edit曰くvirt-editはguestfish --rw -i -d domname edit /fileとほぼ同義とのこと。
他にもそれはそれはたくさんの機能と使用可能なコマンドがある。こんなコマンドないかなーとかこんなことしたいなーって時には、下記のドキュメントを探してみるべし。
逆引き
逆引き: http://libguestfs.org/guestfs-recipes.1.html
FAQ: http://libguestfs.org/guestfs-faq.1.html
ラッパー: http://libguestfs.org/ (右下)
マジかよ: https://rwmj.wordpress.com/2013/03/13/guestfish-now-supports-502-commands/