Esta é uma maneira muito rápida e eficiente de gravar strings de 64 kB de 0xFF várias vezes, usando awk
, consumindo < 8% da CPU e limitada apenas pela velocidade da unidade em que você está gravando.
Eu tentei usar tr
como foi sugerido aqui e achei que era muito lento e consome muita CPU traduzindo cada byte. Meu método funciona em blocos de 64 kB e é pelo menos 3,5x mais rápido do que o tr
baseado em caractere único (26 MB / s versus 7 MB / s no antigo PATA hw - terminando em 52 minutos em silêncio versus 3+ horas com alto ventilador de refrigeração revs ...). Eu gosto quando as pessoas ignoram o conhecimento básico da ciência da computação sem sequer testar sua opinião primeiro.
Eu recomendo criar o script a seguir usando printf
do shell em vez de tentar escrevê-lo em vi
, já que a maioria dos CD-ROMs de inicialização não fornecerá espaço tmp suficiente para o log do buffer copiar e colar 65,536 vezes ...
1) Componha o script
$ printf "echo | awk '{\n\twhile (1) {\n\t\tprintf(\"%%s\", \"" >/tmp/writeones.sh
$ for i in 'seq 1 65536'; do printf '7' >>/tmp/writeones.sh; done
$ printf "\");\n}\n}'\n" >>/tmp/writeones.sh
2) Teste o script:
$ sh /tmp/writeones.sh | od -Ax -tx1
000000 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
*
Ctrl+C
3) Execute o script e o pipe na sua unidade com dd (verifique se você tem a unidade certa !!!):
# sh /tmp/writeones.sh | dd of=/dev/ada0 bs=65536 &
Por que escolhi 64 kB? 1. Limitação da lista de argumentos do AWK, e 2. para o meu hardware, isso alcança a melhor velocidade para mim.
Eu também tentei escrever isso em shell usando o printf e descobri que ele era 40% mais lento e consumia 80% da CPU por causa de todos os garfos.