仮想マシンと実マシンの行き来についてまとめ

まとめというより,まだ途中経過ではあります.

実マシンから仮想マシンへの移行

これは比較的楽です.Linux distroの32 bit版でも64 bit版でもたいていうまくいきます.仮想マシンの仮想ディスクイメージ(以下「仮想イメージ」と略します)は,MBRでもGPTパーティションでも大丈夫です.仮想マシンでマルチブートする必要はありませんから,MBRにしておけばBIOS BOOT用パーティションなしの1本のパーティションで済みます.

ブートローダーの設定は,Slackware64 15.0のインストール用DVDイメージからブートさせて,chrootして設定します.もちろん32bit OSについてはSlackwareのオリジナル(32bit版)を使用します.これで,Slackware 32/64, Debian 32/64, Manjaro 64のそれぞれの実マシンを仮想化できています

十分習熟したこともありますがまずまちがいなく仮想化できます.

仮想マシンから実マシンへの移行

こちらは,難易度が高いです.特に32bit版についてはまぐれで1度Slackware 15.0を第1OSのManjaro AMD64版のGRUBからブートできるようになりましたが,その後は再現できていません😅

Debian 32bit paeについては,CUIは起動しますが,GUIではsddmが起動してくれない,というところまでは行きます.

64bit版については,ManjaroのGRUBからDebian, Slackware64, Manjaroを第1OSであるManjaroのGRUBからブートできるようにはできました(ただし,grub.cfgの手直しが必要).

また,唯一Debian AMD64については,第1OSのManjaroのEFI+GRUBからのブートに加えて,自分のEFI+GRUBからのブートもできるようになりました.しかし,過去にはうまく行かなかったこともあり,どうするとうまく行ってどうすると失敗するのかは解っていません.

とはいえ,「仮想マシンから実マシンへの移行」で,32bit版はほとんどうまく行っていないと記しているとおり,最近は32bit版の実マシンが存在していませんから,その仮想化のテストはできていません.
Debian 9時代まで実マシンだった.

存在しないUUIDを書き込むgrub-mkconfig

grub-mkconfigというスクリプトが多くのdistroで採用されています.

今実行しているOSをgrubのブートメニューに加えるのはもちろんのこと,マウントしていない他のパーティションにあるOSも探し出してメニューに加えてくれます.

現在第2 workstation (以下 “第2WS”)では,第1OSであるManjaroが第1パーティションにEFI+GRUBのブートローダーをインストールして,第2OSもその御蔭でブートするようにしています.

ところがどっこい,第2OSの情報が正しくgrub.cfgに書き込まれておらず,ブートしてくれません.いろんなOSを仮想マシンから引っ張り出してコピーしてみましたが,だめでした.

いろいろその過程でわかってきたのは,どうもgrub.cfgに書き込まれている第2OSのパーティションのUUIDが間違っていることです.

パーティションのUUIDはフォーマット時に設定されますからいくらでも変わるわけですが,それじゃ面倒なのと,FEATURE_C12の呪いの問題があるので,第2OSのパーティションは1度SlackwareのインストールDVDイメージからフォーマットして以来フォーマットせず,OSの入れ替え時には,rsync--deleteオプションを付けてコピーするようにしています.

何度grub-mkconfiginstall-grubをかけても,grub.cfgには,多分昔設定されていたであろう現存しないUUIDが頑なに書き込まれてしまいます.やむを得ないので,grub-mkconfig (あるいはupdate-grub)のあと,grub.cfgを編集して,UUIDを現在のものにすることで,第2OSもブートできています

第2OSの側で,

find -type f -exec grep -H 古いUUID {} \;

をかけても見つかりませんでした.今度第1OSで同じことをして探してみます.

Linux distributionの略.英語のドキュメント類を読んでいないことがバレるので “ディストリ” と略さないようにしましょう.
Debianの32bit版,64bit版,Slackware 32bit版,64bit版,Manjaro 64bit版の5種類試しました.
もちろんsedでもできますが,全体を見渡しながら修正するほうが好きなのでエディターでやってます.
というか,それがわかってそのようにしているのはきょうになってから😅

箱庭遊び16: ほぼ習熟

バックアップから, 仮想ディスクを仕立てて,仮想マンシを起動するまでの手順をほぼ習熟しました.KVM/QEMUでもVMWare Fusionでもほとんど手順を間違えずに,あるいは間違えたとしてもすぐ修正して,仮想マシンが動きました.

一応これは実用的な訓練でしたが,あとは実用的な利用目的は考えつかないので,そろそろ箱庭遊びは切り上げます.

さて,次は何をしようかな😥

箱庭遊び15: KVM/QEMUでもバックアップから作った仮想ディスクでブート成功

某所で動いている実用サーバーのバックアップから仮想ディスクを起こして起動させるテストの続きです.

一昨日うまく行かなかった理由はDebianのインストール用DVDイメージのRescueモードから,作った仮想ディスクにchrootしていたからです.この方法だとchrootの前のおまじないが足りないということは,随分前に経験済みだったのですが,同じところで一日はまり込んでいたわけです.

この日の作業では,まず上記Debianのインストールディスクでchrootしてうまく行っていなかった,DOSパーティションの仮想ディスクに,Gentoo方式で正しくchrootして,grub-install, grub-mkconfigを実行して,ちゃんとブートするようになりました

次に,まっさらな仮想ディスクを仕立て,GPTパーティションとしてBIOS boot領域とルートの2パーティションにして,バックアップからコピーをして,同様にchrootしてgrub-install, grub-mkconfigをし,こちらもブートするようになりました

どちらの仮想イメージについても,Bookwormに無事upgradeできました.

使用したインストール用DVDイメージはSlackware64 15.0.
同じくSlackware64 15.0.

箱庭遊び14: ようやく1勝

今日は都合によりいつも仮想マシン遊びをする第2 WS(workstation)でなくて,第3 WSの位置づけであるMacbookのVMWare Fusion 13 Player(以下 “VMWare”)で戦いの続きをすることにしました.

まずはVMWareで新規のマシンOther Linux Kernel 5.x (64bit)を作りました.インストール用DVD イメージはSlackware64 15.0のものを使いました.仮想ディスクは分割しない40GBです.

DVDイメージからブートして,仮想ディスクをfdiskで1つのパーティションのみのDOSパーティション(MBR)にしました.そして普通に,

mkfs.ext4 -j /dev/sda1

としてformatしました.

ここでいったん仮想マシンを終了させて,同じVMWareで動いているまともなLinuxの仮想マシンに,先程作った仮想ディスクを接続(元からは削除)してrsyncを使ってバックアップの内容をコピーしました.バックアップには/sys /proc /tmp /devがありませんからこれらを手で作ったり,/devに関してはコピーしました.

コピーが完了したら,もう一度その仮想ディスクを先程の仮想マシンに戻して,引き続きSlackware64 15.0のDVDイメージから起動して,いよいよchrootです.

今回は昨日の反省を踏まえて,ちゃんと手作業で準備をしてからchrootしました.これで,

grub-install /dev/sda
grub-mkconfig -o /boot/grub/grub.cfg

として,今度は祈りながら仮想ディスクイメージからブートさせることで,ようやくディスクイメージからのブートに成功しました.

ネットワークの設定方法をすっかり忘れてしまっていましたが,実用マシンはスタティックなIPアドレスを使っていますが,そのままでは仮想環境から外に繋がらないので,/etc/network/interfacesをちょこっと編集しました.

これで外につながるようになったので,

apt update
apt upgrade
apt autoclean
apt autoremove
ここでリブートできればする
再度ログインして/etc/apt/sources.listのbullseyeをbookwormに書き換える
apt update
apt upgrade
apt dist-upgrade
apt autoclean
apt autoremove

以上で無事にBookwormになりました.このVMareの仮想ディスクvmdkをqemu-imgでqcow2にコンバートすれば何もいじらずにKVM/QEMU環境で起動すると思いますが,練習を積むことも重要な目的なのでKVM/QEMU環境では仮想ディスクの作成からもう一度やってみます.

たぶんGPTにする場合,BIOS boot用のパーティションが別に必要になると思います.
今回はManjaro AMD64.