
Tentando descobrir a melhor abordagem para um script que fará o seguinte:
- 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.
- 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 sync
para 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 /tmp
está localizado).
No entanto, pode haver problemas com oflag=direct
, consulte o link a seguir,