none
Windows10Pro (1709)での記憶域パリティReFSボリュームがアクセスできなくなった RRS feed

  • 質問

  • 以前のバージョンのWindows10にて記憶域プールのパリティを作成し、ReFSでフォーマットし使っていましたが、ファイルコピー中に特にエラーも表示されないままPCが再起動し、その後そのボリュームにアクセスできなくなりました。

    エクスプローラーからドライブは見えていますが容量などの詳細は表示されず、アクセスしようとすると「ボリュームの修復に失敗しました」と表示されます。

    なおディスクの管理のFileSystemではRAWと表示されています。

    イベントビューアでは数日前から

    (1)「デバイス \Device\Harddisk10\DR10 に不良ブロックがあります。」

    が記録されていましたが、普段は画面も表示させずファイル置き場として使っていたので通知があったかどうかはわかりません。
    (思えばネットワーク越しのファイルコピーが妙に遅かった気はします)

    その後アクセスできなくなってからは以下のエラーが記録されていました。

    (2)「ボリューム  ReFS でフォーマットされていますが、ReFS はこのボリュームをマウントできません。ReFS は状態 ボリュームの修復に失敗しました。 に遭遇しました。」
    (3)「ファイル システムはチェックサム エラーを検出しましたが、そのエラーを修正できませんでした。ファイルまたはフォルダーの名前は "Container Table" です。」
    (4)「ファイル システムはチェックサム エラーを検出しましたが、そのエラーを修正できませんでした。ファイルまたはフォルダーの名前は "Duplicate Container Table" です。」

    が記録されていましたが、再起動後の記憶域の管理では特に何のエラーもなくOKのままでした。

    イベントログではシリアルがわからず、記憶域の管理では全部OKなので、認識順などからあたりを付けてエラードライブを記憶域から削除したところ、(1)のエラーは出なくなりましたがその他は引き続き記録されており、ボリュームは回復しません。

    ・記憶域パリティでは一つのドライブが故障してもデータは守られるのではないのか?
    ・現にエラーを起こしているドライブが含まれているのになぜ記憶域の管理でOKになっているのか?

    実装に問題があるようにも思えますが、なんとか再びボリュームにアクセスしてファイルを取り出すことはできないでしょうか?

    2017年11月28日 9:28

すべての返信

  • データ取り出すだけなら refsutil salvage というコマンドがv1709から標準装備されてます。
    色々オプションがありますがとにかくデータだけ取り出せという場合は -FA だけ使えばよいです。

    Microsoft ReFS Salvage [Version 10.0.11070]
    Copyright (c) 2015 Microsoft Corp.
    
    重度に破損した ReFS ボリュームを診断し、残りのファイルを特定してそのファイルを別のボリュームに
    コピーする操作を試行します。
    
    ReFS のサルベージは診断、スキャン、コピーの 3 つのフェーズで処理されます。
    進行状況とログは作業ディレクトリに保存されます。これにより 3 つのフェーズを個別に実行し、スキャン フェーズを中断/再開することが可能になります。
    以下のコマンド ライン オプションを参照してください。
    
    診断フェーズのコマンド ライン オプション:
       refsutil salvage -D <ソース ボリューム> <作業ディレクトリ> <オプション>
    
       <ソース ボリューム> が ReFS ボリュームであるかどうか、
       またボリュームがマウント可能であるかどうかの確認を
       試行します。ボリュームがマウント可能ではない場合、
       その理由が特定されます。
    
    クイック自動スキャン モードのコマンド ラインの使用法:
       refsutil salvage -QA <ソース ボリューム> <作業ディレクトリ> <ターゲット ディレクトリ> <オプション>
    
       ReFS サルベージの 3 つのフェーズのすべてを連続して実行します。
    
    完全自動モードのコマンド ライン使用法:
       refsutil salvage -FA <ソース ボリューム> <作業ディレクトリ> <ターゲット ディレクトリ> <オプション>
    
       ReFS サルベージの 3 つのフェーズのすべてを連続して実行します。
    
    クイック スキャン フェーズのコマンド ライン オプション:
       refsutil salvage -QS <ソース ボリューム> <作業ディレクトリ> <オプション>
    
       回復可能な任意のファイルを対象にした <ソース ボリューム> のクイック スキャン。
       検出されたファイルのログは <作業ディレクトリ> の 
       "foundfiles.<ボリューム署名>.txt" に記録されます。
    
    フル スキャン フェーズのコマンド ライン オプション:
       refsutil salvage -FS <ソース ボリューム> <作業ディレクトリ> <オプション>
    
       回復可能な任意のファイルを対象にした <ソース ボリューム> のスキャン。スキャン フェーズを
       実行する前に診断フェーズを完了する必要があります。検出されたファイルのログは 
       <作業ディレクトリ> の "foundfiles.<ボリューム署名>.txt" に記録されます。
       以前にスキャン フェーズを停止していた場合、-FS フラグを指定すると残りのスキャンが
       再開されます。
       
    コピー フェーズのコマンド ライン オプション:
       refsutil salvage -C <ソース ボリューム> <作業ディレクトリ> <ターゲット ディレクトリ> <オプション>
    
       スキャン フェーズで検出されたすべてのファイルを <ターゲット ディレクトリ> にコピーします。
       スキャン フェーズを完了する前に手動で停止している場合も、コピー フェーズでは
       スキャンが停止した時点までに特定されたすべてのファイルをコピー
       できます。
    
    リスト コマンド ライン オプションを使用したコピー フェーズ:
       refsutil salvage -SL <ソース ボリューム> <作業ディレクトリ> <ターゲット ディレクトリ> <ファイル リスト> <オプション>
    
       <file list> 内のすべてのファイルを <ソース ボリューム> から <ターゲット ディレクトリ> にコピーします。
       <file list> 内のファイルは先にスキャン フェーズで特定しておく必要がありますが、
       スキャンの実行は必ずしも完了していなくてもかまいません。
       <file list> は、"foundfiles.<ボリューム署名>.txt" を新しいファイルにコピーして、
       回復する必要がないファイルを参照している行を削除し、回復する必要があるファイルを維持
       することによって生成できます。PowerShell の Select-String コマンドレットは、
       "foundfiles.txt" をフィルター処理して目的のパス、拡張子、ファイル名のみを
       含める場合に便利です。
    
    対話コンソールを使用したコピー フェーズ:
       refsutil salvage -IC <ソース ボリューム> <作業ディレクトリ> <オプション>
    
       対話コンソールでのサルベージ ファイルの操作 (上級ユーザー向け)
    
    
    パラメーターの定義:
    
    <ソース ボリューム>         処理する ReFS ボリューム。
    <作業ディレクトリ>     一時的な情報やログを保存する場所。
                            <ソース ボリューム> 上に存在する必要はありません。
    <ターゲット ディレクトリ>      特定したファイルのコピー先。
                            <ソース ボリューム> 上に存在する必要はありません。
    <オプション>
       -m                   削除されたファイルを含め、回復可能なすべてのファイルを回復します。
                            このオプションは refsutil salvage v1 では無視されます。
                            警告: このオプションを指定すると時間がかかり、
                            予期しない結果になる場合があります。
       -v                   詳細モード
       -x                   必要があれば、先にボリュームのマウントを強制的に解除します。
                            ボリュームへ開かれたすべてのハンドルは無効になります。
    
    例: refsutil salvage -QA R: N:\WORKING N:\DATA -x
    2017年12月16日 2:33
  •   確かに、記憶域プールの物理ディスク障害に対するアラートは弱い印象を私も持っています。

     現在の状態は、仮想ディスクのデータを保存する記憶域プール内の物理ディスクに障害が発生したため、仮想ディスクのデータ保護のために、ディスクが読取専用かつオフラインになっているものと想像します。

    Get-StoragePool | FL *
    Get-VirtualDisk | FL *
    Get-VirttualDisk | Get-PhysicalDisk | FL *
    Get-Disk | FL *
    

      の結果を見せていただけると、状態がよりクリアになると思います。

     データの救出だけれあれば、ディスクのオフライン状態をオンラインにすることで、データの読出しは可能になると思います。

      以下のコマンドで、オフラインをオンラインに変更できると思います。

    Get-VirltualDisk | Get-Disk | Set-Disk -Isoffline $false

      Ver 1709になってから、仮想ディスクの修復に失敗してその後修復できないケースが海外でも国内でも散見されていますので、問題解消には少し時間が必要かと思いますが、まずデータの取り出しには上記が参考になりませんでしょうか。


    Masahiko Sada
    Microsoft MVP for Cloud and Datacenter Management http://satsumahomeserver.com

    2017年12月17日 6:13