最近、「Windows Server IoT 2019 for Storage」搭載NASを試用する機会がありました。ディスク障害からの回復性をいろいろと試してみたいのですが、実機で試すにはリスクがありますし、時間もかかります。そこで、仮想マシンに同様の環境を再現して、そちらで試してみることにしました。その詳細を、今回と次回の2回にわたってお伝えします。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
試用した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ドライブモデルは本稿では登場しません)。
このボリュームの冗長化保護は、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」以前向けに作成された以下のドキュメントを参考に、トライ&エラーでやってみることにしました。
Hyper-Vの仮想マシンを新規作成し、NASと同容量の空の仮想ハードディスク(.vhdx)を2つ接続して、「Windows Server 2019」のISOメディアから起動、新規インストールします(画面2)。Windows Server IoT 2019 for Storageは、ソフトウェア的にはWindows Server 2019 Standardエディションと全く同じものであり、ライセンス上、用途やハードウェアに制限があるだけです。今回は、Windows Server 2019評価版のStandardエディション(デスクトップエクスペリエンス)をインストールしました。
仮想マシンを起動し、「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番目のパーティションに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)。
Windows Server 2019のインストールが完了したら、「コンピューター名」やIPアドレスの設定、Windows Updateなどを済ませます。
仮想マシンの設定を開き、SCSIコントローラーからDVDドライブを削除します。その後、「ディスクの管理」スナップイン(Diskmgmt.msc)を実行して、1台目のディスク(ディスク0)の残りの未割り当て領域全てを使ってNTFSボリュームを作成し、ドライブ文字「D:」を割り当てます(画面5)。
ここまでの設定で、ソフトウェア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:
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
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
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.