次の状態のbtrfs RAID1システムがあります。
# btrfs filesystem show
Label: none uuid: 975bdbb3-9a9c-4a72-ad67-6cda545fda5e
Total devices 2 FS bytes used 1.65TiB
devid 1 size 1.82TiB used 1.77TiB path /dev/sde1
*** Some devices missing
不足しているデバイスは、完全に故障し、OSが認識できなくなったディスクドライブです。故障したディスクを取り外し、リサイクルに送りました。
これで、/ dev/sddの下に新しいディスクがインストールされました。 Webを検索しているときに、そのようなシナリオの指示を見つけることができません(検索用語の選択が不適切ですか?)障害のあるディスクがOSからある程度アクセス可能なままである場合にRAIDシステムを保存する方法の例はたくさんあります。 btrfs replace
コマンドにはソースディスクが必要です。
私は以下を試しました:
# btrfs replace start 2 /dev/sdd /mnt/brtfs-raid1-b
# btrfs replace status /mnt/brtfs-raid1-b
Never started
エラーメッセージはありませんが、ステータスは開始されていないことを示しています。私の試みの何が問題なのか理解できません。
Ubuntu 16.04 LTS Xenial Xerus、Linuxカーネル4.4.0-57-genericを実行しています。
アップデート#1
「非バックグラウンドモード(-B)」でコマンドを実行すると、以前には表示されなかったエラーが表示されます。
# btrfs replace start -B 2 /dev/sdd /mnt/brtfs-raid1-b
ERROR: ioctl(DEV_REPLACE_START) failed on "/mnt/brtfs-raid1-b": Read-only file system
/mnt/brtfs-raid1-b
がマウントされているRO(読み取り専用)。選択の余地はありません。Btrfsでは、残りのディスクをRW(読み取り/書き込み)としてマウントできません。ディスクRWをマウントしようとすると、 syslogに次のエラーが表示されます。
BTRFS: missing devices(1) exceeds the limit(0), writeable mount is not allowed
RO=モードの場合、シームは何もできない、ディスクを交換、追加、削除することはできません。しかし、ディスクをRWとしてマウントする方法はありません。残っているオプションは何ですか? ?
単純なディスクに障害が発生しても、これは複雑なことではありません。システムはRWの実行を継続し、ドライブの故障を警告するはずです。アプリケーションがディスクの問題を認識しないまま、新しいディスクを挿入してデータを再コピーできるはずです。これは適切なRAIDです。 RAID1であっても、Brtfsは本番環境に対応していません。
これは、2017年の初めのbtrfsの制限であることがわかります。ファイルシステムをrwに再度マウントするには、カーネルにパッチを適用する必要があります。私はそれを試していません。このため、私はbtrfsから離れることを計画しています。障害のあるディスクを交換するためにカーネルにパッチを当てる必要はありません。
詳細については、次のリンクをクリックしてください。
2020年の時点でこの問題が引き続き発生する場合は、コメントを残してください。これが修正されたかどうか、人々は知りたいと思います。
更新:古き良きmdadmとlvmに移動し、2019-01-01の時点でRAID10 4x4Gib(8Gib合計スペース)に非常に満足しています。それは証明されており、リソースを大量に消費せずにうまく機能し、私はそれに完全に信頼しています。
btrfs device add /dev/sdd /mountpoint
を使用して新しいドライブをファイルシステムに追加し、btrfs dev del missing /mountpoint
を使用して欠落しているドライブを削除します。btrfs dev del missing
が機能する前に、ファイルシステムの再マウントが必要になる場合があります。
replace
を操作するには、ファイルシステムをマウントする必要がありますrw
.
劣化したBTRFS RAID1ファイルシステムでは、 が1つ でファイルシステムをマウントするチャンスが1つありますrw
-o degraded
:
degraded (default: off) Allow mounts with less devices than the RAID profile constraints require. A read-write mount (or remount) may fail when there are too many devices missing, for example if a stripe member is completely missing from RAID0.
rw
マウント後、見つからないデバイスのdevid
を見つけます。
btrfs filesystem show /mountpoint
欠落しているデバイスを新しいデバイスと交換します。
btrfs replace start -B <devid> /dev/new-disk /mountpoint
ステータスを確認します。
btrfs replace status /mountpoint
_btrfs replace
_は確かに試すべきことですが、その呼び出しに関して2つの落とし穴があります。それは、_-B
_を使用した場合にのみエラーを表示します(そうしないと、すべてが正常であるかのように、ステータス0で終了します。ただし、ステータスを確認すると「まだ開始されていません」と表示されます。また、無効なパラメータは無関係のエラーをスローします。
たとえば、ディスクは問題ないと思いますが、RAID1がなんらかの理由で同期していません(おそらく、ホストが機能している間は停電していましたが、ディスクはバックアップ電源が入っておらず、わずかに異なる時間にオンラインになった可能性があります)。確認するには、ディスクB(マウントされている状態)の電源を切ると、データを問題なく読み取ることができます。代わりにディスクAの電源を切ると(ディスクBがオンになっていて、ファイルシステムがすでにマウントされている)、エラーとデータの破損が発生します。したがって、ディスクAは問題なく、ディスクBは破損しています。しかし、ディスクBは機能しているように見えるので、ディスクBを再利用して再構築したいと思います。したがって、_/dev/diskB
_を_/dev/diskB
_に置き換えたいと思います。
_btrfs replace start -B /dev/diskB /dev/diskB /mnt/btrfs
_を使用すると、ERROR: ioctl(DEV_REPLACE_START) failed on "/mnt/btrfs": Invalid argument, <illegal result value>
が表示されました。マウントポイントに問題があるようですね。いいえ、最初の_/dev/diskB
_を_/dev/diskA
_に変更すると、うまくいきました。間違いは、マウントポイントではなく、デバイスにありました。
同様に、最初の引数(_2
_)はちょっと変です。おそらくエラーは間違っており、_2
_の代わりにデバイスで動作しますか?
_btrfs replace
_には2つの動作モードがあります。1つは壊れたデバイスを最初の引数として使用するモード(_start -B
_などの後)と、作業デバイスを使用して次の操作を行うモード(最初のオプションが使用できない場合)です。からコピーされます。どちらの場合も、2番目の引数は、再構築に使用するディスクです。
ファイルシステムが読み取り専用でマウントされているか、読み取り/書き込みでマウントされているかは、重要ではないようです。そのため、エラーが正しいのではなく、引数が拒否され、誤ったエラーが発生しているのではないかと思います。