vmゲストのDebianをdist upgradeした際にミスをして試行錯誤しながら復旧したので,その手順についてまとめてみました.
virshでアップデート後にVMに接続できない
Debianのホスト上のkvmにゲストとしてDebianをインストールし使っていたが,dist-upgradeした際にうっかりgrubの設定をメンテナのバージョンに更新してしまった.その後,virsh start
するとVMは起動しているようだが,virsh console
からもネットワークからもアクセスできなくなってしまった.
後からわかったが,メンテナの/etc/default/grub
により/boot/grub/grub.cfg
の中で
terminal_output gfx
と設定されてしまったため,グラフィックを持たないVMがブート途中で止まっていたようだ.
レスキュー方法
仮想マシンをレスキューする方法を検索すると,virt-rescue
というコマンドがあることが分かった.このコマンドを使うことで,rescue-cdからブートしたような感じで,ゲストVMのイメージを確認できるよう.
Debianではguestfs-tools
に含まれているようなのでインストールする.
apt install guestfs-tools
イメージのマウント
Debianでvirshを使ってVMを作成した場合は/var/lib/libvirt/images
にイメージがある.どこにイメージがあるかはvirsh edit VM名
でも確認できる.
cd /var/lib/libvirt/images
virt-rescue -a VM.img -a
でVMのイメージをマウントし,レスキューシェルが起動する.
VM.imgのファイルシステムはレスキューシェルでは/sysroot
にマウントされている.
grub.cfgの修正
レスキューシェルにはエディターは含まれていないようなので,/sysroot/bin/tim.tiny
を使ってファイルを修正した.
/sysroot/bin/vim.tiny /sysroot/etc/default/grub
でGRUB_TERMINALの変更とGRUB_SERIAL_COMMANDを追加
GRUB_TERMINAL="console serial"
GRUB_SERIAL_COMMAND="serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1"
本来はここでupdate-grub
を実行する必用があるが,chrootなどを行う必用があるのとVMのイメージをどこまで書き換えてよいか不安だったので,直接/sysroot/boot/grub/grub.cfg
を書き換えた.
/sysroot/bin/vim.tiny /sysroot/boot/grub/grub.cfg
により本来はよくないが,grub.cfgを書き換え.
terminal_output gfx
の部分を以下に変更
serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1
terminal_input console serial
terminal_output console serial
レスキューシェルをexit
で抜けてvirsh start VM
で起動すると無事に起動した.