まず、重要な内容をコピーしてください。

まず、重要な内容をコピーしてください。

RAID1 btrfsファイルシステムで故障したディスクを交換しようとしています。

それでもパーティションをマウントできますrw(約5分の遅延と多くのI / Oカーネルエラーの後)。

まず、失敗したディスクが作業速度に影響を与えないようにしようとしreplaceました。-r

      -r
           only read from <srcdev> if no other zero-defect mirror exists.
           (enable this if your drive has lots of read errors, the access
           would be very slow)

それでも私の成績は良くなかった。パーティションサイズは3.6TiBで、9.25時間後に次の結果が得られます。

3.8% done, 0 write errs, 0 uncorr. read errs

この速度であれば完了するのに10日以上かかるでしょう!

私が制御できない状況のため、待ち時間が長すぎます。

失敗したディスクのカーネルエラーが頻繁に発生します(平均して5分ごと)。

Jan 26 09:31:53 tara kernel: print_req_error: I/O error, dev sdc, sector 68044920
Jan 26 09:31:53 tara kernel: BTRFS warning (device dm-3): lost page write due to IO error on /dev/mapper/vg4TBd2-ark
Jan 26 09:31:53 tara kernel: BTRFS error (device dm-3): bdev /dev/mapper/vg4TBd2-ark errs: wr 8396, rd 3024, flush 58, corrupt 0, gen 3
Jan 26 09:31:53 tara kernel: BTRFS error (device dm-3): error writing primary super block to device 2
Jan 26 09:32:32 tara kernel: sd 2:0:0:0: [sdc] tag#0 FAILED Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
Jan 26 09:32:32 tara kernel: sd 2:0:0:0: [sdc] tag#0 Sense Key : Medium Error [current]
Jan 26 09:32:32 tara kernel: sd 2:0:0:0: [sdc] tag#0 Add. Sense: Unrecovered read error
Jan 26 09:32:32 tara kernel: sd 2:0:0:0: [sdc] tag#0 CDB: Read(10) 28 00 02 eb 9e 23 00 00 04 00
Jan 26 09:32:32 tara kernel: print_req_error: critical medium error, dev sdc, sector 391967000

私はこれらのエラーが完全に無料であるにもかかわらず、btrfsがアカウントデータをディスクに書き込もうとしたために発生したと思います。

マウントされていても、robtrfsはディスクへの書き込みを試みることができます。インストールオプション-onologreplay:

        Warning
           currently, the tree log is replayed even with a read-only
           mount! To disable that behaviour, mount also with nologreplay.

このプロセスをスピードアップするにはどうすればよいですか?

この記事replace再起動後も続行することを示します。

私は考えています:

  1. 現在のキャンセルreplace
  2. 故障したディスクを取り外す
  3. mount -o degraded,rw

現時点では、次のこともお勧めします。

  1. replace障害が発生したディスクなしで続行することを許可しますscrub
  2. プロセスの電源が切れたら、再インストールがsingle可能になるようにデータを変換します。rw

これが遅くなるよりも早くするのが合理的な計画ですかreplace

私の計算によると、ディスクI / O速度を考慮すると、10日ではなく6.5時間が可能であることがわかりました。

答え1

この特別な場合に表示される5分間の待ち時間は、カーネルが失敗したディスク上のデータにアクセスしようとすることです。ほとんどの場合、これはデータ全体を回復する可能性を高めるため、意図的です。ほとんどbtrfsはい破損したデータはスキップされますが、カーネルは放棄する前にしばらく破損したドライブにアクセスしようとします。によると:https://superuser.com/questions/905811/faster-recovery-from-a-disk-with-bad-sectors あなたはそれを使用することができます間違いカーネルスキップエラーをより速くするために制限します。

デフォルト値を確認するには:

# smartctl -l scterc /dev/sda

書き込み時間と読み取り時間の両方を5秒に設定します。

# smartctl -l scterc,50,50 /dev/sda

無効にすると、リカバリ待ち時間が無制限になるため、ディスクからリカバリされるデータ量が減少する可能性があります。

答え2

故障したドライブに重要なデータがある場合は、必要なプログラムはddrescue

まず、重要な内容をコピーしてください。

ファイルシステムに長期間使用できないデータがある場合は、まずこれを実行してください。

  1. エラーが発生したドライブを切断します。

  2. ファイルシステムを読み取り専用でマウントし、レベルを下げます。

    sudo mount -o degraded,ro /dev/sdX /mount/dir
    
  3. 必要なデータを別の場所にコピーしてください。

その後、ドライブを救出してください。

これで、残りのデータを取得するためにドライブイメージを作成しますddrescue

  1. Btrfs ファイルシステムをアンマウントします。インストールしないでください。読み取り専用でインストールしないでください。

  2. 書き込み中にコピーが無効なExt4またはBtrfsでフォーマットされた新しいドライブを使用します。

  3. ddrescueを実行して、不良ドライブのイメージを新しいドライブに作成します。

    sudo ddrescue /dev/sdX /path/to/save.img /path/to/save.map
    
  4. Ddrescueは、ドライブのサイズと速度に応じて完了するのに数時間または数日かかることがあります。また、ドライブエラーが多すぎると完了しない可能性があります。それが構造に来ることを可能にする時間はあなた次第です。

  5. ddrescue処理が完了したら、エラーが発生したドライブを取り外し/接続解除し、再接続しないでください。

  6. ドライブイメージをループデバイスにマウントします。

    sudo losetup -Pf --show /path/to/save.img
    
  7. これで、パフォーマンス低下モードの代わりに通常のマウントコマンドを使用してBtrfs raidファイルシステムをマウントできます。不足しているドライブを交換するには、自動的にループイメージデバイスを使用します。

  8. Btrfsドライブをマウントしたら、すぐにクリーンアップを実行してddrescueが回復できなかったデータを回復します。

そこには2つのオプションがあります。引き続きループデバイスを使用してBtrfsファイルシステムを実行したり、ループデバイスを別のドライブと交換したりできます。

答え3

この回答失敗したディスクに書き込むと、システムの動作が停止するreplace可能性があると述べました。

dmsetupすべての書き込みが成功するように、失敗したディスクにCOWデバイスを設定することをお勧めします。

警告する:この場合、ファイルシステムはdmcryptデバイス内にカプセル化されます。そうでない場合は、「問題」と潜在的なデータ損失に関する私のコメントをご覧ください。

答え4

クロール中であることを考慮して、以下をreplace行いました。

  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 ro,degradeddegraded一度)

  6. 確認しreplace statusてみると停止したことがわかりました。

    Started on 26.Jan 00:36:12, suspended on 26.Jan 10:13:30 at 4.1%, 0 write errs, 0 
    
  7. インストール-o remount,rwしてreplace確認し続けます。

    kernel: BTRFS info (device dm-5): continuing dev_replace from <missing disk> (devid 2) to target /dev/mapper/vg6TBd1-ark @4%
    

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

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

修正する:

完了後にのみ表示されるのではなく、一部の合計が表示されることをbtrfs device usage /mountpoint確認してバランスを再調整しました。Data,DUPMetadata,singleRAID1

btrfs balance start -dconvert=raid1,soft -mconvert=raid1,soft /mountpoint

またresize、両方のデバイスに余裕がある場合は、次の点を考慮してください。

btrfs filesystem resize max /mountpoint

私もscrubお勧めします。262016 修正可能なcsumエラーが中断に関連しているようです。replace

関連情報