web-dev-qa-db-ja.com

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

ミラー化されたbtrfsの故障したハードドライブを交換します。

btrfs device delete missing /[mountpoint]very長い時間を要しているので、交換用ドライブにデータを再分散していると思います。

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

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

14
user50849
btrfs balance status /mountpoint

man 8 btrfs

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

        Options

        -v   be verbose
27
llua
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から削除されるまで、問題の「欠落」デバイスのスペースが徐々に小さくなっていくのがわかります。

8
Ace

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

4
Charles Young

また、いつまでも削除が完了するのではないかと思っていたので、次の小さなシェルコードを思いつきました。

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のデータを削除するように見えるため、バイトサイズの新しい違いが観察されるまでには時間がかかります。

この問題に対処するには、フラグ-apvのデフォルトフラグに追加され、平均送信レートを表示します(通常の現在の送信レートはほとんどの場合0になるため)。

これは最善の解決策ではないが、思いつく最善の解決策であることに気づきました。誰か改善のためのアイデアがあれば教えてください! :)

1
Erki der Loony