Inicio > General > Comprobar velocidad de los discos duros en linux 2

Comprobar velocidad de los discos duros en linux 2

En el post anterior publique una entrada sobre como medir la velocidad de los discos de nuestro equipo, aunque no me terminaba de convercer ya que únicamente mostraba la velocidad de lectura, y es un dato poco preciso a mi punto de vista, ya que el coste mayor suele ser el de escritura.

Por eso, investigando un poco encontré he encontrado un script que calcula el acceso a disco mediante la utilidad dd, lo he modificado un poco para calcular el acceso en varias iteraciones y que realize la media y la desviación estandar, con eso tendremos unos damos mas precisos.

La salida del script sería la siguiente.

# bash ddtest2.sh
Script para calcular el rendimiento del disco duro mediante dd
Recomendable abrirlo con un editor para configurar las opciones
Se necesitan los programas: bc, cut, sed y bash

bs=1024 count=1048576 ... 375 MB/sec Desviacion estandar 5
bs=2048 count=524288 ... 604 MB/sec Desviacion estandar 4
bs=4096 count=262144 ... 730 MB/sec Desviacion estandar 10
bs=8192 count=131072 ... 804 MB/sec Desviacion estandar 3
bs=16384 count=65536 ... 851 MB/sec Desviacion estandar 23
bs=32768 count=32768 ... 858 MB/sec Desviacion estandar 6
bs=65536 count=16384 ... 837 MB/sec Desviacion estandar 8
Media: 722 MB/sec

Lo dicho, el script en cuestión.

#!/bin/bash
# A UNIX / Linux shell script to measure hard drive speed on linux
# This script write in the disk, and measure the disk speed.
# -------------------------------------------------------------------------
# Copyright (c) 2012 David Trigo <david.trigo@gmail.com>
# This script is licensed under GNU GPL version 3.0 or above
# -------------------------------------------------------------------------
# Last updated on : Feb-2012 - Script created.
# -------------------------------------------------------------------------

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

#El archivo temporal que se utilizara para hacer el test
#Debe ser un directorio del disco duro que queremos testear y el fichero temporal
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 65536"

#El numero de veces que se hara el test con cada bloque, se hara la media
#Si es mayor que uno, se hara la desviacion estandar
n_times=3

#El tamano del archivo que se utilizara para el test (en BLOCKS) 1048576=1GB
count=1048576

#Se puede cambiar a 100MB
#count=102400

#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
clearCaches=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 -ne "Se necesitan los programas: bc, cut, sed y bash\n"

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" | cut -d " " -f $pos | sed s/","/"."/)

actual="$actual $partial_result"

time=$[$time+1]

rm -f $test_file

#http://ubuntuforums.org/showthread.php?t=1196814
if [ $clearCaches -eq 1 ]; then echo "3" > /proc/sys/vm/drop_caches; fi

echo -n "."

done

#Hacemos la media de las medidas acumuladas para un mismo tamanyo de bloque

media=0

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

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

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

echo -n " $media MB/sec"

#Hacemos la desviacion estandar para ver como se comporta y cuan fiable es la media

if [ $n_times -gt 1 ]; then
aux=0

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

aux=$(echo "sqrt($aux/($n_times-1))"| bc)

echo -n " Desviacion estandar $aux"

fi

#Disminuimos el numero de bloques para que el tamanyo del fichero sea el adecuado ya que se aumenta el tamanyo del bloque
count=$[$count/2]

echo ""

done

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

echo "Media: $media MB/sec"

Categorías:General Etiquetas: , , ,
  1. octubre 30, 2012 a las 10:49 pm

    My brother suggested I might like this web site. He was totally right.
    This post truly made my day. You cann’t imagine just how much time I had spent for this information! Thanks!

    Lilian

  2. Damian
    abril 17, 2014 a las 12:17 pm

    Para discos ssd no me funciona bien parece

    .//ddtest.sh
    Script para calcular el rendimiento del disco duro mediante dd
    Recomendable abrirlo con un editor para configurar las opciones
    Se necesitan los programas: bc, cut, sed y bash
    bs=1024 count=1048576 .
    .. 752 MB/sec Desviacion estandar 0
    bs=2048 count=524288 … 0 MB/sec Desviacion estandar 0
    bs=4096 count=262144 … 0 MB/sec Desviacion estandar 0
    bs=8192 count=131072 … 0 MB/sec Desviacion estandar 0
    bs=16384 count=65536 … 0 MB/sec Desviacion estandar 0
    bs=32768 count=32768 … 0 MB/sec Desviacion estandar 0
    bs=65536 count=16384 … 0 MB/sec Desviacion estandar 0
    Media: 107 MB/sec

    • abril 20, 2014 a las 11:16 pm

      Has probado a revisar la linea 43, no sea caso que en la distribución que estés utilizando el parámetro del tiempo esté en otra posición?

  3. marzo 29, 2016 a las 10:55 pm

    excelente! si esta bien, hare referencia a esta entrada en el futuro. gracias

    • marzo 29, 2016 a las 11:42 pm

      Me alegro que te sirva, en principio debería funcionar, si ves que falla siempre puedes comentar😉
      Saludos.

  1. febrero 10, 2012 a las 9:38 pm
  2. febrero 15, 2012 a las 11:21 pm

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: