Windows TIPS
[System Environment]
TIPS   Windows TIPS TOPへ
Windows TIPS全リストへ
内容別分類一覧へ

仮想ディスクをコマンドラインから作成・管理する

解説をスキップして操作方法を読む

デジタルアドバンテージ 打越 浩幸
2010/02/12
対象OS
Windows 7
Windows Server 2008 R2
diskpartコマンドを使えば、コマンドラインから仮想ディスクを作成したり、マウントしたりできる。
仮想ディスクを作成するにはcreate vdiskコマンドを使う。
仮想ディスクをマウントするにはattach vdiskコマンドを使う。

解説

 Windows 7/Windows Server 2008 R2では仮想ディスク・ファイル(VHDファイル)を直接システムにマウントできるようになった。そのためdiskpartコマンドを使えば、コマンド・プロンプト上でも仮想ディスクを作成したり、マウントしたりできるようになっている。本TIPSではその方法について解説する。

操作方法

仮想ディスクを作成する

 コマンドラインで仮想ディスクを作成するには、diskpartコマンドを利用する。Windows 7およびWindows Server 2008 R2以降のdiskpartコマンドでは、仮想ファイルを操作できるように機能が拡張されており、例えば「create vdisk 〜」というコマンドを使って仮想ディスクを作成できる。なおdiskpartコマンドは、管理者として実行したコマンド・プロンプト上で実行していただきたい。

C:\>diskpart …コマンドの起動

Microsoft DiskPart バージョン 6.1.7600
Copyright (C) 1999-2008 Microsoft Corporation.
コンピューター: WIN7X86PC-XKDD1

DISKPART> help create …ヘルプの表示

Microsoft DiskPart バージョン 6.1.7600

PARTITION   - パーティションを作成します。
VOLUME      - ボリュームを作成します。
VDISK       - 仮想ディスク ファイルを作成します。 …仮想ディスクの作成

DISKPART> help create vdisk …ヘルプの表示

    仮想ディスク ファイルを作成します。現在は、VHD 形式のファイルだけがサポート
    されています。

構文:  CREATE VDISK FILE=<"ファイル名"> MAXIMUM=<N> [TYPE={FIXED|EXPANDABLE}]
             [SD=<SDDL 文字列>] [PARENT=<"ファイル名">] [SOURCE=<"ファイル名">]
             [NOERR]
(以下省略)

 仮想ディスクを作成するには、「create vdisk」に続いて作成するVHDファイル名(絶対パスで指定する)と最大サイズ(Mbytes単位。最大2Tbytesまで)を指定する。実験した限りでは、サイズは「2088960(=2040Gbytes)」まで指定可能であった。

 仮想ディスクには容量固定サイズと容量可変サイズ、差分ディスクの3種類があるが、デフォルトでは固定サイズの仮想ディスク(type=fixed)が作成される。容量可変サイズにしたい場合は「type=expandable」を指定する。

DISKPART> create vdisk file="file64gb.vhd" maximum=65536 type=expandable …相対パスを指定して作成

仮想ディスク サービス エラー:
仮想ディスクのパス名は完全修飾パスである必要があります。 …相対パスはエラーとなる

DISKPART> create vdisk file="c:\vhdfile\file64gb.vhd" maximum=65536 type=expandable …絶対パスを指定して容量可変の仮想ディスクの作成

  100% 完了しました

DiskPart により、仮想ディスク ファイルが正常に作成されました。

 差分タイプの仮想ディスクを作成する場合は、親ファイル名を「parent=<親ファイルの絶対パス名>」として指定する。差分ファイルの内部には親ファイル名が絶対パス名で記述されているので、一度作成したら、以後は親ファイルを移動してはいけない。

DISKPART> create vdisk file="c:\vhdfile\newxp.vhd" parent="c:\vhdfile\org\windows xp pro sp3.vhd" …差分ファイルの作成

  100% 完了しました

DiskPart により、仮想ディスク ファイルが正常に作成されました。

仮想ディスクをマウントする

TIPS「Windows 7/Windows Server 2008 R2でVHDファイルを直接マウントする」

 作成した仮想ディスクをシステムにマウントするには、仮想ディスクをselect vdiskで選択した後、attach vdiskでマウントする。現在選択されている仮想ディスクはlist vdiskコマンドで確認できる。最後にcreate vdiskした仮想ファイルは自動的に選択状態になっているので、続けて作業する場合は、select vdiskせず、すぐにattach vdiskしてもよい。

DISKPART> select vdisk file="c:\vhdfile\newxp.vhd" …差分ファイルの作成。ここも絶対パスを指定すること

DiskPart により、仮想ディスク ファイルが選択されました。

DISKPART> list vdisk …現在選択されている仮想ディスクの確認

  仮想ディスク ###  ディスク ###  状態                  種類        ファイル
  ----------------  ------------  --------------------  ----------  --------
* 仮想ディスク 0    ディスク ---  追加済み                  不明          c:\vhdfile\newxp.vhd …現在選択中の仮想ディスク

DISKPART> attach vdisk …現在選択されている仮想ディスクをマウントする

  100% 完了しました

DiskPart により、仮想ディスク ファイルがアタッチされました。

DISKPART> list disk …マウント状態の確認

  ディスク      状態           サイズ   空き   ダイナ GPT
  ###                                          ミック
  ------------  -------------  -------  -------  ---  ---
  ディスク 0    オンライン           931 GB      0 B …HDD
* ディスク 1    オンライン            32 GB  1024 KB …マウントした仮想ディスク

 なおattachコマンドでは、仮想ディスクのマウントはするが、パーティションやボリュームの内容に問題があった場合などでも、エラーとして報告することはしない。attachは実際のコンピュータに例えると、ディスク・ドライブを用意して、電源とディスク・ケーブルを接続することに相当するからだ。ディスク・ドライブ内の論理的な問題については報告しない。

 例えば以下は、同じ署名を持つ2台の仮想ディスク(同じマスタから作成した2つの差分ディスク)をマウントした場合の例である。attach vdiskでは「DiskPart により、仮想ディスク ファイルがアタッチされました。」と表示されるが、実際には次のようなエラーとなり、2台目はドライブとして認識されていない。このようなエラーは、ディスクの管理ツールなどで調査する必要がある。

仮想ディスクの競合の例
同じ親ディスクから作成した2つの差分ディスクをマウント(attach vdisk)した場合の例。diskpartコマンドではエラーとはならないが、このように、2台目の仮想ディスクは利用できない状態になっている。
最初にマウントした差分ディスク。G:ドライブになっている。
次にマウントした差分ディスク。と同じ仮想ディスクをベースにして作成しているが、エラーのせいでオフラインのまま(赤い下向き矢印が表示されている)になっている。
エラーの原因。同じ仮想ディスクを親としているのでディスクの署名(各ディスクを識別するための固有のデータ)が競合している。

仮想ディスクをアンマウントする

 仮想ディスクをアンマウントするには、仮想ディスクのファイルをselect vdiskで選択後、detach vdiskでデタッチする。

DISKPART> select vdisk file="c:\vhdfile\newxp.vhd" …仮想ファイルの選択。ここも絶対パスを指定すること

DiskPart により、仮想ディスク ファイルが選択されました。

DISKPART> list vdisk …状態の確認

  仮想ディスク ###  ディスク ###  状態                  種類        ファイル
  ----------------  ------------  --------------------  ----------  --------
* 仮想ディスク 0    ディスク 1    アタッチされたディスクは開いていません   拡張可能        c:\vhdfile\newxp.vhd

DISKPART> detach vdisk …仮想ファイルを差分ファイルの作成。ここも絶対パスを指定すること

DiskPart により、仮想ディスク ファイルがデタッチされました。

スクリプトで操作する

 diskpartコマンドは、以上のようにインタラクティブに使うほかに、コマンドを記述したファイル(スクリプト・ファイル)を使って、それを自動的に実行させる方法もある。アプリケーションの起動や終了に伴って自動的に仮想ディスクをマウント/アンマウントさせたいといった場面で利用できる。スクリプト・ファイルを利用する場合は、「diskpart /s <スクリプト・ファイル名>」として実行する。End of Article

C:\VHDFILE>type diskpart-script.txt …スクリプトの内容
rem *** create vhd file *** …remはコメント行
create vdisk file="c:\vhdfile\file64gb.vhd" maximum=65536 type=expandable
rem *** mount vhd file ***
attach vdisk

C:\VHDFILE>diskpart /s diskpart-script.txt …スクリプトの実行

Microsoft DiskPart バージョン 6.1.7600
Copyright (C) 1999-2008 Microsoft Corporation.
コンピューター: WIN7X86PC-XKDD1

  100% 完了しました

DiskPart により、仮想ディスク ファイルが正常に作成されました。 …作成

  100% 完了しました

DiskPart により、仮想ディスク ファイルがアタッチされました。 …マウント

「Windows TIPS」


Windows Server Insider フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Windows Server Insider 記事ランキング

本日 月間