ミラー化されたbtrfsの故障したハードドライブを交換します。
btrfs device delete missing /[mountpoint]
はvery長い時間を要しているので、交換用ドライブにデータを再分散していると思います。
そのような操作の進行状況を監視する方法はありますか?
見栄えの良いGUIや、%カウンターを期待する必要はありません。必要に応じてシェルスクリプトを数行書いてもかまいませんが、関連データの検索をどこから始めればよいかさえわかりません。 btrfs filesystem show
は、たとえば、ミラーリングされたfsに関する情報を表示する前に、おそらくバランス操作が完了するのを待ってハングします。
btrfs balance status /mountpoint
man 8 btrfs
[filesystem] balance status [-v] <path>
Show status of running or paused balance.
Options
-v be verbose
Sudo btrfs fi show
これは次のように出力します:
Label: none uuid: 2c97e7cd-06d4-4df0-b1bc-651397edf74c
Total devices 16 FS bytes used 5.36TiB
devid 1 size 931.51GiB used 770.48GiB path /dev/sdc
devid 2 size 931.51GiB used 770.48GiB path /dev/sdg
devid 3 size 931.51GiB used 770.48GiB path /dev/sdj
devid 4 size 0.00 used 10.02GiB path
devid 5 size 931.51GiB used 770.48GiB path /dev/sdh
devid 6 size 931.51GiB used 770.48GiB path /dev/sdi
devid 7 size 931.51GiB used 770.48GiB path /dev/sdd
devid 8 size 931.51GiB used 770.48GiB path /dev/sdo
devid 9 size 465.76GiB used 384.31GiB path /dev/sdn
devid 10 size 931.51GiB used 770.48GiB path /dev/sdp
devid 11 size 931.51GiB used 770.48GiB path /dev/sdr
devid 12 size 931.51GiB used 770.48GiB path /dev/sdm
devid 13 size 931.51GiB used 769.48GiB path /dev/sdq
devid 14 size 931.51GiB used 770.48GiB path /dev/sdl
devid 15 size 931.51GiB used 770.48GiB path /dev/sde
devid 16 size 3.64TiB used 587.16GiB path /dev/sdf
Btrfs v3.12
そして、デバイスID#4が他のデバイスと少し異なることに気づいた場合。 「btrfs device delete missing/mntpoint」を実行すると、その「欠落した」ドライブを解放するために必要なRAIDメタ/データの再生成が開始されます。
あなたが何かをした場合
"watch -n 10 Sudo btrfs fi show"
その後、操作が完了してfiから削除されるまで、問題の「欠落」デバイスのスペースが徐々に小さくなっていくのがわかります。
BTRFSは、書き込み先のドライブにデータを書き込む前に、データの読み取りまたは再配置に時間がかかる場合があります。
リバランス、追加、削除、変換などのBTRFS操作に費やされているCPU時間の量を確認できます。
ps -ef | grep btrfs
各ドライブのビジー状態を確認するには、sysstatをインストールして実行します。
iostat
Iostatに統計をメガバイトで表示し、30秒ごとに更新するオプションを追加します。
iostat -m -d 30
この間隔中に書き込みが行われないようにスクラブからのサンプル出力:
Device: tps MB_read/s MB_wrtn/s MB_read MB_wrtn
sda 700.30 170.10 0.00 6804 0
sdb 0.78 0.00 0.01 0 0
sdc 520.20 127.98 0.00 5119 0
sdd 405.72 92.02 0.00 3680 0
sde 630.05 153.66 0.00 6146 0
sdf 627.43 153.60 0.00 6144 0
Muninをインストールして実行すると、ドライブアクティビティの履歴グラフやその他の多くの情報が表示されます。 https://www.digitalocean.com/community/tutorials/how-to-install-the-munin-monitoring-tool-on-ubuntu-14-04
また、いつまでも削除が完了するのではないかと思っていたので、次の小さなシェルコードを思いつきました。
get_bytes() {
btrfs device usage --raw /mnt/data | egrep -- '-[0-9]+' | sed -E 's/[^0-9]+([0-9]+)/\1/'
}
prev=$(get_bytes)
while [ 1 ]; do
current=$(get_bytes)
diff=$((current-prev))
if [ "$diff" -gt 0 ]; then
dd if=/dev/zero iflag=count_bytes count="$diff" 2>/dev/null
fi
prev="$current"
sleep 1
done | pv -petraW -s $(get_bytes) >/dev/null
これにより、次のような素敵な進行状況バーが表示されます。
0:13:54 [0,00 B/s] [16,0MiB/s] [> ] 1% ETA 19:23:19
一般的な考え方は、pv
を使用して進行状況を表示することです。このコマンドはパイプを流れるバイトの監視しか許可しないため、dd
を使用して適切な量のゼロを生成し、pv
にパイプします。
この方法の利点は、Niceプログレスバーが表示されることです。ただし、btrfs
は常に一度に1 GBのデータを削除するように見えるため、バイトサイズの新しい違いが観察されるまでには時間がかかります。
この問題に対処するには、フラグ-a
がpv
のデフォルトフラグに追加され、平均送信レートを表示します(通常の現在の送信レートはほとんどの場合0になるため)。
これは最善の解決策ではないが、思いつく最善の解決策であることに気づきました。誰か改善のためのアイデアがあれば教えてください! :)