箱庭遊び13: Debianの仮想マシンの復元作業で連戦連敗

今年の読売の対阪神戦のようです

少し実用に近い作業をしていますが,昨日は使える時間をすべて使って取り組んだにも関わらず全く成果が得られませんでした.

何をしているかというと,某所で実用的に動いている仮想マシンが現在Debian 11.x Bullseyeのままなので,その某所のネットワーク管理者に叱られる前にDebian 12.x Bookwormにupgradeする必要があり,その下準備です.

その某所の仮想マシンについては,「ホストの管理者権限をもっていない」という大きな制約があります.したがって作業は慎重に慎重を重ねてやっていますが,これまで動かしてきた1年ちょっとの間に数回リブートできないトラブルに見舞われました.

そのうち1度はブートの仕組みをぶっ壊してしまい,手元にあるバックアップファイルから仮想ディスクを再構築して,仮想マシンのホストの管理者(以下「大家さん」)にSDカードに書き込んだ仮想ディスクを郵送して差し替えてもらいました.

残りのブート失敗はKVM/QEMUのバグで,何回かブートするとブートの一番最初のあたりで引っかかって先に進まないものです .このトラブルの場合には,大家さんに仮想マシンの強制リスタートをかけてもらえばたいていというかこれまでのところ全部解消してきました.

それで今回の話に戻りますが,しばらくその実用的なDebianの仮想マシンはいじっていないのて勘所をすっかり忘れています.そこで,そのマシンのバックアップから仮想ディスクを作り,仮想マシンとして起動して,Debian Bookwormまでupgradeをするという手順の確認と習熟を手持ちのマシンでするという非常に生産的な作業をしています.

最初は最新状態のManjaroで空の仮想ディスクを作ってext4にformatしてnbdでマウントしてバックアップをコピーし,Debian 12.1 (Bookworm)のインストールDVDイメージからchrootしてgrubのインストールを試みましたが,何度やっても自分で起動するようになりません.ときどき “unknown filesystem” っていうエラーメッセージが出ている事に気づきました.FEATURE_C12の呪いを忘れていました.

Debian 11.xの仮想ディスクはDebian 11.xでformatして作らないとNGです

それを思い出してから作業をしていますが,Debian 11.xのインストールDVDから仮想ディスクイメージにchrootする選択をして,grub-installなりupdate-grubをするとエラーなくコマンドは通るのですが,いざ仮想ディスクイメージからブートしようとしてもgrubのrescueモードになってしまい,コマンドラインを打ち込んでもKernel Panicで止まってしまいます.

寝ながらいろいろ考えましたが,既に考え得ることは全てやり尽くしたように思います.しかし,昨年,確かにバックアップの内容から仮想ディスクを作り直し,その仮想ディスクで現在サーバーが稼働しているわけですから,できないはずはないです.

一つ可能性があるとしたら,Debianのインストール用DVDイメージのchrootで,必要なおまじないをしていないのかもしれません.

ということで,今日時間が取れたら,DVDイメージのRescue Modeから起動しても仮想とディスクへのchrootは自分でおまじないをしてからしてみる,というのを試みてみます.

これまで散々悪行を尽くしてきたのにこの成績とは,って誰か言ってました.
筆者がいじっている仮想マシンのうち唯一の実用マシンです😓
昨年トラブったときにネット検索をしていくつか事例を見つけたのですが,今回は面倒なので調べません.
筆者の経験則としては,10回に1回程度でしょうか.
当然最新のmkfsにFEATURE_C12をdisableにするオプションがあるはずですが,今のところ発見できていません😓

箱庭遊び6: Slackware仮想マシンの実マシン化 (3)

半分成功した状態で頓挫しました.

いろいろやりながら調べてわかったのは,ext4のFEATURE_C12という機能にまつわるインコンパチビリティーが話を複雑にしているようです.

できるようになったのは,Manjaro (AMD64)のgrubから,Slackware 32bit版を起動させることです.起動したSlackware 32bit版自身でEFIの操作やgrubのインストールはいろんなオプション試しましたができませんでした.

Manjaroのgrubからでも起動できれば成功としていいと思うのですが,Slackware 15.0がリリースされた時のkernel 5.15.19ならばブートするのですが,最新パッチの5.15.117ではブートしてくれません.ですので1/4成功でしょう.

Slackware 15.0 32bit版の仮想マシンの実マシン化はあきらめて,Debianを復元してみます.

一応なんとか動くので,しばらくSlackware 15.0 (32bit)を実マシンで動かしてみることにします.

追記

何をどうしたかわかりませんが,Slackware 15.0 (32bit)の最新kernel 5.15.117でブートするようになりました.Manjaroのgrub頼みですが,しばらくこのまま使ってみます.この追記もSlackware 15.0 の元,Firefoxから書き込んでいます.日本語入力はfcitx4 + Mozcです

いや,1/3か,1/4かも😓
fcitx5より少し不便ですが.

箱庭遊び4: Slackware仮想マシンの実機化 (1)

所詮遊びなので,場当たり的に作業してその過程や結果をメモる,で十分と思いますが,少しでも実践というか実戦に役立つよう,次は事前にテーマを決めてそれに取り組んでみます.

そこで今回のテーマは,「仮想マシンとしてでっちあげたSlackware 15.0 32bit版を第2 WS (workstation) の第2 OSのパーティション(現在はDebianがインストールしてある場所)へのインストールを試み」とします.

バックアップ的な意味合いで飼っている仮想マシンを必要に応じて実マシン化する練習です.

なぜあえて32bit版かというと,64bit版にはMozcがインストール出来ないからです.Mozcをインストールして多少のデスクワークをするところまでを目標にします.

想定される関門としては,作業をする実マシン環境がAMD64ですが,そこでx86 32bitの実マシンのブートの設定がうまくいくかです.

箱庭遊び3: Manjaro実機の仮想化も成功

Debian実機の仮想化の次は,第2workstation (WS)の第1OSであるManjaroの仮想化に取り組みました.

Debianでまっ更な仮想ディスクイメージへのコピーがうまく行かなかったので,今回はその成功を目指しました.

Manjaro WSは,Raspberry Piのバックアップなどを含むのでデータの占有量は160GBを少し超えるので,200GBのまっ更な仮想ディスクイメージを作成し,100MBをBIOS bootに,残りをLinux用にGPTでパーティショニングしました.

qemu-nbdを使って,ブロックディバイス化して,フォーマットしてLinuxのパーティションをマウントして,既に動いているManjaroの仮想マシン(これもかなり前に実マシンから仮想化したもの)の第2ドライブとしてつないで,chrootしてgrubをインストールしました.このあと既に動いているManjaroの第2ドライブからその新しい仮想ディスクイメージを外し,VMmanagerで新しい仮想ディスクイメージをメインディスクにした仮想マシンをでっち上げます.

しかしブートしませんでした.GRUBの画面は出てデフォルトのまま先に進みますが,UUIDで指定したドライブが見つからないと文句を言います.

おそらく仮想ディスクをVirtIOで接続したのが良くなかったのですが,このときは気づかず,Manjaroの仮想マシンでchrootはあきらめ,DebianのインストールDVDイメージから起動して,新しく作った仮想ディスクのLinuxパーティションをルートにして,grub-installとupdate-grubを実行して,仮想イメージからブートしたら,今度は起動に成功しました.

先に書きましたが,DebianのDVDイメージで作業したから成功したのではなく,仮想マシンにVirtIOでなくSATAとして接続したのが良かったのだと思います.

箱庭遊び2: 実Debianの仮想化は成功

うまく行かなかった,Debianの実マシンの仮想化はその後成功しました.

まっさらなqcow2の仮想ディスクイメージに実マシンのディスクの内容をコピーするという正攻法がうまく行かなかったので,Plan Bとして,仮想マシンとして動いているDebianの仮想ディスクイメージを複製し,

rsync -artlvd --sparse --inplace --delete /実マシンの/ディスクの/マウントポイント/ /仮想ディスクの/マウントポイント/

を実行しました.

--sparseオプションは,いくつか仮想ディスクイメージがあるから指定しています.また,ないとは思いますが,ディスクがオーバーフローしないように,--inplaceも指定しています

このコピーの後,コピー先の/etc/fstabの内容を,実情に合うようにします.とはいえ,ルートだけで,UUIDなり,/dev/sda3なり,/dev/vda3と指定します

そして,VMmanagerで,コピーしてできたqcow2を含んだ仮想マシンをでっちあげます.

さて,これでもまだコピーしてできた仮想ディスクイメージからブートはできませんので,DebianのインストールDVDイメージから新しく作った仮想マシン起動して,Rescueモードでなんやかんやしたらgrubで無事起動するようになりました.

結局どこが悪かったかわからないままですが,動けばいいんです.

ちなみに,この方法では一つだけ問題があります.それは,同じUUIDを持つパーティションがこの世に2つ存在することです.2つのディスクイメージを同じ仮想マシンに同時に装着して,UUIDを指定してパーティションをマウントしなければ問題になりませんが.

これも元をたどれば実マシンのDebian.ただし,いつ頃コピーしたかは不明.
UUIDの場合はもうひと手間必要ですが省略します😓
新規に作ったqcow2のパーティショニングかフォーマットあたりでしょうが.
今後同じ方法で複製をすれば,さらに増える😓