上の例では、RAID-5を構成するディスクのうち、1台に障害が発生した場合の例を示した。では2台以上のディスクに障害が発生するとどうなるであろうか。Windows OSのRAID-5では、ディスクの冗長度は1台分しかないため、試すまでもなく失敗することは容易に想像できるが、一応やってみよう。
先ほど修復したRAID-5ボリュームに対し(ディスクは3台ある)、2台目と3台目のディスクをdiskpartのcleanコマンドで消去したのが次の画面である。
「ディスク 2」と「ディスク 3」が消去されたディスクである。「初期化されていません」という状態になっている。「ディスク 1」は元のままだが、状態が「冗長の失敗」ではなく、単に「失敗」となっている。またドライブ名は消失し、ボリューム全体がアクセス不可能になっている。また一番下に表示されている仮想的なエラーを表すドライブ(「不足」「ダイナミック」)も2台分ある。
この状態で可能な操作は、ポップアップ・メニューを見ると分かるように[ボリュームの再アクティブ化]か[ボリュームの削除]だけである。修復することはもはや不可能だ。
[ボリュームの再アクティブ化]は前回「ストライプ/スパン・ボリュームを構成するディスクに障害が発生するとどうなる?」で述べたように、一時的に外していたディスクを再接続するときに利用するメニューである。新規のディスクを接続して、ボリュームを初期化したり、再構成したりするときに使うものではない。実行しようとしても、次のような画面が表示され、元のディスクを接続するように促される。
このような事態になる前に、ディスクの1台に障害が発生した時点で管理者は適切な対応(ディスクの交換など)をとる必要がある。
上の例では2台以上に障害が発生した場合を見てきたが、では全ディスクに障害が発生するとどうなるだろうか。仮想環境なら、こういうテストも簡単にできるので、試しておこう。
RAID-5を構成する全ディスク(3台分)に対して、diskpartのcleanコマンドを実行したのが次の画面である。
先ほどの画面と比べると、RAID-5ボリューム(水色のバー)がまったく何も表示されていない点が異なる。エラーの表示もない。これは、RAID-5(やミラーやストライプ)などのボリューム情報は、各ディスクの先頭に分散して保存されているということを表している。Windows OSのシステム・パーティション内だけを保存しておいても、ボリュームの情報は保存されないので、注意する必要がある。仮想ディスクの場合なら、ボリュームを構成する仮想ディスク・ファイルはまとめて保存や移動をする必要があるだろう。
最後にディスクの署名データとその競合について触れておく。
ディスクの先頭には「署名」データと呼ばれる、4bytesのユニークなIDデータが記録されている(フロッピー・ディスクやディスク・ボリュームの「ボリューム シリアル 番号」と同じようなもの)。Windows OSはこの署名データを見て、どのディスクがシステムに接続されているかを判別している。たとえ同じ型番のディスクや、同じ内容を保存したディスクを使っていても、この署名データによって別のディスクであることを認識している。もし署名データがなければ、同じ構成のハードディスクの内容を取り違えたり、間違ってアクセスしたりしてしまう可能性がある。
ディスクの署名データは、ディスクの先頭セクタのオフセット+0x01B8に記述されており、例えばdiskpartのdetail disk/uniqueid diskコマンドや、TIPS「ディスクのパーティション・テーブルを調査する」に記した方法などで確認できる。
仮想マシンを利用する場合、.VHDファイルをコピーして仮想ディスクを用意することがあるが、これは注意しなければならない。この方法だと、同じ署名データを持つ仮想ディスクがどんどん増えてしまうからだ。もしこうやって作成した仮想ディスクを同じ仮想マシンに接続すると、同じ署名データを持つディスクが競合することになる。Windows OSでは、同じ署名データを持つディスクを検出すると、2台目以降のディスクを無効(オフライン)にして、アクセスできないようにする。まずはこれを確認してみよう。
以下の例は、1つの仮想ディスク・ファイルをコピーして計3つ作成し、1台のWindows Serverマシンに接続して起動したところだ。オリジナルのディスクには2つのパーティションがあるため、正しく動作していれば、全部で6つの追加ドライブが表示されるはずである。だが追加した3つのディスクのうち、後ろの2つ(ディスク2とディスク3)はオフラインになっていることが分かる。
イベント・ビューアには「ディスク 2 のディスク署名は、ディスク 1 のディスク署名と同じです。」などと言った警告メッセージが記録されている。
では実際の署名データを見てみよう。diskpartコマンドを起動し、「select disk 1」のようにしてディスクを選択後(ディスクは先頭から0、1、2、3、……と数える)、「detail disk」や「uniqueid disk」コマンドを実行すると確認できる。ただしuniqueidコマンドは古いWindows OSでは利用できないことがある。
C:\>diskpart ……コマンドの起動
Microsoft DiskPart バージョン 6.1.7600
Copyright (C) 1999-2008 Microsoft Corporation.
コンピューター: W2008R2STD0001
DISKPART> select disk 1 ……ディスク1の選択(C:はdisk 0)
ディスク 1 が選択されました。
DISKPART> detail disk ……ディスク・データの確認
Msft Virtual Disk SCSI Disk Device
ディスク ID: 95E1458D ……署名データ
種類 : SCSI
状態 : オンライン
パス : 0
ターゲット : 0
LUN ID : 0
場所のパス : UNAVAILABLE
現在の読み取り専用状態: いいえ
読み取り専用 : いいえ
ブート ディスク : いいえ
ページ ファイル ディスク : いいえ
休止状態ファイル ディスク : いいえ
クラッシュ ダンプ ディスク : いいえ
クラスター化ディスク : いいえ
Volume ### Ltr Label Fs Type Size Status Info
---------- --- ------- ---- --------- ----- ------ ----
Volume 2 D VOLUME1 NTFS Partition 31 GB 正常
Volume 3 E VOLUME2 NTFS Partition 32 GB 正常
DISKPART> select disk 2 ……ディスク2の選択
ディスク 2 が選択されました。
DISKPART> detail disk ……ディスク・データの確認
Msft Virtual Disk SCSI Disk Device
ディスク ID: 95E1458D ……署名データ。ディスク1と同じ
種類 : SCSI
状態 : オフライン (署名の競合) ……署名データの競合
パス : 0
ターゲット : 0
LUN ID : 1
場所のパス : UNAVAILABLE
現在の読み取り専用状態: いいえ
読み取り専用 : いいえ
……(以下省略)……
追加したディスクの署名データは「95E1458D(16進数で8桁)」で、同じになっていることが分かる。仮想ディスクの内容を直接調査する場合は、.VHDファイルの内容を16進数でダンプ出力し、ディスクの先頭セクタのデータを調査すればよいだろう。
ディスクの署名データが衝突した場合は、まったく別の署名データに変更する必要がある。とはいえ、操作は簡単である。オフラインになっているディスクを右クリックし、ポップアップ・メニューから[オンライン]にするだけで、自動的にユニークになるような署名データに更新されるはずである。ただしOSによってはこの方法が使えないことがあるので、その場合は改めてディスクを作成し直すか、diskpartのcleanコマンドでディスクの情報を削除後、ディスクを初期化する(初期化では自動的にユニークな署名データが書き込まれる)。
コマンド・プロンプト上で作業する場合は、diskpartで「uniqueid disk id=12345678」のように実行することで、直接変更することもできる(古いWindows OSではこのコマンドはサポートされていない)。
Copyright© Digital Advantage Corp. All Rights Reserved.