Btrfs壊れた葉を修復する方法

Btrfs壊れた葉を修復する方法

btrfsファイルシステムがあり、どのようにしてもディレクトリの1つでIOエラーが発生します。

  • 内容を一覧表示または削除しようとすると、スーパーユーザーであってもIOエラーが発生します。

    $ ls thedir 
    ls: cannot access 'thedir': Input/output error
    $ sudo rm -fr thedir 
    rm: cannot remove 'thedir': Input/output error
    
  • tmpfs をマウントすると、IO エラーが発生します。

    $ sudo mount -t tmpfs -o size=10M tmpfs thedir
    mount: thedir: can't read superblock on tmpfs.
    

    私の考えでは、「スーパーブロック存在するtmpfs"には誤解があります。同じファイルシステム上の別のディレクトリにtmpfsをマウントしても問題ありません。スーパーブロックは私の知る限りtmpfsではなくbtrfsです。

カーネルログは次のように言います。

BTRFS critical (device sda1): corrupt leaf: root=5 block=46321315840 slot=24 ino=106823936, invalid inode generation: has 18446744073709551492 expect [0, 369151]
BTRFS error (device sda1): block=46321315840 read time tree block corruption detected

一方では、btrfsがエラーを検出し、より深刻な問題が発生しないようにすることをお勧めしますが、基本的にファイルシステム全体が破損しています。無効なディレクトリは、特にIOエラーの後に停止するrsyncの場合に問題になります。

利用可能ですか?これファイルシステムが利用可能な状態に復元されましたか?バックアップがあり、必要に応じて新しいファイルシステムを作成してすべてのデータをコピーできますが、これには数日から数週間かかることがあります。むしろ破損したディレクトリを削除し、はるかに小さい対応する部分だけを復元したいと思います。

私はLinux 5.4.83とbtrfs-progs5.9を使用しています。私はそれを知っていますが、btrfs check --repairマニュアルページの警告も知っています。

開発者や経験豊富なユーザーが推奨しない限り、--repairを使用せず、fsckがすべての種類のファイルシステムの破損を正常に修復できないことを認識した後にのみ使用してください。例えば。他のソフトウェアまたはハードウェアの障害により、ボリュームが重大に破損する可能性があります。

関連情報