14.3. 不正なファイルの復元
不正なファイルがスクラバーに置いた場合は、複製ボリュームからコピーを復元することで、以下のプロセスを修復してファイルを修復できます。
重要
以下の手順は、GFID からパス間の翻訳が有効な場合に役に立ちます。
-oaux-gfid-mount
マウントオプションを使用してすべてのボリュームをマウントし、以下のコマンドを実行して各ボリュームで GFID からパス間の変換を有効にします。
# gluster volume set VOLNAME build-pgfid on
このオプションが有効にされている前に作成されたファイルは、find コマンドで検索する必要があります。
手順14.1 複製ボリュームからの誤ったファイルの復元
不正なファイルの識別子を書き留めます
scrub status コマンドの出力を確認して、破損したファイルの ID を確認します。# gluster volume bitrot VOLNAME scrub status Volume name: VOLNAME ... Node name: NODENAME ... Error count: 3 Corrupted objects: 5f61ade8-49fb-4c37-af84-c95041ff4bf5 e8561c6b-f881-499b-808b-7fa2bce190f7 eff2433f-eae9-48ba-bdef-839603c9434c
破損した各オブジェクトのパスを確認します。
GFID からパス間の翻訳を有効にした後に作成されたファイルについては、getfattr コマンドを使用して、破損したファイルのパスを確認します。# getfattr -n glusterfs.ancestry.path -e text /mnt/VOLNAME/.gfid/GFID ... glusterfs.ancestry.path="/path/to/corrupted_file"
GFID からパス間の翻訳が有効になる前に作成されたファイルについては、find コマンドを使用して、破損したファイルのパスと、識別している GFID に一致するインデックスファイルを確認します。# find /rhgs/brick*/.glusterfs -name GFID /rhgs/brick1/.glusterfs/path/to/GFID
# find /rhgs -samefile /rhgs/brick1/.glusterfs/path/to/GFID /rhgs/brick1/.glusterfs/path/to/GFID /rhgs/brick1/path/to/corrupted_file
破損したファイルを削除します。
getfattr または find コマンドで、パスの出力から破損したファイルを削除します。GFID ファイルを削除します。
/rhgs/brickN/.glusterfs
ディレクトリーから GFID ファイルを削除します。ファイルを復元します。
以下の手順に従って、破損したファイルを安全に復元します。メタデータキャッシュの無効化
メタデータキャッシュが有効な場合は、以下のコマンドを実行して無効にします。# gluster volume set VOLNAME stat-prefetch off
リカバリーマウントポイントの作成
リカバリープロセスに使用するマウントポイントを作成します。たとえば、/mnt/recovery
です。# mkdir /mnt/recovery
タイムアウトが無効になっているボリュームをマウントします。
# mount -t glusterfs -o attribute-timeout=0,entry-timeout=0 hostname:volume-path /mnt/recovery
ヒュージファイルおよびハードリンク
ファイルにアクセスし、それらのファイルへのハードリンクにアクセスします。たとえば、ファイルおよび修復に必要なハードリンクで stat コマンドを実行します。$ stat /mnt/recovery/corrupt-file
クライアントの自己修復を有効にしていない場合は、次のコマンドでボリュームを手動で修復する必要があります。# gluster volume heal VOLNAME
アンマウントして、必要に応じてリカバリーマウントポイントを削除します。
# umount /mnt/recovery # rmdir /mnt/recovery
オプション: メタデータキャッシュを再度有効にします。
メタデータキャッシュが以前に有効化されていた場合は、以下のコマンドを実行して再度有効にします。# gluster volume set VOLNAME stat-prefetch on
次にビット腐敗スクラバーが実行されると、この GFID は一覧表示されなくなります (破損しない限り)。