Encontrei uma situação semelhante ao limpar com segurança um disco rígido externo (USB 2.0): longos períodos de leitura seguidos por alguns segundos de gravações de alto rendimento, quando esperava gravações de 100%. Eu usei pv para me mostrar uma velocidade geral de gravação (veja o comando abaixo) e eu estava recebendo uma média de 10MB / s, em rajadas de 14MB / s por ~ 10 segundos seguidos por alguns kB / s. Minha saída iostat se parecia muito com a sua.
Descobri que o problema era meu tamanho de bloco dd muito pequeno (512 bytes). Eu suspeito que o que está acontecendo é que o kernel estava lendo blocos em seus buffers de 1k por bloco, de forma que o dd possa sobrescrever 512 bytes por vez, o que é liberado. Eu não sou um especialista em kernel, então é só um palpite.
Eu posso dizer que bombeando meu tamanho de bloco dd para 72K fez uma grande diferença . Agora estou vendo > 40MB / s de gravações sustentadas. Isso é muito próximo do máximo teórico que o USB 2.0 pode fornecer (480Kb / s, sem contar a sobrecarga USB) e também muito próximo da velocidade máxima de gravação sustentada que esse disco de 10 anos pode atingir (algo como 55MB / s). Estou satisfeito que esta é mais ou menos velocidade bare-metal.
Aqui está o comando que estou usando para limpar a unidade:
openssl enc -aes-256-ctr -pass \
pass:"$(dd if=/dev/urandom bs=128 count=1 2>/dev/null | base64)" \
-nosalt </dev/zero \
| pv -bartpes 160041885696 -B 128K \
| dd bs=72K count=2170707 of=/dev/sdf iflag=fullblock
Linhas 1-3 pipe / dev / zero pela criptografia AES-256-CTR, usando uma senha gerada a partir de / dev / urandom. Então, é um fluxo de lixo criptograficamente aleatório.
A linha 4 mostra o progresso, dada a contagem de bytes do drive de 160GB e usando um tamanho de buffer de transferência em pv de 128KiB.
A linha 5 usa um tamanho de bloco que escolhi usando uma calculadora, tentando encontrar o maior múltiplo de 512 que era um fator do total de # bytes da unidade. iflag = fullblock faz o dd ler repetidamente em seu buffer até que ele tenha 1 bloco inteiro antes de gravar.