Windows NASの可用性をいろいろと試したくて――仮想マシンにNAS環境を再現する方法山市良のうぃんどうず日記(208)

最近、「Windows Server IoT 2019 for Storage」搭載NASを試用する機会がありました。ディスク障害からの回復性をいろいろと試してみたいのですが、実機で試すにはリスクがありますし、時間もかかります。そこで、仮想マシンに同様の環境を再現して、そちらで試してみることにしました。その詳細を、今回と次回の2回にわたってお伝えします。

» 2021年06月09日 05時00分 公開
[山市良テクニカルライター]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

「山市良のうぃんどうず日記」のインデックス

山市良のうぃんどうず日記

Windows標準のソフトウェアRAIDは、古くて枯れた技術

 試用した2台(2ドライブモデルと4ドライブモデル)の「Windows Server IoT 2019 for Storage」搭載NAS(Network Attached Storage)は、Windows標準の「ダイナミックディスク」を利用したソフトウェアRAIDと、メーカー独自のRAID管理ツールを採用しています。先に言っておくと、「Windows 2000」で初めて登場したダイナミックディスクは、「Windows 10 バージョン2004」および「Windows Server, version 2004」で開発終了扱いとなり、Windowsの将来のリリースで「記憶域スペース(Storage Spaces)」に完全に置き換わることが予告されています。

 2ドライブモデルは、OSボリューム(C:)とデータボリューム(D:)の両方がRAID-1で2台のディスク間でミラーリングされています(写真1画面1)。4ドライブモデルは、OSボリューム(C:)がRAID-1で2台のディスク間でミラーリングされ、データドライブ(D:)はRAID-5で4台のディスク間でパリティ付きで冗長化されています。どちらのモデルも1台のディスク障害からOSボリュームとデータボリュームが保護されています(以降、4ドライブモデルは本稿では登場しません)。

写真1 写真1 試用したWindows Server IoT 2019 for Storage搭載NASの2ドライブモデル。オンラインでディスクの交換が可能
画面1 画面1 2ドライブモデルのNASのディスク構成。ダイナミックディスクのソフトウェアRAIDで、OSボリューム(C:)とデータボリューム(D:)がミラーリングされている

 このボリュームの冗長化保護は、Windowsのダイナミックディスクを利用したソフトウェアRAIDと、メーカー独自のRAID管理ツールで実現されています。工場出荷時は画面1のようなRAID構成ですが、「マルチディスクモード」に切り替えることで、記憶域スペースで冗長化して保護するように構成することも可能です。

 ただし、記憶域スペースを使用してOSボリュームを保護することはできません。このNASのOSボリュームの保護機能を利用したい場合は、工場出荷時(既定)のRAID構成のままで使った方がよいと思います。あるいは、ミラーリングで保護する代わりに、システムのフルバックアップを取得して、ベアメタル回復できるように準備します。

 さて、工場出荷時のRAID構成で、本当に1台のディスク障害からOSボリュームやデータボリュームが保護されるのか、どのように保護されるのか、NASの導入を検討している方には気になるところでしょう。実機でディスクを脱着してみれば確認できるのですが、試用機のディスクに回復不能な重大なハードウェア障害が発生するリスクがあるため、安易に試したくはありません。また経験上、ソフトウェアRAIDは再構築に数時間かかることも知っています。

 そこで、Hyper-Vの仮想マシン環境に、ソフトウェアRAIDの環境を構築して試してみることにしました。しかし、ダイナミックディスクのソフトウェアRAIDですが、筆者自身、Windows 2000で登場したときに構築したことがあったような気がする程度で、どのように構築するのか、どのように機能するのかよく知りません。

 当時と現在では、ハードウェアの仕様も様変わりしました。当時はBIOSベースのシステムが主流でしたが、現在はUEFIのシステムが主流です。開発終了扱いとなった枯れた技術であるため、最新バージョンのOSに対応したドキュメントなんてありません。何とか見つけた「Windows Server 2012 R2」以前向けに作成された以下のドキュメントを参考に、トライ&エラーでやってみることにしました。

NASと同等のパーティション構成でWindows Server 2019を新規インストール

 Hyper-Vの仮想マシンを新規作成し、NASと同容量の空の仮想ハードディスク(.vhdx)を2つ接続して、「Windows Server 2019」のISOメディアから起動、新規インストールします(画面2)。Windows Server IoT 2019 for Storageは、ソフトウェア的にはWindows Server 2019 Standardエディションと全く同じものであり、ライセンス上、用途やハードウェアに制限があるだけです。今回は、Windows Server 2019評価版のStandardエディション(デスクトップエクスペリエンス)をインストールしました。

画面2 画面2 NASと同容量の仮想ハードディスクを2台割り当てた第2世代(UEFI)仮想マシンを新規作成する

 仮想マシンを起動し、「Windowsセットアップ」が起動したら、[Shift]+[F10]キーを押してコマンドプロンプトを開きます。このコマンドプロンプトで「DISKPART」コマンドを実行し、「DISKPART>」プロンプトで次のようにコマンドを実行して、1台目のディスク(ディスク0)に100MB、FAT32のEFIパーティション、16MBのMSR予約パーティション、100GB、NTFSのプライマリーパーティションを作成します(画面3)。

C:\> diskpart
DISKPART> select disk 0
DISKPART> clean
DISKPART> convert gpt
DISKPART> create partition efi size=100
DISKPART> format quick fs=fat32 label="System"
DISKPART> create partition msr size=16
DISKPART> create partition primary size=102400
DISKPART> format quick fs=ntfs label="Windows"
DISKPART> exit
画面3 画面3 1台目のディスク(ディスク0)に手動でインストール先のパーティションを準備する

 通常は、3番目のパーティションに500MB〜1GB程度の回復パーティションを作成し、「Windows回復環境(Windows Recovery Environment、WinRE)」をそこにセットアップするのですが、今回は回復パーティションを用意しません(WindowsセットアップによりC:\Recovery\WindowsREにセットアップされます)。

 なぜなら、再現しようとしているNASの構成がそうなっていたからです。専用パーティションであれ、C:ドライブであれ、WinREは1台目のディスク(ディスク0)上のものがシステムに登録されるため、1台目のディスクが利用可能でない限り、WinREは利用できません。OSボリュームのミラー構成において、WinRE用に専用の回復パーティションを準備する意味はないと思います。1台目のディスク(ディスク0)が障害で利用できなくても、NAS付属のリカバリーメディアからWinREを起動できるので問題はないでしょう。

 「Windowsセットアップ」に戻り、1台目のディスクの3番目のパーティション(ドライブ0 パーティション3)をインストール先に指定して、「Windows Server 2019 Standard Evaluation(デスクトップエクスペリエンス)」をインストールします(画面4)。

画面4 画面4 手動で作成したプライマリーパーティション(ドライブ0 パーティション3)を指定して、Windows Server 2019をインストールする

 Windows Server 2019のインストールが完了したら、「コンピューター名」やIPアドレスの設定、Windows Updateなどを済ませます。

 仮想マシンの設定を開き、SCSIコントローラーからDVDドライブを削除します。その後、「ディスクの管理」スナップイン(Diskmgmt.msc)を実行して、1台目のディスク(ディスク0)の残りの未割り当て領域全てを使ってNTFSボリュームを作成し、ドライブ文字「D:」を割り当てます(画面5)。

画面5 画面5 ソフトウェアRAIDを構築する前段階までセットアップが完了した

 ここまでの設定で、ソフトウェアRAIDを構築する前段階までのセットアップが完了しました。

シャドウドライブの準備

 続いて、2台目のディスク(ディスク1)をミラーリング用の「シャドウドライブ」として準備します。まず、DISKPARTコマンドで次のコマンドを実行して、ディスク1にディスク0と同じEFIシステムパーティションとMSR予約パーティションを作成し、EFIシステムパーティションにドライブ文字「S」を割り当てます。

C:\> diskpart
DISKPART> select disk 1
DISKPART> convert gpt
DISKPART> clean
DISKPART> create partition efi size=100
DISKPART> format quick fs=fat32 label="System"
DISKPART> assign letter=S
DISKPART> create partition msr size=16

 なお、2台目のディスク(ディスク1)を操作する際、「このメディアは書き込み禁止になっています」や「オフラインのディスク上では、この操作は許可されていません」と表示される場合は、以下のDISKPARTコマンドを実行してください。

DISKPART> select disk 1
DISKPART> online disk
DISKPART> attributes disk clear readonly

 次に、以下のDISKPARTコマンドで1台目のディスク(ディスク0)のEFIシステムパーティションにドライブ文字「P」を割り当てます。

DISKPART> select disk 0
DISKPART> select partition 1
DISKPART> assign letter=P

 別のコマンドプロンプトを開き、「XCOPY」コマンドでP:ドライブの内容をS:ドライブに隠しファイルやシステムファイルを含めて全てコピーします。

C:\> xcopy p:\*.* s: /s /h

 筆者が構築した環境では、上記コマンドは「共有違反です」と表示されて失敗しました。代替策として、以下のコマンドラインを実行して、ブート環境をS:ドライブに書き込みました(画面6)。なお、EFIシステムパーティションの内容は、後でWinRE環境から適切なものに入れ替えます。

C:\> bcdboot C:\Windows /l ja-jp /s S: 
画面6 画面6 EFIシステムパーティションの内容のコピーは共有違反で失敗したので、bcdbootコマンドで代用(後で内容は適切なものに置き換える)

 DISKPARTプロンプトのあるウィンドウに戻り、ドライブ文字「P」と「S」を削除します。

DISKPART> select volume P
DISKPART> remove
DISKPART> select volume S
DISKPART> remove

 最後に、次のコマンドを実行して、ディスク1とディスク0をダイナミックディスクに変換し、DISKPARTコマンドを終了して、OSを再起動します。

DISKPART> select disk 1
DISKPART> convert dynamic
DISKPART> select disk 0
DISKPART> convert dynamic
DISKPART> exit
C:\> shutdown /r /t 0

 再起動後、再びコマンドプロンプトを開き、DISKPARTプロンプトで次のコマンドを実行して、1台目のディスク(ディスク0)のC:ドライブとD:ドライブのミラーを、2台目のディスク(ディスク1)にミラーリングします。「ディスクの管理」スナップインを開くと、ミラーが構成されて同期が始まるので、同期が完了するまで待ちます(画面7)。全てのボリュームの同期が完了するまでに、2時間ほどかかりました。

C:\> diskpart
DISKPART> select volume C
DISKPART> add disk=1
DISKPART> select volume D
DISKPART> add disk=1
DISKPART> exit
画面7 画面7 DISKPARTコマンドを使用して、ディスク0のCとDドライブをディスク1にミラーリングする

 OSボリュームをミラーリングすると、1台目のディスク(ディスク0)のEFIシステムパーティションに格納されているブート構成データに「Windows Server - セカンダリプレックス」という起動エントリが追加され、2台目のディスク(ディスク1)から起動できるようになります。

 EFIシステムパーティションはミラーリングされていないため、新しい起動エントリを2台目のディスク(ディスク1)のEFIシステムパーティションのブート構成データにも登録する必要があります。それには、両方のEFIシステムパーティションにドライブ文字を割り当て、XCOPYコマンドでコピーすればよいのですが、共有違反で失敗するという状況に変わりありません。

 そこで、WinREのコマンドプロンプトで起動して、ドライブ文字の割り当てと1台目から2台目のディスクのEFIシステムパーティションへのコピーを実施しました(画面8)。

X:\> diskpart
DISKPART> select disk 0
DISKPART> select partition 1
DISKPART> assign letter=P
DISKPART> select disk 1
DISKPART> select partition 1
DISKPART> assign letter=S
DISKPART> exit
X:\> xcopy p:\*.* s: /s /h
画面8 画面8 WinREのコマンドプロンプトで起動して、1台目のディスクのEFIパーティションのブート環境を2台目のディスクのEFIパーティションにコピーする

 WinREのコマンドプロンプトで起動するには、コンピュータ起動時にブートメニューで[F8]キーを押して「コンピューターの修復」を選択し、「トラブルシューティング」→「コマンドプロンプト」と進みます。または、OS稼働中の状態から「設定」アプリの「更新とセキュリティ」→「回復」を開き、「PCの起動をカスタマイズする」の下にある「今すぐ再起動」をクリックして、「トラブルシューティング」→「コマンドプロンプト」と進みます。

 オプションで、2台目のディスクのブート構成データで「Windows Server - セカンダリプレックス」を既定に変更します。次の最初のコマンドで「Windows Server - セカンダリプレックス」のGUID(identifier)を確認し、2つ目のコマンドで既定に設定します。なお、試用したNASはディスク1の既定の起動エントリも「Windows Server」になっていました。

X:\> bcdedit /STORE S:\EFI\Microsoft\Boot\BCD
X:\> bcdedit /STORE S:\EFI\Microsoft\Boot\BCD /default {GUID}

 WinREのコマンドプロンプトで次のコマンドを実行して再起動を開始し、通常の方法(ディスク0から)で起動します。

X:\> wpeutil reboot

 以上の手順でOSボリューム(C:)とデータボリューム(D:)の2台のディスクによるミラーリングが完了しました。次回は、ディスクの削除など、いろいろと試してみます。

筆者紹介

山市 良(やまいち りょう)

岩手県花巻市在住。Microsoft MVP:Cloud and Datacenter Management(2020-2021)。SIer、IT出版社、中堅企業のシステム管理者を経て、フリーのテクニカルライターに。Microsoft製品、テクノロジーを中心に、IT雑誌、Webサイトへの記事の寄稿、ドキュメント作成、事例取材などを手掛ける。個人ブログは『山市良のえぬなんとかわーるど』。近著は『Windows版Docker&Windowsコンテナーテクノロジ入門』(日経BP社)、『ITプロフェッショナル向けWindowsトラブル解決 コマンド&テクニック集』(日経BP社)。


Copyright © ITmedia, Inc. All Rights Reserved.

スポンサーからのお知らせPR

注目のテーマ

Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。