btrfsリバランスの進行状況を監視する方法はありますか?


13

ミラーbtrfsで故障したハードドライブを交換しています。

btrfs device delete missing /[mountpoint]非常に時間がかかっているので、実際には交換用ドライブにデータを再分散していると思います。

そのような操作の進行状況を監視する方法はありますか?

見栄えの良いGUIや%カウンターさえ期待する必要はありません。必要な場合は数行のシェルスクリプトを記述しても構いませんが、関連データの検索を開始する場所がわかりません。btrfs filesystem showたとえば、おそらくミラーリングされたfsに関する情報を表示する前にバランス操作が終了するのを待って、ハングします。

回答:


25
btrfs balance status /mountpoint

man 8 btrfs

 [filesystem] balance status [-v] <path>
        Show status of running or paused balance.

        Options

        -v   be verbose

4
おかげで、私の場合、btrfsは何も返さないため、現在の操作をバランスと見なしていないようですが、replaceコマンドを使用した場合、おそらく使用できる「replace status」もあります。関係なく良い答え。
user50849 14年

バランスの状態は次のようになりますBalance on '/volume1' is running 28 out of about 171 chunks balanced (1156 considered), 84% left。珍しいことに、パーセンテージはカウントダウンします。
mwfearnley

7
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」を実行すると、その「missing」ドライブを解放するために必要なraidメタ/データの再生成が開始されます。

あなたが何かをするなら

"watch -n 10 sudo btrfs fi show"

その後、問題の「欠落」デバイスのスペースが、操作が完了するまで徐々に小さくなり、fiから削除されるのを確認できます。


4

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


1

また、長期にわたる削除がいつ終了するのか疑問に思っていたので、この小さなシェルコードを思いつきました。

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ます。

この方法の利点は、進行状況バーが表示されることです。ただし、btrfsデータは常に1 GBずつ削除されるように見えるため、バイトサイズの新しい違いが観察されるまでには時間がかかります。

この問題に対処するために、フラグ-aがデフォルトのフラグに追加されてpv、平均伝送速度が表示されるようになります(通常の現在の伝送速度はほとんどの場合0になるため)。

これは最善の解決策ではないが、思いつく限り最善の解決策だと思います。誰かが改善のためのアイデアを持っているなら、私に知らせてください!:)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.