ただ再起動してください

ただ再起動してください

BTRFSでフォーマットされた外付けドライブがありますが、マウントが拒否されるようです。

$ sudo mount -vs -t btrfs  -o ro,recovery,errors=continue /dev/sdb2 /media/user/dir
mount: /dev/sdb2: can't read superblock

ただし、BTRFSがすべてのスーパーブロックをOKと見なす場合:

$ sudo btrfs rescue super-recover -v /dev/sdb2                 
All Devices:
        Device: id = 1, name = /dev/sdb2

Before Recovering:
        [All good supers]:
                device name = /dev/sdb2
                superblock bytenr = 65536

                device name = /dev/sdb2
                superblock bytenr = 67108864

                device name = /dev/sdb2
                superblock bytenr = 274877906944

        [All bad supers]:

All supers are valid, no need to recover

代替スーパーブロックの1つを使用するように指定しようとするとsb=$((67108864/4))mount1k単位を使用するため、4kブロックを持つシステムでは4で割る必要があります)、同じエラーが発生します。btrfs restoreまた、ドライブからデータを読み取るのに問題がないように見え、btrfs check誤ったキャッシュエントリについてのみ文句を言います(clear_cacheインストール時には役に立ちません)。以前は他のドライブでこれが起こりましたが、それもbtrfs check --repair機能しませんでした。 [1]このドライブにデータが多いため、すべてを別の場所にコピーしbtrfs restore(他の場所でスペースを見つけることも意味します)、再フォーマットしてからすべてをもう一度コピーするのは少し消えます。

この問題を解決する方法はありますか?btrfs依存関係の代わりにマウントを実行するように直接呼び出す方法はありますかmount?見つかりませんmount.btrfs

btrfs check --repair[1]私はこの方法を最後の手段にすることについて多くの警告があるので、使用するのは少し消極的です。特に以前は効果がなかった後はさらにそうです。

答え1

Btrfsをrootfsとして使用し、システムが停止した後、Ubuntu 18.04で同様の問題に直面しました。次回の起動時にBtrfsはマウントされません。 Ubuntu LiveUSBを使用して起動し、btrfs rescue zero-log問題を解決しました。

詳細:

$ sudo mount -o ro /dev/nvme0n1p2 /2
mount: /2: can't read superblock on /dev/nvme0n1p2.

(最初にddを使用してパーティションを外部ストレージデバイスにバックアップしました。)

btrfs check --check-data-csumすべてが大丈夫であることを示してください。btrfs inspect-internal dump-superスーパーブロックは大丈夫で、btrfs rescue super-recover修正する部分はないそうです。

しかし、マウントしようとした後、次のカーネルメッセージが見つかりました。

BTRFS info (device nvme0n1p2): start tree-log replay
BTRFS critical (device nvme0n1p2): corrupt leaf: root=18446744073709551610 block=1252150951936 slot=129 ino=7029 file_offset=164888576, file extent end range (169345024) goes beyond start offset (168624128) of the next file extent
BTRFS error (device nvme0n1p2): block=1252150951936 read time tree block corruption detected
BTRFS: error (device nvme0n1p2) in btrfs_replay_log:2281: errno=-5 IO failure (Failed to recover log tree)
BTRFS info (device nvme0n1p2): delayed_refs has NO entry
BTRFS error (device nvme0n1p2): open_ctree failed

ツリーログが壊れているようです。私はbtrfs rescue --helpそれを見つけた

btrfs rescue zero-log <device>
    Clear the tree log. Usable if it's corrupted and prevents mount.

btrfs rescue zero-log問題を解決しました。

$ sudo btrfs rescue zero-log /dev/nvme0n1p2
Clearing log on /dev/nvme0n1p2, previous log_root 1252152229888, level 0

答え2

ただ再起動してください

Btrfsに/ dev / sdaなどのブロックデバイスファイル名を変更するのに問題があるようです。私も同じ問題に直面しました。

Btrfsファイルシステムを作成し、いくつかのデータを書き込んで、アンマウントし、私のシステムからディスクを取り外しました(2.5インチSATAドライブでした)。 1週間後、ホットスワップでドライブを再接続しましたが、インストールできませんでした。 。Can't read superblockすべてがbtrfs rescue super-recover大丈夫だと思いました。私はそれをやってみて、btrfs checkすべてが大丈夫であることを確認しました。

私は以前のカーネルである4.15を実行しています。- 新しいバージョンのBtrfs(新しいカーネル)ではこの問題は解決されたと思いますが、以前のバージョンの場合は再起動するだけです。

ドライブが列挙され、Btrfsファイルシステムは問題なくマウントする必要があります。

それでも機能しない場合は、カーネルをアップグレードしてみてください。

関連情報