Построение графика скоростных характеристик винчестера: различия между версиями
Материал из Linux Wiki
Перейти к навигацииПерейти к поиску
Rain (обсуждение | вклад) (Новая: <source lang="bash"> #!/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_ca...) |
Rain (обсуждение | вклад) |
||
(не показано 6 промежуточных версий этого же участника) | |||
Строка 1: | Строка 1: | ||
Скрипт выполнять от рута, то, что выдаст скрипт - скинуть в file.dat (или указать -o file.dat), после чего выполнить gnuplot myfile.plot > file.png, где myfile.plot имеет такое содержимое: | |||
<pre> | |||
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 | |||
</pre> | |||
Второе значение во второй строке править под себя. | |||
---- | |||
<source lang="bash"> | <source lang="bash"> | ||
Строка 54: | Строка 68: | ||
echo -e "\e[36mВычисляем начальную скорость диска...\e[0m" | echo -e "\e[36mВычисляем начальную скорость диска...\e[0m" | ||
cleancache | cleancache | ||
initspeed="$(dd if="${1}" of=/dev/null bs=1M count=1000 2>&1 | awk '/ | 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" | echo -e "\e[36mНачальная скорость диска \e[35m"${initspeed}" Mb/sec\e[0m" | ||
step="$([ "$((${disksize}/${resol}))" -lt "$((${initspeed}*10))" ] && echo $((${initspeed}* | 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" | 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" | ||
Строка 64: | Строка 78: | ||
do | do | ||
sleep 0.2 | sleep 0.2 | ||
dd if=${1} of=/dev/null bs=1M skip=${i} count=$((${initspeed}*2)) 2>&1 | | LANG=C dd if=${1} of=/dev/null bs=1M skip=${i} count=$((${initspeed}*2)) 2>&1 | | ||
awk '/ | awk '/copied/{print "'$i'\t:::\t"$8}' | tee -a "${outfile}" | ||
done | done | ||
Строка 71: | Строка 85: | ||
</source> | </source> | ||
{{ToDo|Доделать построение графика}} | {{ToDo|Доделать нормальное построение графика}} | ||
[[Category:Общее]] | [[Category:Общее]][[Category:Скрипт]] |
Текущая версия на 19:25, 25 апреля 2009
Скрипт выполнять от рута, то, что выдаст скрипт - скинуть в 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: Доделать нормальное построение графика