
btrfsを初めてテストして、特定のプロジェクトで使用できることを確認してください。
私は仮想マシンで働いています。
任意のサイズの3つのミニディスクを使用してボリュームを作成しました。
mkfs.btrfs -d single /dev/sdb /dev/sdc /dev/sdd mount /dev/sdb /mnt/data
テスト用に他のデバイスを追加
btrfs device add /dev/sde /mnt/data
ディスクを埋めるために1GBのファイルの束を作成します。
dd if=/dev/urandom of=1GB_07.bin bs=64M count=16 iflag=fullblock
仮想マシンからディスクの1つを削除して再起動しました。
読み取り専用モードで強制インストールができました
mount -ro degraded /dev/sdb /mnt/data
すべてのファイルを見ることができます。別のディレクトリに同期しようとしましたが、私が作成した1Gファイルの1つをコピーできませんでした。言葉になりますね。消えたディスクにあります!
ここで失われたディスクとその中のファイルを「破棄」して読み取り/書き込みモードで再実行する方法はありますか?私はランダムサイズのディスクを含む箱を一緒に組み立てたかったのです。冗長性は私にとって重要ではなく、データミラーリングによるオーバーヘッドは望ましくありません。この箱に。
一部のデータを含むドライブを紛失した場合は、そのドライブを交換/削除してソースから再同期して、BTRFSシステムから失われたファイルの新しいコピーをインポートしたいと思います。
馬になる?可能ですか?
答え1
正確な説明によると、いいえ、メタデータツリーの一部も失われるため、不可能です(実際に運が悪い場合はブロックツリー(btrfs fi df
出力のシステムブロック)も失われます。これは次のとおりです。ext4ファイルシステムのスーパーブロックとinodeテーブルの一部を削除します。メタデータの欠落は、読み取り専用でインストールする理由の1つです。
デフォルトでは、BTRFSはdup
メタデータスキーマを使用します。つまり、各メタデータブロックのコピーを2つ保存しますが、両方とも同じデバイスに保存されます(複数のデバイスがある場合でも)。したがって、このメタデータプロファイルを使用してマルチデバイスBTRFSボリュームからデバイスを紛失すると、一部のメタデータが失われる可能性があります。メタデータツリーが破損していると、ファイルシステムの大部分が失われる可能性があり、ファイルシステムをまったくマウントできない可能性があります。
あなたがすべきことは、raid1
メタデータスキーマを使用することです。真剣に、これは思ったほどパフォーマンスに影響を与えません。特に定期的にファイルシステムに書き込まないと、単一のデバイスエラーが原因でファイルシステム全体が破壊されるのを防ぎます。
これでデバイスにエラーが発生した場合は、次の手順を実行します。
mount -o remount,rw,degraded
ファイルシステムの書き換えを強制するために使用されます。問題が解決しない場合は、ファイルシステムがこのように機能しないようにしてください。 真剣に、ファイルシステムのパフォーマンスが低下していますが、書き込み可能にすると非常に悪いことが起こります。- 何らかの方法でエラーの影響を受けたすべてのファイルを削除します。現時点では、特にどの程度の断片化がある場合、何が影響を受けるかを確実に把握することは容易ではありません。
- これらのファイルとディレクトリを削除した後、
btrfs device delete
失敗したデバイスの削除を使用してください(デバイスが完全に欠落している場合はbtrfs device delete missing
削除を使用できます)。この場合、使用するとbtrfs replace
失敗する可能性があり、パフォーマンスが向上しません。また、を使用すると、btrfs device delete
新しいデバイスが少なくとも古いデバイスと同じ大きさである必要があるという要件がなくなります。したがって、均一なサイズの装置を扱わないので、生活が容易になる。 btrfs device add
交換デバイスを追加し、メタデータbtrfs balance start -musage=100
ブロックのバランスを再調整するために使用されます(欠落しているファイルをコピーすると、データブロックのバランスが自然に再調整されます)。- または、同様のツールを使用して
rsync
現在失われているコンテンツをコピーし直してください。
答え2
故障したデバイスを動作しているデバイスと交換するには、btrfs replace
を使用します。
btrfs replace start -r /dev/failed-dev /dev/new-dev /mountpoint
監視装置
btrfs replace status /mountpoint