
2つの500GBハードドライブを含むBTRFS RAID1アレイ、エラーなし。これはルートファイルシステムなので、各ドライブには3つのパーティションがあります:1 = /boot(ext4)、2 = /(btrfs)、3(swap)
/boot は ext4 です。 /bootがbtrfsファイルシステム(新しいカーネルがインストールされているがgrub構成が更新されていない)の場合、カーネルのアップグレードは常に機能しないためです。
イメージがより小さいドライブに移動され、新しいドライブは120 GBなので、btrfsファイルシステムのサイズを変更する必要があります。たとえば、GParted を使用して 2 つの btrfs パーティションのサイズを変更できます。サイズ変更後、パーティション情報を含むMBRをdd if=/dev/sda of=/dev/sdb bs=512 count=1
btrfsパーティション()と共に既存の500 GBドライブから新しい120 GBドライブ()にコピーできますdd if=/dev/sda2 of=/dev/sdb2
。 (120GB未満に移動する必要があるスワップパーティションは無視されます。)
新しい120 GBドライブを使用すると、システムは問題なく起動しますが、エラーメッセージ(dmesg)が記録されます。
BTRFS:bytenr 274877906944のスーパーバッファヘッダを取得できません。
そして、スクラビングで「スーパー」エラーが見つかりました(ただし、データエラーはありません)。
"エラーの詳細: super=1"
このエラーによってデータが破損する危険性はありますか?
この問題をどのように解決しますか?
274877906944は256GB、古いbtrfsパーティションは> 256GB、新しいbtrfsパーティションは<256GBなので、システムは256GBスーパーブロックを探しているようです。
答え1
警告:マルチデバイスBTRFSファイルシステムのサイズ変更にGPartedを使用しないでください。
データ損失が発生する可能性があります!
GPartedが犯人のようです。明らかに、マルチデバイスbtrfsファイルシステムのサイズを変更する方法がわからず、実行されますが、およびを使用して各デバイスをbtrfs filesystem resize
処理しません。resize 1:49g
resize 2:49g
それは次のようにbtrfs filesystem show
言います:
Total devices 2 FS bytes used 40.95GiB
devid 1 size 50.00GiB used 43.03GiB path /dev/sda2
devid 2 size 439.45GiB used 43.03GiB path /dev/sdb2
明らかに、GPartedは2番目のデバイスのファイルシステムのサイズを変更していないので、Btrfsはまだ500GBのファイルシステムだと思います。
ある時点で、Btrfsはディスク外のデータの読み取り/書き込みを試みます。これは破損を引き起こし、ファイルシステム全体を無駄にする可能性があります。
固定する
まず、ライブシステムを起動して、そのパーティションよりも大きいファイルシステムで実行するときのシステム破損のリスクを軽減します。
ファイルシステムをマウントします。
mount /dev/sda2 /mnt/tmp
丸めエラーを回避するには、まず2番目のデバイスを50 GB - 1 GB = 49 GBに縮小してください。
btrfs filesystem resize 2:49g /mnt/tmp
50GBのパーティションを満たすようにサイズを変更します。
btrfs filesystem resize 2:max /mnt/tmp
確認してくださいbtrfs filesystem show
。両方のデバイスのサイズが正確でなければなりません。
devid 1 size 50.00GiB used 43.03GiB path /dev/sda2
devid 2 size 50.00GiB used 43.03GiB path /dev/sdb2
削除して再起動するとエラーが消えます。
このように悪い状態でシステムが破損せずに実行された場合、ファイルシステムは正常な状態になります。
(この問題を解決するのを助けてくれたHeilingに感謝します。)