Respuestas:
progress
(Visor de progreso de Coreutils) o versiones recientes de pv
pueden ver un descriptor de archivo de un proceso en particular. Entonces puedes hacer:
lsof your-file
para ver qué proceso ( $pid
) le está escribiendo y en qué descriptor de archivo ($fd
), y hacer:
pv -d "$pid:$fd"
o:
progress -mp "$pid"
Tengo una pequeña secuencia de comandos perl que puse en mi entorno bash como función:
fileSizeChange <file> [seconds]
Los segundos de suspensión predeterminados son 1.
fileSizeChange() {
perl -e '
$file = shift; die "no file [$file]" unless -f $file;
$sleep = shift; $sleep = 1 unless $sleep =~ /^[0-9]+$/;
$format = "%0.2f %0.2f\n";
while(1){
$size = ((stat($file))[7]);
$change = $size - $lastsize;
printf $format, $size/1024/1024, $change/1024/1024/$sleep;
sleep $sleep;
$lastsize = $size;
}' "$1" "$2"
}
La siguiente función de shell supervisa un archivo o directorio y muestra una estimación del rendimiento / velocidad de escritura. Ejecutar con monitorio <target_file_or_directory>
. Si su sistema no tiene du, que podría ser el caso si está monitoreando el rendimiento de io en un sistema incorporado, entonces puede usar ls en su lugar (vea el comentario en el código)
monitorio () {
# show write speed for file or directory
interval="10"
target="$1"
size=$(du -ks "$target" | awk '{print $1}')
firstrun="1"
echo ""
while [ 1 ]; do
prevsize=$size
size=$(du -ks "$target" | awk '{print $1}')
#size=$(ls -l "$1" | awk '{print $5/1024}')
kb=$((${size} - ${prevsize}))
kbmin=$((${kb}* (60/${interval}) ))
kbhour=$((${kbmin}*60))
# exit if this is not first loop & file size has not changed
if [ $firstrun -ne 1 ] && [ $kb -eq 0 ]; then break; fi
echo -e "\e[1A $target changed ${kb}KB ${kbmin}KB/min ${kbhour}KB/hour size: ${size}KB"
firstrun=0
sleep $interval
done
}
ejemplo de uso:
user@host:~$ dd if=/dev/zero of=/tmp/zero bs=1 count=50000000 &
user@host:~$ monitorio /tmp/zero
/tmp/zero changed 4KB 24KB/min 1440KB/hour size: 4164KB
/tmp/zero changed 9168KB 55008KB/min 3300480KB/hour size: 13332KB
/tmp/zero changed 9276KB 55656KB/min 3339360KB/hour size: 22608KB
/tmp/zero changed 8856KB 53136KB/min 3188160KB/hour size: 31464KB
^C
user@host:~$ killall dd; rm /tmp/zero
yum install pv
en un sistema Centos / Redhat para poder hacer esto ;-)