Answers:
btrfs balance status /mountpoint
man 8 btrfs
[filesystem] balance status [-v] <path>
Show status of running or paused balance.
Options
-v be verbose
Balance on '/volume1' is running
28 out of about 171 chunks balanced (1156 considered), 84% left
。异常地,百分比倒数。
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设备删除丢失的/ mntpoint”时,它将开始重新生成释放该“丢失”驱动器所需的raid元/数据。
如果你做类似的事情
"watch -n 10 sudo btrfs fi show"
然后您会看到有问题的“丢失”设备上的空间越来越小,直到操作完成并将其从fi中移除。
在将数据写入您希望写入的驱动器之前,BTRFS可能需要一些时间来读取或重新排列数据。
您可以看到有多少CPU时间用于BTRFS操作,包括重新平衡,添加,删除,转换等:
ps -ef | grep btrfs
要查看每个驱动器的繁忙程度,请安装sysstat并运行:
iostat
添加一些选项以使iostat以兆字节为单位显示统计信息,并每30秒更新一次:
iostat -m -d 30
scrub的样本输出,因此在此时间间隔内没有写操作:
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
我还想知道什么时候才能完成持久删除,所以我想出了这小段shell代码:
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
总是一次删除一个GB的数据,因此需要一段时间才能观察到字节大小的新差异。
为了解决此问题,将该标志-a
添加到默认标志,pv
以使其显示平均传输速率(因为大多数情况下正常的当前传输速率将为0)。
我意识到这不是最好的解决方案,而是我能想到的最好的解决方案。如果有人有改进的想法,请告诉我!:)