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/