RAID1には、データとメタデータを含むデュアルディスクbtrfsファイルシステムがあります(mdraidではなくbtrfs機能を介して)。このディスクは上部にdm-cryptがあるUSB3ドライブです。ディスクの1つにエラーが発生しました(何千もの不良セクタがあり、書き込み時間が頻繁に超えています)。故障したUSBドライブを交換するために3番目のUSBドライブを入手しました。どのように交換しますか?
答え1
これはロイヤルピタパンであることが判明した。まず、btrfsに適切な代替コマンドがあることを覚えておくことが重要です。これは、新しいコマンドを追加して失敗したコマンドを削除するよりもはるかに優れています。
まず、新しいディスクをパーティション化し、ここでdm-cryptを設定することから始めます。引き続きロックを解除してください。
ディスクに書き込み時間制限(それぞれ360秒かかる)がない場合は、簡単な操作を実行できます。
btrfs replace start -r /dev/mapper/luks-BAD-disk-uuid \
/dev/mapper/luks-NEW-disk-uuid /mount/path
ただし、これにより不良ディスクへの日常的な書き込みが行われ、タイムアウトが発生した場合、約30秒の高速コピー後にタイムアウトを待つ6〜12分のアイドル時間が表示されます。
書き込みを防ぐには、デバイスマッパーを使用してスナップショットを設定できます。読み取りはデフォルトの不良デバイスに移動し(読み取りはデフォルトでは問題ありません)、書き込みはCOW(記録中にコピー)ストアに移動します。まず、COWを保存するための適切なサイズのブロックデバイスが必要です。Watt-sdj1_dmsnap
これに新しい論理ボリューム()を作成しました。すべてのブロックデバイス(ループデバイスを含む)が機能する必要があります。私は個人的に問題が発生した場合に備えて永久ディスクを使用することをお勧めしますが、危険にさらされていてRAMが十分であれば、RAMディスクも問題ありません。
鉱山には約1.7GBのCOWスペースが必要です(3TBドライブで2.24TiB移動)。 COWスペースを十分に確保することをお勧めします。スペースが足りないのは悪いことになり、一度使用したらすべて確保できます。
次に、btrfsファイルシステムをマウント解除し(マウントされている場合)、dm-cryptデバイスをロック(停止)する必要があります。暗号化されていないデータがディスクに書き込まれたくないので、スナップショットを暗号化の下に置きました。
私の場合はパーティションでした/dev/sdj1
。最初にエラーを防ぐには、読み取り専用に設定してください。
blockdev --setro /dev/sdj1
blockdev --setro /dev/sdj
(後でリセットを使用できます--setrw
)。実際にスナップショットを設定するには、次の手順を実行します。
dmsetup create sdj_divert --table "0 $(blockdev --getsz /dev/sdj1) snapshot /dev/sdj1 /dev/mapper/Watt-sdj1_dmsnap PO 8"
これが何を意味するかをすばやく説明するために、デバイスマッパーテーブルの形式は次のとおりです。スタートセクター セクター数 ターゲットタイプ ターゲットパラメータ。開始セクタは0です。セクタの数はsdj1のサイズと同じです(最終的にすべての操作を実行しようとしています)。ターゲットタイプはsnapshotです。スナップショットターゲットにはいくつかのパラメータがあります。ソース開発 家畜開発者 モデル ブロックサイズ。私たちが提供するソースデバイスは、/dev/sdj1
私が作成した論理ボリュームです。血耐久性(メタデータは再起動時にバックアップできるようにディスクに書き込まれます)とああverflow(スナップショットに大量のデータを書き込むと復元可能)ブロックサイズはスナップショットの粒度です。バイトを書き込むと、そのバイトの周りのブロック全体がコピーされます(そしてスナップショットのスペースを消費します)。 8は4Kなので、並べ替えの問題はありません。
最後に、デバイスを再度ロック解除します。ただし、ロックを解除するのではなくロック/dev/sdj1
を解除します/dev/mapper/sdj_divert
。その後、btrfs ファイルシステムを再マウントします。
次のコマンドを使用して、スナップショットの使用量を確認できますdmsetup status sdj_divert
。同様の内容が表示されます(ただし、スラッシュの前に数字がはるかに少ない)。
0 5860524928 snapshot 914216/545259520 3568
最初の 3 つの項目は、開始セクタ、セクタ数、およびターゲットタイプです。次の数字は使用されているセクタの数(スラッシュの前)、次はセクタの総数(スラッシュの後)です。これは使用されたスペースの一部にすぎません。最後の数字はメタデータに使用されるセクタの数で、すでに使用されている数に含まれています。
btrfs replace start
最後に、答えの上部にある簡単なコマンドを使用できます。すぐに返され、を実行して状態を観察しますbtrfs replace status /mount/path
。
交換が完了したら、破損したデバイスがファイルシステムから削除されていることを確認し(例:)、エラーが発生btrfs fi show /mount/path
したドライブをロックまたはシャットダウンしてからスナップショットを削除できます(dmsetup remove sdj_divert
)。その後、COWスペースを解放できます(編集証がある場合はそれを消去した後)。
技術的にオプションの最後のステップが1つあります。交換装置は大きいが、btrfsはまだ余分なスペースを使用していない。 btrfsで使用できるようにするには、btrfs fi show
出力でdevidを見つけて実行します。
btrfs fi resize DEVID:max /mount/path
ほとんどすぐに行わなければなりません。