
Tratando de encontrar el mejor enfoque para un script que haga lo siguiente:
- 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.
- 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 sync
para 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=direct
cuando se escribe en un SSD SATA (donde /tmp
está ubicado el mío).
Sin embargo, puede haber problemas con oflag=direct
, consulte el siguiente enlace,