実HDDを仮想マシン化 (KVM 13)

前の話のまとめです.

まえがき

これまで,実マシンとして動いていたLinux Work Station (以下WS1)を,実体として残しておく訳にはいかないけど,まったく捨ててしまうのももったいない.きっと,何か,二度と再現できないノウハウ的なものがあるかもしれない^^;

ディスクをイメージ化して保存し,しかも仮想マシンとして稼働できるようにしておけば,すばらしいです.

で,いろいろ試したところ,次の手順が一番よいと思います.

仮想マシン内でコピー

まず,どこのご家庭にもある,KVM内の既に稼働している仮想マシンを用意します.この仮想マシンに新たなディスクイメージを追加します.容量は,WS1のディスクサイズでもいいですし,実際に動作させるのに必要十分で最小容量でもいいです.形式は何でもいいですが,保存することを第一に考えれば,qcow2のsparse形式でしょうね.

次に,仮想マシンの第3ディスクとして,ホストマシンに接続した,WS1のHDDの実態を追加します.

そして,仮想マシンを起動して,/dev/sdbとなったディスクイメージをパーティショニングして,formatします.

さらに,formatしたイメージのメインの部分をどこかにマウントし,/dev/sdcとなった実ディスクのメインの部分もどこかにread onlyでマウントして,内容をまるまるコピーします.

コピーの方法はいろいろあるけど,最近はrsyncのみ使用してます.

一旦保存

コピーが終了したら,仮想マシンを停止して,その仮想マシンから,先ほど追加した,新しいディスクイメージと,実HDDを削除します.この際,間違っても,せっかく作成したディスクイメージを削除しないことです.”ディバイスリストから削除”するだけで,ディスクイメージは残します.

この新しく作成して実HDDからコピーしたディスクイメージで新たな仮想WSを作って起動させるわけですが,Kernelその他いろいろいじることもあるので,原型を止めたいということであれば,このイメージをどこか別に保存しておいたほうがいいでしょうね.

起動可能とする

これは,いろいろやり方があると思います.私は100%,SlackwareのインストールDVDを使っています.

コピーの時点で,boot loaderを適切にインストールしていないので,多少の工夫が必要ですが,そのくらいのことは,Linuxをいじっている人には朝飯前でしょう.

Good luck & good-by!

これで,滅多に動かすことのなくなったWSの実体を心置きなく捨てることができます.

あとで,いろいろやって分かって来ましたが,2番目に追加したドライブが必ずしもBIOS的に2番目になるとは限りません.これは困ったことです.どうすればBIOS的に順番を変えられるか.調査中です.

既存ディスクを仮想マシンに (KVM 12)

まとめじゃなくて走り書きです.

既存のマシンを仮想マシン化するために,これまでやったことや,今やっていること

  1. ホストマシンで,qcow2のsparseイメージをnbdでマウントして既存のディスクの内容をコピー
  2. ゲストマシンで,virtio_scsiで外付けディスクをマウントする
  3. rawディスクイメージをloopでマウントして、既存ディスクをコピー

1. は,時間はかかるけれども,それほどベラボーではない.しかし,マシンが不安定になることがある.

2.は,うまくいく場合もあるが,ホストで認識できるパーティションが,ゲストでは認識できない場合がある.また,仮想マシンを止めて,virt-managerによって,外付けディスクを削除しないと,ホストが不安定になることがある.

3.は,コピーにものすごく宇宙的な時間がかかる.安定性は不明.

virtio_scsiでなく,IDEをエミュレートしたほうが無難なようです.

外付けディスクからの起動成功 (KVM 11)

いろいろ試行錯誤の結果,うまくいきました.仮想マシンのKernelでvirtio_scsiが必要です.Kernelに焼き込んでも良いのですが,一応initrdにしました.例によって,依存のある他のmoduleを順序正しくloadする必要があります.とりあえずうまくいったのはこの順番でロードしました.

virtio.ko
virtio_ring.ko
virtio_pci.ko
virtio_scsi.ko

virtio_pciが必要なのかどうかは解りません.まあ,動けば良いんです^^;

virt-managerで既存のディスクとして,ホストで見たとおり,/dev/sde等として追加登録します.

ゲスト(仮想マシン)のkernelがvirtioをサポートしていれば,2番目のディスクならば/dev/sdbとして見えます.あとは,fstab等の修正をすれば良いわけです.

この起動可能な外付けディスクは,一部設定を変えれば,仮想マシンでなく,実マシンのboot driveとしても使えますね.

これで可能性が非常に広がりました.

外付けディスクをつなぐ (KVM 10)

NBDによる,仮想マシンのディスク操作は危険を伴うものでした.

これに変わる方法は何かないかと思っていましたが,ディスクイメージでなく,実ディスクをKVMから直接アクセスできれば,と思って調べてみたら,当然のようにできるようです.

今,USB3で接続した外付けディスクを,仮想マシンからマウントして,ディスクイメージ内のディスクを全部rsyncでコピーしてみています.コピーした外付けドライブから起動までできれば,

  1. ディスクイメージの内容を外付けドライブにコピー
  2. 外付けドライブの内容をホストマシンなどでいじる
  3. 外付けドライブを仮想マシンにつないで仮想マシンを外付けドライブから起動
  4. 外付けドライブの内容をディスクイメージにコピーバック

という,メンテナンス方法が可能と思われます.同じディスクを使えば,1と4の所要時間は2度目からはうんと短くなります.

試してみます.

NBDはけっこう危険 (KVM 9)

KVMのディスクイメージをホストやその他のマシンでマウントしていじることができます.そのために,nbdというKernel moduleと,qemu-nbdというツールが必要です.

どうしようもなくなった仮想マシンを修復したり,実機をクローニングして仮想マシンに仕立てるようなときに非常に便利です.しかし,どうしたことか,これらを使ってマウントした仮想マシンのディスクイメージにrsync等を使って大量にファイルの読み書きをかけると,Kernel panicに陥る可能性が非常に高いです.

ということで,いつ止めても良いようなWork Stationでいじるのが無難と思います.わが家にはそういう遊軍マシンがないので^^; メインのサーバー兼ルーターがWSも兼ねていて,何度か止めて案配悪かったです.

やっぱり実マシンのLinux WSは必要ですね^^;;