仮想マシン環境構築 Win7&Win8.1編

というわけで続きネタです。MainPC側の環境構築がだいぶ完了したので仮想マシン側もこのタイミングで再度環境構築をしようと思いましていろいろとやっていました。ちなみに、この環境構築が入るまで仮想マシン側は(サポート期限が切れた)WinXPだったわけです。ネットに接続はせず、実行テストなどの領域なのでそこまで問題は無いのでは?とは思っていましたが、さすがにWinXPだと今度は仮想ハードウェアのサポートが弱くなる関係で一部のゲームを動かすことができないという現象が強くなってしまったため、この処理に踏み切りました。

一応この記事では仮想マシン構築に関してある程度汎用的に書きますが構築はKVMおよVMwareで行っているためそれに依存した項目も出てきます。これらの環境で構築してみたい人であれば参考になるかもしれません。

 

Win7とWin8.1に必要な仮想ハードウェア環境は?

はじめに出てくる面倒な質問文です。といっても問題になるのは基本的に一つだけのはずです。そもそもCPUは(コア数の問題はあるにしても)変えようはないですし、メモリもホスト側が十分な量を実装していればそこからとるだけなのであまり意味はないですし。だいたい2GBほど与えれば大丈夫でしょうか。

というわけで問題となるのはストレージの容量ということになります。まず先に行っておくと、この記事を書いている段階(2014/08/21)ですと、Win7に必要なWindowsUpdateを当てきると14GB、Win8.1に必要なWindowsUpdateを当てきると11GBが必要となります。最低でもこれを上回らないとインストールすらままなりません。なお、Win7がWin8.1より必要となっているのはServicePack(Win8系ではUpdate)が出たタイミングのためです。一度ServicePackが出ればそのファイルを基準としてパッチデータの累積が始まるのでそのタイミングでパッチファイル群をリセットできるからです。Win7系の場合、今の段階だとServicePackが出てから期間が空いているのでどうしても容量が必要となってしまします。そのため、どちらもですが仮想ディスクファイルを固定サイズにするのであれば20GBほどはほしいところです。

ちなみに私が環境を構築し始めたとき、前の環境がWinXPだった影響でOSの領域が16GBまでしか確保できない状態となってしまいいろいろと大変なことが起こってしまいましたが、その話は後ほど。さらに付け加えるならWindowsUpdateのパッチ群を保存しているWinSxSは削除してはいけません。削除そのものはできなくはないですがその後整合性はとれなくなるのでやらない方がいいです。

一応Linuxで仮想ディスクをファイルで作成するときの方法としてddを使うやり方があります。例として

> dd if=/dev/zero of=hddimage.img bs=16MiB count=1024

とするとhddimage.imgという16GiBの0fillされたファイルができあがります。ちなみに16GiB=16MiB×1024というわけですね。

 

KVMであればドライバディスクを用意しておこう

ちなみに仮想マシンの場合はたいていであればインストールしたときに標準のドライバが入るのである程度の環境は構築できるのですがやはりI/O系の速度が出ないのでデバイスを変更できるのであれば変更する方がいいです。今回はWindowsなので「Windows Virtio Driver」あたりで検索をかければISOイメージが見つかるはずなので手に入れておきましょう。これはインストール後に使います。

 

仮想マシンの基本設定が終わった後のOSのインストールは普通に

KVMでもVMwareでも仮想マシンの環境設定が終わればOSのインストールです。これは普通のOSのインストールなので難しいことはないでしょう。基本的には持っているOSのディスクを一度ISOイメージ化してそれを読み込ませた方が速いのですがイメージ化に時間がかかるようでしたら普通に光学ドライブから直接インストールした方が楽だったりします。

 

まずはドライバを当てきるところから

特にKVM側はちょっと面倒です。だいたいの場合、ストレージドライバはIDEを当ててあるはずですしNICドライバもエミュレーションのものが割り当てられているはずです。これをVirtio経由に変えることである程度速度が改善します。(ちなみにこれは準仮想化の処理になります)

NIC側はエミュレーションからVirtioに変更してドライバを読み込ませればよほどでなければいけるはずです。ストレージ側はちょっと面倒で、そのまま変更するとドライバがないため起動できなくなってしまいます。この場合は一度別に仮想ストレージを作成してそれをVirtioにして起動させることでストレージ用VirtioをOSにインストールすることができます。その後で作成した仮想ストレージを削除してOSを入れた仮想ストレージをVirtioにすればOKです。

 

大量のWindowsUpdateを限られたハードウェアで行うのは要注意

今回陥ったのはWin7で環境を最新まで持って行こうとしたときに起こった出来事。ストレージの容量はぎりぎり(16GB)、メモリもそこまで多くはない(2GB)、さらにWindowsUpdateとして100個ほどのアップデートが・・・という状態で起こりました。

端的にいうと「容量不足を起こした」というやつです。しかもストレージ、メモリともに、です。何が起こったのかというと

  • ストレージ:WindowsUpdateのバックアップに容量がとられて無くなってしまった
  • メモリ:大量のWindowsUpdateが行われたためWindowsUpdate処理を行うTrustedInstaller.exeにメモリをすべて(タスクマネージャ上でプロセスが持って行っていた容量が2GB)とられてしまい「仮想メモリが不足しています」の警告が表示された

です。特にメモリの方が想定外でした。ストレージ側もインストールするたびにディスクのクリーンアップで不必要なファイルを除去しながら進むしかないです。これに関しては「限られたハードウェアでは一度に大量のWindowsUpdateは行ってはならない」という教訓を生むことに・・・。

 

仮想ストレージを可変容量にしてある場合は空き領域に0fillを行えるようにしよう

なぜこれが必要かというと、空き領域に0fillを行うと、仮想マシンをシャットダウンした後、仮想マシン管理でストレージファイルの容量を削減することができるからです。これは0fillがかかっている領域を空き領域と見なして縮められる訳です。これがないとアンインストールを行ってもストレージファイルが大きくなったままで不便だと思います。ストレージファイルサイズが固定の場合や物理ディスクを使う場合はあまり関係がありませんが。

0fillができるフリーソフトというのもあまり数はありませんが、たとえばMicrosoftのWindows Sysinternalsで公開されているツールではSDeleteがあります。コマンドプロンプトタイプですが軽量なので使ってみるといいかもしれません。あと私が使ったことがあるのはdkclearというやつです。こちらはフリーソフトで「空き領域をすべて埋めるようなファイルを作成してそこにデータを書き込む」という方法で0fillができます。どちらでも空き領域は削減できますので用意しておくといいと思います。

 

余っているOSがあれば一度作ってみるといいかも

特に環境を構築した後でストレージの変更を禁止してしまいテスト環境用&臨時のビルド環境構築用に保持するとかなりいい感じだと思います。必要に応じてアップデートを適応させていけば最新の環境でテストできますしね。

 


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

この記事のトラックバック用URL