Ben de bu kadar küçük bir kabuk kodu parçası ile geldi bu yüzden uzun ömürlü bir silmek ne zaman biteceğini merak ediyordum:
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
Bu size böyle güzel bir ilerleme çubuğu verecektir:
0:13:54 [0,00 B/s] [16,0MiB/s] [> ] 1% ETA 19:23:19
Genel fikir pv
ilerlemeyi göstermek için kullanmaktır . Bu komut yalnızca kullandığımız bir borudan akan baytların izlenmesine izin verdiği içindd
, uygun miktarda sıfır oluşturmak ve bunları içine borulamak için kullanırız pv
.
Bu yöntemin avantajı, güzel bir ilerleme çubuğu elde etmenizdir. Ancak, göründüğü içinbtrfs
her zaman bir kerede bir GB veri sildiğinden, bayt boyutlarında yeni bir farkın görülmesi biraz zaman alır.
Bu sorunu gidermek için bayrak -a
, pv
ortalama bir iletim hızı görüntülemesi için varsayılan bayraklarına eklenir (çünkü normal akım iletim hızı çoğu zaman 0 olacaktır).
Bunun en iyi çözüm değil, bulabileceğim en iyi çözüm olduğunun farkındayım. Birisi iyileştirmeler için fikirleri varsa lütfen bana bildirin! :)