script dd con tiempos

script dd con tiempos

Tratando de encontrar el mejor enfoque para un script que haga lo siguiente:

  1. Cree un script de bucle que cree un archivo de 10 GB usando dd donde, al finalizar, elimina el archivo y luego lo repite 25 veces o si se escribe CTRL+C antes de que el script tenga la oportunidad de salir.
  2. Al final de cada operación, es decir, dd, luego rm, cronometra para que sepamos exactamente cuánto tiempo tardaron dd y rm

Hasta ahora, estoy pensando en algo como esto:

for i in {1..25}
  do
    time sh -c "dd if=/dev/zero of=/user/home/test.img bs=10G count=1" >> /tmp/dd_timed.txt && time sh -c "rm -f /user/home/test.img" >> rm_timed.txt
done

¿Alguien tiene una solución mejor o tal vez podría modificar esto un poco?

Respuesta1

Bien, parece que esta es la manera de hacer esto. Parece desagradable, pero funciona:

#!/bin/bash
for i in {1..25}
do
{ time dd if=/dev/zero of=/home/user/test.img bs=1G count=10 oflag=direct >& / dev/null ; } 2>> /tmp/dd_timed.txt && { time rm /home/user/test.img >& /dev/null ;  } 2>> /tmp/rm_timed.txt
done

Respuesta2

Puede resultar interesante comparar el tiempo utilizado por

time ( dd if=/dev/zero of=/tmp/test.img bs=1M count=1024; sync )

y

time ( dd if=/dev/zero of=/tmp/test.img bs=1M count=1024 oflag=direct;sync )

Debe incluirlo syncpara medir el tiempo necesario para terminar de escribir en el dispositivo de destino.

En mi computadora principal es [15-20%] más rápido de usar oflag=directcuando se escribe en un SSD SATA (donde /tmpestá ubicado el mío).


Sin embargo, puede haber problemas con oflag=direct, consulte el siguiente enlace,

¿Por qué no utilizar siempre 'oflag=direct' en 'dd'?

información relacionada