script dd com horários

script dd com horários

Tentando descobrir a melhor abordagem para um script que fará o seguinte:

  1. Crie um script de loop que crie um arquivo de 10 GB usando dd onde, após a conclusão, remova o arquivo e repita 25 vezes ou se CTRL + C for digitado antes que o script tenha a chance de sair.
  2. No final de cada operação, ou seja, dd e depois rm, cronometre para sabermos exatamente quanto tempo dd e rm levaram

Até agora, estou pensando em algo nesse sentido:

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

Alguém tem uma solução melhor ou poderia ajustar um pouco isso?

Responder1

Ok, parece que esta é a maneira de fazer isso. Parece desagradável, mas 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

Responder2

Pode ser interessante comparar o tempo utilizado por

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

e

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

Você deve incluir syncpara medir o tempo para terminar de gravar no dispositivo de destino.

No meu computador principal, é [15-20%] mais rápido de usar oflag=direct, ao gravar em um SSD SATA (onde o meu /tmpestá localizado).


No entanto, pode haver problemas com oflag=direct, consulte o link a seguir,

Por que não usar sempre 'oflag=direct' em 'dd'?

informação relacionada