Si encuentras algún detalle que no comprendes puedes dejarlo en los comentarios y te ayudaremos lo más rápido posible.
Solución:
Solución 1:
puede usar un shellscript en combinación con dd.
p.ej
while (true); do
number=$((($RANDOM * 32768 + $RANDOM)))
dd if=/dev/urandom of=/dev/sdx1 seek=$number count=1
done
Solo tienes que modificar el número que se genera desde $RANDOM para que se ajuste a tus Bloques.
EDITAR 2016: tenga en cuenta que la solución anterior era incorrecta. Debido a que queremos sobrescribir un byte en una posición aleatoria en el flujo de salida, tenemos que usar buscar en lugar de omitir, como se menciona en los comentarios.
Solución 2:
Mi sistema no está roto y escribiendo desde /dev/random
es de unos 650Kb/s. escribiendo desde /dev/urandom
es 7Kb/s.
He trabajado en este problema por mí mismo y para una solución puramente bash, debe ser realista sobre cuál es su objetivo porque, a menos que su objetivo sea aprender a hacerlo en bash porque el punto es hacerlo TODO en bash, el objetivo de limpiar un disco de forma segura se logra mejor de otras maneras, aunque bash es útil en la solución.
Sin embargo, el algoritmo bash de evildead para seleccionar aleatoriamente dónde dd escribirá en el disco funciona, /dev/urandom es significativamente más lento que /dev/random y creo que es menos seguro salpicar el disco con trozos de datos aleatorios y creo que será más difícil recuperar datos de una unidad borrada si rápidamente hace dos pasadas escribiendo uno y luego ceros.
Para mí, escribí unos en el disco con:
tr ' ' '377' < /dev/zero | pv > /dev/sdz
luego escribí ceros en el disco con:
pv < /dev/zero > /dev/sdz
Nótese el uso de pv. Es un gran programa aunque tienes que instalarlo en la mayoría de los sistemas. Fácil de encontrar, no parece venir con una página de manual, pero hay una en línea. Muestra el progreso de los datos que pasan a través de una tubería y, con algunos programas, incluso puede configurarlo para que se detenga después de pasar una cierta cantidad de datos.
ENTONCES, simplemente porque estaba irritado porque ninguna solución de bash escribiría números aleatorios tan rápido como cualquiera de los escritos anteriores, escribí un pequeño programa en C llamado svrandom para generar números aleatorios RÁPIDAMENTE al que llamé desde bash de la siguiente manera:
while :; do ./svrandom; done | pv > /dev/sdz
En mi sistema que llena la unidad /dev/sdz con números aleatorios tan rápido como lo hace escribir /dev/zero. Se logró el objetivo de borrar la unidad con números aleatorios y se usó bash en la solución.
/* svrandom
a small program from shadowvision.com September 2015 to generate strings of random numbers.
the default setting of 10000000 gives about 453 megs, adjust as
needed */
#include
#include
int main()
int r,a,b;
/* adjust following number as needed to suit your string length */
for(a=0;a<10000000;a++)
for(b=0;b<5;b++)
r=rand();
printf("%d",r);
return(0);
En la fuente menciono que puedes controlar la longitud del número aleatorio string ajustando un número. Si lo llama desde un ciclo while, no tendrá que hacerlo, aunque puede haber un retorno de carro al final de cada ciclo, pero si desea uno continuo string desde solo el programa tendrás que cambiar el número.
¡recorte! mirando alrededor encontré esta solución en https://superuser.com/questions/19326/how-to-wipe-free-disk-space-in-linux
openssl enc -aes-256-ctr -pass pass:"$(dd if=/dev/urandom bs=128 count=1 2>/dev/null | base64)" -nosalt < /dev/zero |pv > /dev/sdx
y como dijo el tipo allí, no puedo creer lo rápido que es esto. Está escribiendo en el disco más rápido de lo que pensaba que era la velocidad máxima de escritura del disco.
Me parece que este comando está usando openssl para cifrar un string de ceros de /dev/zero usando /dev/urandom como semilla pero no estoy 100% seguro. mi solución con el programa C para escribir números aleatorios escribe en mi sistema a 82 mbps, esta solución de openssl está escribiendo a 100 mbps. ¡guau!
valoraciones y reseñas
Acuérdate de que puedes optar por la opción de interpretar si te fue preciso.