También me preguntaba cuándo terminaría una eliminación duradera, así que se me ocurrió este pequeño código de 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
Esto te dará una buena barra de progreso como esta:
0:13:54 [0,00 B/s] [16,0MiB/s] [> ] 1% ETA 19:23:19
La idea general es usar pv
para mostrar el progreso. Dado que ese comando solo permite monitorear los bytes que fluyen a través de una tubería que usamos dd
para generar una cantidad adecuada de ceros y canalizarlos pv
.
La ventaja de este método es que obtienes una buena barra de progreso. Sin embargo, dado que parece que btrfs
siempre elimina los datos de un GB a la vez, lleva algún tiempo hasta que se pueda observar una nueva diferencia en el tamaño de los bytes.
Para solucionar este problema, el indicador -a
se agrega a los indicadores predeterminados de pv
para que muestre una velocidad de transmisión promedio (ya que la velocidad de transmisión actual normal será 0 la mayor parte del tiempo).
Me doy cuenta de que esta no es la mejor solución, sino la mejor que se me ocurrió. Si alguien tiene ideas para mejoras, ¡hágamelo saber! :)