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))
(mount
1k単位を使用するため、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ファイルシステムは問題なくマウントする必要があります。
それでも機能しない場合は、カーネルをアップグレードしてみてください。