treedown’s Report

システム管理者に巻き起こる様々な事象を読者の貴方へ報告するブログです。会社でも家庭でも"システム"に携わるすべての方の共感を目指しています。

※https化しました。その影響でしばらくリンク切れなどがあるかもしれませんが徐々に修正していきます。 リンク切れなどのお気づきの点がございましたらコメントなどでご指摘いただけますと助かります。

VHDファイルで単一ドライブ環境に2ndドライブを用意する

外付けHDDのドライブレターを維持したまま、内蔵ドライブ(c:)に移行したいということがあったので、やってみたことをご報告です。
二種類の方法のがあったので今回はVHDでファイルをドライブ化します。

やりたいこと

実際の環境を詳しく詳説できないので概要を記載します。

  • Windows11/10環境
  • 従来はUSB経由などの外付けHDDで稼働していたアプリケーションを移行
  • 移行に当たり、内蔵ドライブがSSD化されたのでc:\に移行したい
  • 外付けHDDはC:以外のドライブレターで動作していたので心配
  • アプリの稼働していたドライブレターを維持すればいいんじゃないか

こういった時にsubstの出番だと思いついたのが発端です。

しかしsubstより簡単な方法がある

あとから思い出したのですが、Windows11/10環境ではVHDファイルを使うことで、substより容易にドライブを用意することができます。最初の思いつきはsubstコマンドだったのですが、VHDファイルを使った方が単純で分かりやすいのでVHDファイルで用意する方法を検証して記事にしました。

ただ、今回実施した方法はテスト環境のWindows10でVHDファイルを外付けドライブのように使えるようにした手順なので、実際に実施した手順と異なりますが、内容は参考までにご覧ください。

VHDファイルを作成する

VHDを生成してマウントしたほうがsubstより簡単、その手順です。

ドライブがC:とS:が存在するWindows環境で試してみます。C:\はSSDでS:\はHDDと仮定します。

この状態から、Sドライブのデータを全てバックアップし、HDDの取り外しをします。

Sドライブがなくなったここから手順がスタートです。

まずは「ディスクの管理(diskmgmt.msc)」を起動します。

メニューを開いて、

「操作」から「VHDの作成」をクリックします。そうすると次の画面が起動してきます。

この画面で、VHDを作成していきます。まずはVHDファイルの保管場所をC:\上に用意します。

今回は<C:\VHDdrive>というフォルダを用意して、その中に<S_drive.vhd>というファイル名のVHDファイルを作成しました。また仮想ハーディスクのサイズは64GBで試してみました。

「仮想ディスクフォーマット」はVHDとVHDXで選択可能です。今回は容量の少ないVHDファイルなので旧式のVHDファイルで生成しましたが、VHDXの方が優位な環境もあります。

「仮想ハードディスクの種類」は、「容量固定」と「可変容量」の二つの選択肢があります。「容量固定」が推奨されますが、VHDファイルを作成した時点で指定した容量が作成したドライブ内で消費されてしまいますので、(今回はテストということもあり)「可変容量」を選択しました。(フラグメント化やアクセススピードの面で実環境では容量固定のほうがメリットが多いはずです。)

これらのオプションを指定した画面が下記です。

OKボタンをクリックしてVHDを作成します。

作成すると、ディスクの管理画面では自動的に作成したVHDファイルがマウントされました。

画面上の「ディスク1」(初期化されていません状態のディスク)が作成したVHDファイルです。

指定したパスには、

生成したVHDが保管されていることが確認できました。

VHDファイルにドライブレターを割り当ててHDDのように使う

ドライブとして使えるようにするには、通常のHDDと同様初期化する必要があります。

引き続きディスクの管理画面から、新たにマウントされたVHDファイルであるディスク1を右クリックし、

メニューから「ディスクの初期化」でパーティションを作成できるようにします。

ディスクの初期化画面では、

このように表示されますので、パーティションスタイルを選択してOKボタンで実行します。(今回は容量の少ない旧環境と互換性のあるMBRを選択しています。)

初期化が完了すると、

ディスク1がオンラインになるので、パーティションが作成できるようになっています。未割り当てとなっているパーティションの箇所を右クリックして、「新しいシンプルボリューム」を選択します。

新しいシンプルボリュームウィザードが開始するので、通常のディスクをフォーマットするときのように画面を進めていきます。その際に、

ドライブレターを指定する画面で、以前使っていたのと同じドライブレターを指定するようにします。(ここではS:ドライブを指定しています。)

これで作成完了です。処理が完了すると、

ディスクの管理画面では、VHDファイルをマウントしたドライブが使えるようになっています。エクスプローラ上でも、

このように、VHDファイルで用意したSドライブが外付けHDDのように使用可能になっています。しかし、このSドライブの実体は、

Cドライブ上<C:\VHDdrive>に保管されたS_drive.vhdファイルです。つまりCドライブがSSDなら(当然ですが)SSDの速度でSドライブの読み書きができます。

あとは、旧Sドライブからバックアップしたデータを新Sドライブ(VHDファイルの方)にデータリストアすることで、SドライブはSSDの速度で読み書き出来る外付けHDDのように使うことができます。

VHDファイルの再接続

これでVHDが外付けHDDのように使えるようになりましたが、Windowsを再起動すると一度マウントされたVHDファイルがマウント解除されてしまいました。あれ?と思いながら、この場合には、以下の手順で接続を復旧させます。

ディスクの管理(diskmgmt.msc)画面からメニューの「操作」⇒「VHDの接続」をクリックします。

実行すると、接続するVHDファイルを指定する画面が表示されます。

ここで、先ほどの<C:\VHDdrive>に保管されたS_drive.vhdファイルを指定します。

VHDを指定したら、OKボタンをクリックして接続開始します。

これでディスクがマウントされます。

しかし、再起動するとこのディスクのマウント解除は毎回実施されてしまいます。これは具合が悪いので、永続的にVHDをマウントするように一手間加えておきます。

OSの起動時にVHDファイルをドライブとしてマウントする(永続的)

Windowsを起動した時に、今回指定した<C:\VHDdrive\S_drive.vhd>は必ずSドライブとしてマウントするように設定します。

設定はタスクスケジューラ(taskschd.msc)で実行します。

タスクスケジューラを起動し、「タスクの作成」をクリックします。

タスクの作成ウインドウが表示されたら、名前を分かるような名前で設定し、「セキュリティオプション」で「ユーザがログオンしているかどうかにかかわらず実行する」と「最上位の特権で実行する」と、構成:「Windows10」を選択します。

次の画面はタブで「トリガー」をクリックして選択します。画面上の「新規」をクリックして、

「スタートアップ時」を選択して、システム起動時にこのタスクが実行されるように仕掛けます。

次は「操作」タブをクリックして開きます。画面上の「新規」をクリックして、

上記画面の

プログラム/スクリプト欄 : powershell.exe
引数の追加(オプション)欄 : Mount-DiskImage "C:\VHDdrive\S_drive.vhd"

と入力します。

タスク画面の「操作」タブは以下のような表示になります。

これで全ての設定が完了したので、画面上の「OK」ボタンをクリックして、タスクを実行するユーザIDとパスワードを入力、タスクを有効化します。

これでタスクが生成できました。

このタスクが正常動作するか、Windowsを再起動して動作を確認してみます。

OSの再起動後にも自動的にVHDがマウントされ外付けドライブのようにマウントされた状態でWindowsが起動してくるようになりました。これで外付けHDDと同じ感覚でVHDファイルで用意したHDDドライブが使用できるようになります。