Построение графика скоростных характеристик винчестера
Материал из Linux Wiki
Перейти к навигацииПерейти к поиску
Скрипт выполнять от рута, то, что выдаст скрипт - скинуть в file.dat (или указать -o file.dat), после чего выполнить gnuplot myfile.plot > file.png, где myfile.plot имеет такое содержимое:
set terminal png set yrange [0:40] set title "Disk Speed" set xlabel "Mb" set ylabel "Mbyte/sec" plot "file.dat" using 1:3 title "Disk speed" with line 1
Второе значение во второй строке править под себя.
#!/bin/bash
# By Rain ;)
error() {
echo -e "\e[31m${1}\e[0m"
exit 1
}
cleancache() {
echo -en "\e[31mСброс кэшей... \e[0m"
echo 3 > /proc/sys/vm/drop_caches
echo -en "\e[33mСинхронизация... \e[0m"
sync
echo -e "\e[32mСпим...\e[0m"
sleep 3
}
resol='200'
[ "${UID}" != '0' ] && error 'Для доступа к устройству нужны права рута'
if [ -z "${1}" ]; then
error 'Укажите корректное блочное устройство'
elif [ ! -b "${1}" ]; then
error "${1} не блочное устройство"
fi
if [ "${2}" == '-o' ]; then
if [ ! -z "${3}" ]; then
if [ -e "${3}" ]; then
echo -e "\e[32m${3} \e[36mуже существует, используем заново...\e[0m"
if [ -f "${3}" ]; then
if [ -w "${3}" ]; then
outfile="${3}"
> "${outfile}"
else error "${3} недоступен для записи"
fi
else error "${3} не является обычным файлом"
fi
elif [ -w "${3%/*}" ] || [ -w '.' ]; then
outfile="${3}"
> "${outfile}"
else error "Не могу записать в ${3%/*}."
fi
else error 'Укажите файл результатов'
fi
else outfile="/dev/null"
fi
disksize="$(fdisk -l "${1}" 2>/dev/null | awk '/^Disk/&&/bytes$/{OFMT="%.f" ;print $5/1024/1024}')"
echo -e "\e[36mРазмер диска \e[35m${disksize} MiB\e[0m"
echo -e "\e[36mВычисляем начальную скорость диска...\e[0m"
cleancache
initspeed="$(LANG=C dd if="${1}" of=/dev/null bs=1M count=1000 2>&1 | awk '/copied/{OFMT="%.f" ; print $8*1}')"
echo -e "\e[36mНачальная скорость диска \e[35m"${initspeed}" Mb/sec\e[0m"
step="$([ "$((${disksize}/${resol}))" -lt "$((${initspeed}*10))" ] && echo $((${initspeed}*10)) || echo $((${disksize}/${resol})))"
echo -e "\e[36mНачинаем тестирование диска размером \e[35m${disksize} Mb \e[36mс шагом \e[35m${step} Mb \e[36mи размером куска в \e[35m$((${initspeed}*2)) Mb\e[36m, всего \e[35m$((${disksize}/${step})) \e[36mзамеров.\e[0m"
cleancache
for i in $(seq 0 ${step} "${disksize}")
do
sleep 0.2
LANG=C dd if=${1} of=/dev/null bs=1M skip=${i} count=$((${initspeed}*2)) 2>&1 |
awk '/copied/{print "'$i'\t:::\t"$8}' | tee -a "${outfile}"
done
exit 0
ToDo: Доделать нормальное построение графика