I just tried out rebuilding a BTRFS-Mirror with a new SSD. I found out there is no integrated way to monitor the mirror-rebuild status.
So I created a little script which monitors the status of the rebuild every 5 Minutes and notifies to the notification center.
The script might be far from perfect, but I thought I would share for anyone desperate for more infos.
Any upgrades are welcome!
Just create a new script in User-Scripts and enter the name of your cache in the first variable. Mine is "qvoraidone".
As soon as you replaced the broken SSD with a new one and started the array, you can let the script run in the background.
#!/bin/bash
#Enter name of cache to rebuild!
cache="qvoraidone"
#Variable for notification-timer in seconds
notificationtime="300"
#Putting the btrfs command into a variable
distribution="btrfs device usage /mnt/$cache/"
#Start a loop to notify the user every $notificationtime seconds about the status
while true
do
#Make it multiline
multilinedistribution="$($distribution \
)"
#Get the two lines with "Data,RAID1 " and Capture anything until the first "G".
#Then put "o1"(only Group1), so everything between "Data,RAID1 " and "G" into a variable.
#Looks like this "105.00 30.00"
datasize=$(pcregrep -o1 '.*Data,RAID1: ([^G]+)' <<< "${multilinedistribution}")
#Exchange the "." with "," - Not needed anymore
#datasizecomma="${datasize2//./$','}"
#echo datasizecomma $datasizecomma
#Put them in an array for calculation
array=($datasizecomma)
array=($datasize)
#Determine which is the larger number
if [ ${array[0]} \> ${array[1]} ]
then
#calculate the percentage of the larger number
echo ---------------------------
status=$(awk "BEGIN {print ${array[0]}/${array[1]}*100}")
echo "BTRFS-Rebuild status: "$status"% completed!"
/usr/local/emhttp/webGui/scripts/notify -i normal -s "BTRFS-Rebuld still in progress!" -d ${array[0]}"GiB/"$status"% mirrored!"
sleep $notificationtime
else
if [ ${array[1]} \> ${array[0]} ]
then
#calculate the percentage of the larger number
echo ---------------------------
status=$(awk "BEGIN {print ${array[1]}/${array[0]}*100}")
echo "BTRFS-Rebuild status: "$status"% completed!"
/usr/local/emhttp/webGui/scripts/notify -i normal -s "BTRFS-Rebuld still in progress" -d ${array[1]}"GiB/"$status"% mirrored!"
sleep $notificationtime
else
#Determine if the numbers are equal
if [ ${array[1]} \= ${array[0]} ]
then
echo ---------------------------
echo "Rebuild finished! "${array[0]}"GiB mirrored!"
#Info to unRAID
/usr/local/emhttp/webGui/scripts/notify -i normal -s "BTRFS-Rebuld finished!" -d ${array[0]}"GiB mirrored!"
break
else
echo "ERROR, calculation failed!"
#Warning to unRAID
/usr/local/emhttp/webGui/scripts/notify -i alert -s "BTRFS-Rebuild Error!" -d "Could not calculate progress! Is "$cache" mounted?!"
break
fi
fi
fi
done
#More output
echo ---------------------------
echo "Data, single needs to be 0!"
echo "Data,RAID1 needs to be identical to be finished!"
echo ---------------------------
echo "Distribution"
echo ---------------------------
$distribution