トップ回答者
ReFS上に仮想マシンを移動して起動するとエラーが発生する

質問
-
初めまして。初めて書き込みます。
あちこち探し回ったのですが、類似の質問がなかったため質問いたします。Windows Server 2012 R2のHyper-Vで、他のサーバで使用していた仮想マシンをReFS上で起動しようとすると、下記のようなエラーが発生して起動ができません。
「仮想ディスクシステムの制限により、要求された操作を完了できませんでした。NTFS上では仮想ハードディスクファイルの圧縮と暗号化がいずれも解除されている必要があります。ReFS上では、仮想ハードディスクファイルの整合性ビットが設定された状態にしておくことはできません。」
このエラーは、他のサーバ(同じ物理マシンですが、Windows Server 2012を使用しており、今回R2を入れ直しました)で運用されていたVHDを使用して仮想マシンを作成し、起動しようとした場合に限って起こります。
最初はドライブ全体の設定の問題かと思いましたが、エラーが発生するドライブ上に完全に新規に仮想マシンを作成し、VHDを新規に作成してOSをインストールしようとして起動すると、正常に起動が行えます。この新しく作成した仮想マシンは、正常に起動し、OSのインストールが行えて、その後も正常に運用することができます。
つまり、他のサーバで運用されていたVHDファイルをコピーして仮想マシンを作成した場合に限り、ReFS上で上記のようなエラーが起こるのです。エラーが起こるReFSのドライブは、記憶域プール上に構成されたもの、ハードウェアRAID1上に構成されたもの、シングル構成のもの、いずれの場合にも同じようにエラーが起こります。
整合性ビットはReFSのファイルシステムレベルで備わっている機能だと思うので停止できそうにありませんし、新規の仮想マシンでは正常に動作するのも理由が分かりません。
どなたかお知恵を拝借できませんでしょうか。
よろしくお願い申し上げます。
回答
-
整合性はNTFSのEFSや圧縮と同じくファイルの属性によって制御される機能です。
http://blogs.msdn.com/b/b8_ja/archive/2012/01/20/windows-refs.aspx
>最も基本的なレベルでは、整合性はファイルの属性 (FILE_ATTRIBUTE_INTEGRITY_STREAM) です。
>また、ディレクトリの属性でもあります。ディレクトリ内にある場合、属性はそのディレクトリ内に作成されたすべてのファイルおよびディレクトリに継承さ れます。属性解除のコマンドはすでに別の人が出したので割愛。
ただし既にコピーが終わったそのVHDXファイルから属性だけ解除することはできません。
http://download.microsoft.com/download/C/B/3/CB3561DC-6BF6-443D-B5B9-9676ACDF7F75/Application%20Compatibility%20with%20ReFS.docx
>* The integrity status of a file can be changed only for empty files. For example, if a file is created and then data is written to the file, its integrity status cannot be changed once data is written.
コピー先ディレクトリから属性を削除して新たにコピーしなおしてください。新規が動く理由はもうお分かりですね。
Hyper-VマネージャなどはVHDXファイルを新規作成した直後にこの属性を消してからデータを書き込むからです。- 回答の候補に設定 ABE NAOKIModerator 2013年11月12日 6:48
- 回答としてマーク Skyponta 2013年11月14日 7:30
-
チャブーンです。
set-fileintegrity のヘルプを見ると「-FileName」と書いてあります。対象とされているのは「フォルダ」だけのようですので、フォルダの中にダミー的なファイルを入れて、それに対して実行してみてはどうでしょうか。で、その後、そのフォルダにVHDXをコピーしてみると、好転する可能性はあるかもしれません。
http://www.petri.co.il/disable-integrity-bit-of-virtual-hard-disks-refs-volume.htm
追記:ちょっと調べたら、うえの方法を使わなくても、直接できそうなことが書いてあるぺーじがありますね。キモとしては、PowerShellでオブジェクト化してから、パイプでそのオブジェクトを変換する、もののようです。
すべての返信
-
- 回答の候補に設定 ABE NAOKIModerator 2013年11月12日 6:48
-
整合性はNTFSのEFSや圧縮と同じくファイルの属性によって制御される機能です。
http://blogs.msdn.com/b/b8_ja/archive/2012/01/20/windows-refs.aspx
>最も基本的なレベルでは、整合性はファイルの属性 (FILE_ATTRIBUTE_INTEGRITY_STREAM) です。
>また、ディレクトリの属性でもあります。ディレクトリ内にある場合、属性はそのディレクトリ内に作成されたすべてのファイルおよびディレクトリに継承さ れます。属性解除のコマンドはすでに別の人が出したので割愛。
ただし既にコピーが終わったそのVHDXファイルから属性だけ解除することはできません。
http://download.microsoft.com/download/C/B/3/CB3561DC-6BF6-443D-B5B9-9676ACDF7F75/Application%20Compatibility%20with%20ReFS.docx
>* The integrity status of a file can be changed only for empty files. For example, if a file is created and then data is written to the file, its integrity status cannot be changed once data is written.
コピー先ディレクトリから属性を削除して新たにコピーしなおしてください。新規が動く理由はもうお分かりですね。
Hyper-VマネージャなどはVHDXファイルを新規作成した直後にこの属性を消してからデータを書き込むからです。- 回答の候補に設定 ABE NAOKIModerator 2013年11月12日 6:48
- 回答としてマーク Skyponta 2013年11月14日 7:30
-
ご回答ありがとうございます。お返事が遅くなりまして申し訳ありません。
仕事で数週間ベトナムにおりました。
さて、整合性ビット(整合性ストリーム)の属性は解除でき、かつ、後でファイルから属性だけを除去することができないことも理解ができました。
そこで仮想マシンを配置する予定のフォルダに対し、
set-fileintegrity d:share $false
set-fileintegrity d:share -enforce $false
といったコマンドを試みたのですが、get-fileintegrityで確認しても、元の属性と変わらず、EnabledがFalse、EnforcedがTrueとなっており変化がありません。HomeCloset様の引用の中に、EnforcedがTrueの場合は属性が強制的にオンになる、すなわちEnabledがTrueになるという記述があるので、EnforcedをFalseにする必要があると思われます。
上述のようにset-integrityでFalseにできない場合、どうすれば良いものでしょうか・・・。
お手すきの時にお知恵を拝借できれば幸いです。自分でももう少し検証してみますが、よろしくお願いします。 -
チャブーンです。
set-fileintegrity のヘルプを見ると「-FileName」と書いてあります。対象とされているのは「フォルダ」だけのようですので、フォルダの中にダミー的なファイルを入れて、それに対して実行してみてはどうでしょうか。で、その後、そのフォルダにVHDXをコピーしてみると、好転する可能性はあるかもしれません。
http://www.petri.co.il/disable-integrity-bit-of-virtual-hard-disks-refs-volume.htm
追記:ちょっと調べたら、うえの方法を使わなくても、直接できそうなことが書いてあるぺーじがありますね。キモとしては、PowerShellでオブジェクト化してから、パイプでそのオブジェクトを変換する、もののようです。 -
-
チャブーン様
素早いフォローありがとうございます。
Petriの記事はご回答を頂く前に読んでおりましたが、仮想マシンを作るたびにコマンドを打つ方法ではなく、フォルダ単位で無効にしたかったので、あえてやってみませんでした。
どうも現状、ファイル単位でしか整合性ビット(整合性ストリーム)を無効にする方法がなさそうに思われるので、結果的には下記のコマンドによって、仮想マシン専用に用意したDドライブ(ハードウェアRAIDボリューム)全体を整合性ビットを無効にしてフォーマットすることにより問題が起こらなくなりました。
D:\>format /fs:refs /q /i:disable D:このドライブはほぼ仮想マシン専用なので、ドライブ全体で整合性ビット無効とし、必要なファイルに限って有効にしてみたいと思います。本当はハードウェアRAIDではなく記憶域でミラーリングしてみたかったのですが、実運用環境なのでハードウェアRAIDにしてしまいました。
HomeCloset様、GreenCat様、チャブーン様、何度もご指導を頂きましてどうもありがとうございます。
この件は日本語では文献がほとんどなく悩んでいたので(英語ではいくつかあったのですが、英語で探す努力を怠っておりました)、皆様の情報によって本当に助かりました。心から感謝いたします。