部室の旧PCを仮想化した話

2024/04/15

こんにちは、山田ハヤオです。

大学では情報メカトロニクス研究部に所属しているのですが、その部室にあった古いPCを仮想化したのでその記録です。

状態

データHDD

Dドライブとして使われていたデータ用のHDDは正常値で生きていました。が、使用時間が非常に長い(おそらくサーバとして運用されていた)のでデータを救出しました。

このデータはドキュメントデータだったのでrsyncで中身のみを新しいHDDに移動しました。

OS

こちらのOSの入ったHDDは不良セクタが増えており非常にまずい状態でした。Windows VistaからWindows 10にアップグレードしていたようで、ブート方式はMBR。

新しいPCで組んだとしてもGPT形式への移行は面倒だということで、仮想化を行うという決断に至りました。

仮想化の手順

今回は無料で使えるということでVirtualBoxへの移植を行います。手順としては以下のとおりです。

なお、作業用OSとしてArch Linuxを使用しています。

ddでRAWイメージを抽出

MBRを含めた全データをファイルにダンプしていきます。

sudo dd if=/dev/sdx of=./imrc-os.img status=progress

これで中身が全部imrc-os.imgに格納されます。サイズが500GBもあるので、取り扱いに要注意です。

status=progressで進捗状況をリアルタイムで確認できるようになります。

もしこのコマンドラインオプションをつけ忘れてしまった場合はprogressコマンドで進捗を確認することができます。

qemu-imgでVDI形式に変換

仮想マシンで起動できるよう、img形式をVDI形式に変換していきます。

変換前と変換後で2つのファイルができあがることになるので、最低でも1TB以上のディスクが必要になります。今回は2TBのSSD上で作業を行いました。

qemu-img convert -O vdi ./imrc-os.img ./imrc-os.vdi

作業後はimgファイルは削除してしまいましょう。

起動テスト

完成したVDIを用いて仮想マシンを作成し、起動します。

Windows 10

ハードウェア変更が行われているため、ライセンス認証が消えてしまったり初回起動でBSoDになったりします。

Windows 7以前ではマザーボードレベルで変更を行ったあとに起動するにはレジストリを操作する必要があったのですが、Windows 8以降はそれが不要になっています。

今は亡きWindows To Goあたりで改善されたのかもしれません。

ゼロ埋め

この作業はゲストOSで行います。

このままでは仮想ディスクが500GBもあり、非常に扱いにくいので縮小作業を行います。

まずはデフラグを行い、断片化している情報を整理します。古いPCからのためか結構時間がかかりました。

ゲストOSのWindowsを起動して、sdeleteコマンドを使えるようにします。

その後、管理者権限で以下のコマンドを実行します。

sdelete -z C:

これによって使用されていない領域に0が書き込まれます。

コマンドが完了したらゲストはシャットダウンしておきます。

縮小作業

ゼロ埋めが終わったら縮小作業に入ります。VirtualBoxでUUIDを調べた後、以下のコマンドで縮小を行います。

VBoxManage modifyhd HOGEHOGEUUID --compact

これでファイルサイズが一気に60GB台まで減少しました。

余談

VirtualBoxはかなりポータビリティが低いので、結局VMwareに変換しました。

qemu-img -O vmdk ./imrc-os.vdi ./imrc-vmdk

終わり

久しぶりに仮想マシン周りのコマンドを触りました。

この辺の知識はエンタープライズな環境でも使えるように色々とアップデートしていかないとなと思いました。(小並感)