web-dev-qa-db-ja.com

無効なマップノードリンケージを修正する方法は?

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

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

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

したがって、fsck.hfsplushfsprogsの一部)を使用して修復しようとすると、次のようになります。

$ 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を使用しているにもかかわらず、ドライブは修復されていません。

これは、このエラーの説明です blog

B *ツリーがチェックされると、fsckは割り当てマップのチェックに進みます。 fsckは、上記のようにヘッダーノードをチェックします。次に、各ノードを調べて、自分自身をマップノードとして識別し、適切な数のレコードがあることを確認します。ノードが失敗した場合、これらのチェックにより、fsckは「無効なマップノード」を返します。次に、fsckはノードの高さが0ではないことを確認します(「無効Node height」)。最後に、ツリーの最下部とmapSizeに到達した場合(これは、ツリー内のレコードの合計数であり、ノードが処理されるたびに減少します)は0ではありませんfsckは孤立したノードがあることを認識し、「無効なマップノードリンク」を返します。

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

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

6
kenorb

指定して、指定したファイルシステム( HFS + )でカタログファイル( B-tree )を再構築する必要があります。 fsck-rオプション。次に例を示します。

$ fsck.hfsplus -fryd /dev/sdd2

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

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

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

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

7
kenorb