miércoles, enero 02, 2008

Script para medir la velocidad del disco duro

Se utiliza de la siguiente manera: "sh ddtest.sh"

Codigo:

#!/bin/bash

########################################################

########## INICIO VARIABLES DE CONFIGURACION ###########

########################################################

#El archivo temporal que se utilizara para hacer el test

#Debe ser un directorio del disco duro que queremos testear

test_file="/tmp/test"

#El tamano de los bloques con los que se haran el test

#deben ser consecutivos multiples de 2

bs="1024 2048 4096 8192 16384 32768"

#El numero de veces que se hara el test con cada bloque, se hara la media

n_times=1

#El tamano del archivo que se utilizara para el test (en bytes) 1000000=1GB

count=1000000

#La posicion del resultado que da 'dd'.

#Ejecutar: dd if=/dev/zero of=borrame bs=1024 count=10

#Mirar en que posicion esta el resultao en MB/s

#Ejemplo:

# >$ dd if=/dev/zero of=borrame bs=1024 count=10

# 10+0 records in

# 10+0 records out

# 10240 bytes (10 kB) copied, 9.7221e-05 s, 105 MB/s

#El 105 esta en la posicion 8 de la linea (separando por espacios)

pos=8

#Limpiar caches despues de cada test (recomendable). 1=si, 0=no

lcaches=1

###############################################

############ INICIO DEL PROGRAMA ##############

###############################################

echo "Script para calcular el rendimiento del disco duro mediante dd"

echo "Recomendable abrirlo con un editor para configurar las opciones"

echo "Se necesitan los programas: bc, awk y bash"

echo "Fuente:www.dabax.net Licencia:GPLv3"

n_count=0

total_results=0

for b in $bs; do

actual=""

time=0

n_count=$[$n_count+1]

echo -n "bs=$b count=$count "

while [ $time -lt $n_times ]; do

partial_result=$(dd if=/dev/zero of=$test_file bs=$b count=$count 2>&1 \

|grep "MB/s" | awk "{print \$pos}")

actual="$actual $partial_result"

time=$[$time+1]

rm -f $test_file

if [ $lcaches -eq 1 ]; then echo "3" > /proc/sys/vm/drop_caches; fi

echo -n "."

done

aux=0

for a in $actual; do aux=$(echo "$aux + $a" | bc); done

aux=$(echo "$aux / $n_times" | bc)

total_results=$(echo "$total_results + $aux" | bc)

echo -n " $aux MB/sec"

count=$[$count/2]

echo ""

done

media=$(echo "$total_results / $n_count" | bc)

echo "Media: $media MB/sec"

No hay comentarios.: