Переделанная "Вкачествеальтернатива", скрипт с учётом ядра 2.6.28+> при записи 1 в этот файл начнется сбор данных,
> при записи 0 - результаты будут выведены в буфер dmesg.
при записи 1, в этот файл, начнется вывод в буфер dmesg,
при записи 0 - прекратится, вывод в буфер dmesg.
#!/bin/sh
dmesg -c >/dev/null 2>&1
echo 1 > /proc/sys/vm/block_dump
# Timeout
sleep 60
# Disable block dumping
echo 0 > /proc/sys/vm/block_dump
# Header
printf "%10s %15s %10s %10s %10s\n" CONUT COMMAND PID ACTION DEVICE
# Hide the eyes child! It gets ugly from here on
IFS="
"
for line in $(dmesg | awk '{if ( $2 ~ "READ" || $2 ~ "WRITE" ) { \
print $1 " " $2 " " $3 " " $NF}}' | uniq -c | sort -nr );
do
num=$(echo $line | awk '{print $1}' )
command=$(echo $line | awk '{ print $2 }' | sed -re 's/\([[:digit:]]+\)://')
pid=$(echo $line| awk -F'[()]' '{ print $2 }')
action=$(echo $line | awk '{ print $3 }')
device=$(echo $line | awk '{ print $NF }')
printf "%10s %15s %10s %10s %10s\n" "$num" "$command" "$pid" "$action" "$device"
done
# EOF
Примерно так выглядит
CONUT COMMAND PID ACTION DEVICE
30 firefox 2939 WRITE sda2
12 firefox 2939 READ sda2
6 xfsbufd 696 WRITE sda2
3 xfsbufd 1382 WRITE sdb2
3 pdflush 42 WRITE sdb2
3 firefox 2939 READ sda2
2 pdflush 42 WRITE sda2
1 xfssyncd 704 WRITE sda2
1 xfssyncd 1384 WRITE sdb2
1 pdflush 42 WRITE sda2
Cпасибо Опеннету за оптимизацию пробелов...