無効なマップノードリンクを修正するにはどうすればよいですか?

無効なマップノードリンクを修正するにはどうすればよいですか?

私のドライブは hfs+ にフォーマットされていますが、クリーンではありません。

たとえば、 でドライブをマウントしようとするとmount -f -o rwdmesg次のエラーが表示されます。

hfs: Filesystem was not cleanly unmounted, running fsck.hfsplus is recommended.
mounting read-only.

fsck.hfsplusそのため、( の一部hfsprogs)を介して修復しようとすると、次のように表示されます。

$ fsck -dyf /media/sdd2
** /dev/sdd2
    Using cacheBlockSize=32K cacheTotalBlock=1024 cacheSize=32768K.
** Checking HFS Plus volume.
** Detected a case-sensitive catalog.
** Checking Extents Overflow file.
** Checking Catalog file.
   Invalid map node linkage
(4, 0)
** Volume check failed.
volume check failed with error 7 
    volume type is pure HFS+ 
    primary MDB is at block 0 0x00 
    alternate MDB is at block 0 0x00 
    primary VHB is at block 2 0x02 
    alternate VHB is at block 3906291630 0xe8d547ae 
    sector size = 512 0x200 
    VolumeObject flags = 0x07 
    total sectors for volume = 3906291632 0xe8d547b0 
    total sectors for embedded volume = 0 0x00 

-yまたはを使用しているにもかかわらず-f、ドライブは修復されません。

このエラーの説明は次のとおりです。ブログ:

B* ツリーのチェックが終わると、fsck は割り当てマップのチェックに移ります。fsck は、上記のようにヘッダー ノードをチェックします。次に、各ノードをチェックして、マップ ノードとして識別され、適切な数のレコードがあることを確認します。ノードがこれらのチェックに失敗すると、fsck は「無効なマップ ノード」を返します。次に、fsck はノードの高さが 0 でないことを確認します (「無効なノードの高さ」)。最後に、ツリーの一番下まで到達し、mapSize (ツリー内のレコードの総数を格納し、ノードが処理されるたびに減算される) が 0 でない場合、fsck は孤立したノードがあることを認識し、「無効なマップ ノード リンク」を返します。

しかし、このエラーは自動的に修正されず、パーティションを書き込み可能にマウントできないため、このエラーを修正する方法がわかりません。このエラーを修正する方法はありますか?

PS ディスクユーティリティにも同様の問題があります。

答え1

カタログファイルを再構築してみてください(Bツリー)を指定されたファイルシステム(HFS+)-rにオプションを指定することによりfsck、次のようにします。

$ fsck.hfsplus -fryd /dev/sdd2

このオプションは現在、指定されたファイル システムに新しいカタログ ファイル用の十分な連続した領域があり、既存のカタログ ファイル内のリーフ ノードに損傷がない場合にのみ機能します (つまり、fsck が要求された btree 内の各ノードを正常にトラバースできる場合)。

もちろん、データがさらに破損するリスクを避けたい場合は、ディスク操作を実行する前にバックアップ (イメージ全体のディスク ダンプ) を実行してください。

を実行して詳細をご覧くださいman fsck.hfsplus

それでも問題が解決しない場合は、他のツールを使用してディスクを修復してみてください。例:

関連情報