BTRFS RAID-1ファイルシステムでデバイスを交換するには?

BTRFS RAID-1ファイルシステムでデバイスを交換するには?

2つの分岐を持つBTRFS RAID-1ファイルシステムがあります。別の読み取りエラーのため、ディスクを交換する必要があります。

したがって、計画は次のようになります。

  1. 3番目の足を追加してください - >結果は次のとおりです。三方鏡
  2. 欠陥のあるディスクを取り出します。 ->結果は次のとおりです。双方向ミラー

だから、次の手順を実行しました。

btrfs dev add /dev/new_device /mnt/foo
btrfs balance /mnt/foo

私はbtrfsが三方ミラーを作ることが正しいことをしたと思います。

別のオプションは、バランスの取れたフィルタを使用することです。しかし、ファイルシステムはすでにRAID-1なので必要ありませんか?

btrfs fi show次のように印刷されているので少し心配です。

バランスをとる前に:

    Total devices 3 FS bytes used 2.15TiB
    devid    1 size 2.73TiB used 2.16TiB path /dev/left
    devid    2 size 2.73TiB used 2.16TiB path /dev/right
    devid    3 size 2.73TiB used 0.00B path /dev/new_device

バランス期間:

    Total devices 3 FS bytes used 2.15TiB
    devid    1 size 2.73TiB used 1.93TiB path /dev/left
    devid    2 size 2.73TiB used 1.93TiB path /dev/right
    devid    3 size 2.73TiB used 458.03GiB path /dev/new_device

私の言うことは、これはbtrfsが既存のRAID-1グループの半分を単一のディスクにバランスさせるようです...そうですか?

それで、私の質問は、3方向ミラーを得るためにバランスの取れたフィルタを指定する必要がありますか?

添付:btrfsはn方向ミラーリングをサポートしていますか? ㅏbtrfs Wikiの注意事項そうではありませんが、おそらく昔ながらですか?良い人、cksは最近、双方向制限に関する記事を掲載しました。

答え1

現在のbtrfs確かにサポートするN方向ミラー

Btrfsには特別な代替サブコマンドがあります。

btrfs replace start /dev/left /dev/new_device /mnt/foo

マニュアルページの行間を読み取ると、コマンドはbtrfs-replace2つの既存のブランチを使用できる必要があります(たとえば、両方のブランチに読み取りエラーがある場合など)。しかし、両方のエラーセットは互いに分離されています。

btrfs 代替コマンドはバックグラウンドで実行されます。statusたとえば、サブコマンドでステータスを確認できます。

btrfs replace status /mnt/foo
45.4% done, 0 write errs, 0 uncorr. read errs

あるいは、raid-1ファイルシステムにデバイスを追加し、既存のブランチを削除することもできます。

btrfs dev add /dev/mapper/new_device /mnt/foo
btrfs dev delete /dev/mapper/right  /mnt/foo

addデバイスを追加するだけですぐに返す必要があります(btrfs fi show確認するにはaを実行してください)。

以下は、delete残りのすべてのデバイスで各拡張機能を使用できるように、残りのデバイス間のバランスをトリガーする必要があります。したがって、命令が長時間実行される可能性があります。この方法は、質問で説明されている状況を処理するのにも適しています。

システムログには、スパムの追加と削除と比較してbtrfs replace低レベルの情報メッセージが含まれています。また、完了するのにはるかに長い時間がかかります(たとえば、3TB SATAドライブ、80%FS使用量のテストシステムでは2〜3倍かかりました)。

btrfs fi resize最後に、実際の交換後に新しいデバイスが元のデバイスよりも大きい場合は、利用可能なディスク容量全体を利用するために各デバイスで実行する必要があります。上の例はreplace次のとおりです。

btrfs fi resize <devid>:max /mnt/foo

devid返されたデバイスIDを示しますbtrfs fi show

答え2

使用するのがreplace好ましい解決策です。2~3倍速い。balance。 (device remove最初に再調整してください。変換タイプを使用しないため、速度が遅くなる可能性softがあります。)

これにより、障害が発生したディスクがカーネルI / Oをブロックするのを防ぎます。

私は次のことをしました。

  1. ダウングレードされたファイルシステムが次のnoauto場所にあることを確認してください。/etc/fstab
  2. マシンの再起動(I/Oの中断により約20分かかります)
  3. 障害が発生したドライブで btrfs fs を含む LVM VG を無効にします。

    sudo vgchange -an <failed-vg>
    
  4. 失敗したデバイスを無効にします。

    echo 1 | sudo tee /sys/block/sdb/device/delete
    
  5. ファイルシステムのマウント-o rw,degraded(ノートdegradedのみ利用可能一度)

  6. 失敗の理由は次のdevidとおりです。

    btrfs filesystem show /mountpoint
    
  7. btrfs replace start -B <devid> /dev/new-disk /mountpoint
    

私がこれを書いている間:

  • replace status30秒ごとに0.1%の体力進行率を表示します。
  • iostat -d 1 -m <target-dev>ディスプレイは約145MB / sです(Seagateでは160MB / sを宣伝します)。

答え3

btrfs replaceこれを提案するには欠点がある。使用率が低い場合でも、より大きなデバイスをより小さなデバイスに置き換えることはできません。たとえば、1TB HDDを500GB SSDに置き換えるシナリオは機能せず、追加/削除オプションのみが許可されます。

唯一の利点は、SSDへの書き込みが非常に高速です。することができます)。削除)。

関連情報