Editado: no ejecute esto para probarlo a menos que desee destruir datos.
¿Podría alguien ayudarme a entender lo que tengo?
dd if=/dev/zero of=/dev/sda bs=4096 count=4096
P: ¿Por qué específicamente 4096
count
?dd if=/dev/zero of=/dev/sda bs=512 count=4096 seek=$(expr blockdev --getsz /dev/sda - 4096)
P: ¿Qué hace exactamente esto?
Respuestas:
Esto pondrá a cero los primeros 16 MiB de la unidad. 16 MiB es probablemente más que suficiente para destruir cualquier estructura de "inicio de disco" mientras es lo suficientemente pequeño como para que no demore mucho.
blockdev --getsz
obtiene el tamaño del dispositivo de bloque en "sectores de 512 bytes". Entonces, este comando parece que estaba destinado a poner a cero los últimos 2 MiB de la unidad.Lamentablemente, este comando tiene una sintaxis rota. Espero que el comando originalmente fuera
y los backticks se perdieron en algún lugar a lo largo de la línea de personas que lo copiaron / pegaron entre diferentes entornos.
Las tablas de partición antiguas, los metadatos LVM, los metadatos de incursión, etc. pueden causar problemas al reutilizar una unidad. Poner a cero las secciones al inicio y al final de la unidad generalmente evitará estos problemas, mientras que es mucho más rápido que poner a cero toda la unidad.
fuente
expr blockdev --getsz /dev/sda - 4096
sería un error de sintaxis deexpr
. Creo que el comando previsto era...seek="$(expr "$(blockdev --getsz /dev/sda)" - 4096)"
. O mejor:...seek="$(($(blockdev --getsz /dev/sda) - 4096))"
Esto borrará el primero
4096*4096=16MB
y el último512*4096=2MB
de su disco duro, que contienen estructuras importantes útiles para la recuperación. Supongo que este código fue publicado maliciosamente.Nunca me he encontrado con una situación en la que especificar explícitamente
count
otro que no sea1
útil. Yo he borrado el primer bloque si quería asegurarse de que no estaba dejando ningún rastro de la MBR detrás ...fuente
sda
. Más probablesdb
osdc
. Pero puedo estar equivocado, por supuesto ...Esos comandos sobrescribirán su dispositivo sda con ceros: el primero hará los primeros 16 MB (tamaño de bloque de 4096 y recuento de 4096 bloques) y el segundo sobrescribirá los últimos 2 MB (tamaño de bloque 512 con 4096 bloques) con ceros. (No se está borrando técnicamente, y eso se relaciona con mi primer punto a continuación).
(esa fue la parte ya mencionada en otras respuestas, incluida aquí para completar)
Otra cosa que vale la pena mencionar es que el tamaño del bloque tiene efectos, pero generalmente solo se ven en operaciones de alto volumen. La forma más eficiente (más rápida) de ejecutar el comando es si el tamaño del bloque del comando coincide con el tamaño de acceso del dispositivo; de lo contrario, se pierde tiempo.
Si está interesado, puede intentar crear un archivo con un millón de fragmentos de 1 bloque, y un archivo con 1 millón de fragmentos de bloque y ver la diferencia:
Como puede ver, el tamaño de bloque tiene un impacto masivo en la eficiencia. Tal vez sea una barra lateral para el OP, pero siento que todavía es relevante.
TL; DR: No ejecute código arbitrario que encuentre en la red, o que alguien en quien no confía le dé. Arruinará tu día.
fuente
Don't execute arbitrary code you find on the net
líneaOtros han explicado lo que hacen, así que me saltearé eso.
El punto de
dd
tener una separaciónbs
y uncount
argumento es quebs
controla cuánto se escribe a la vez . La especificación de valores realmente grandes parabs
requerirá un búfer realmente grande en el programa, y la especificación de valores inferiores al tamaño de bloque del dispositivo será lenta porque el núcleo tiene que construir un bloque completo para escribir en el dispositivo (en casos como este puede probablemente guarde las escrituras en un búfer hasta que haya un bloque completo, en otros casos, podría tener que leer lo que ya está en el disco). Como los dos comandos usan valores diferentes parabs
, eso me lleva a pensar que podría haberlos encontrado en dos sitios diferentes. Los discos duros solían tener un tamaño de bloque de 512 bytes, correspondiente albs=512
del último comando, pero algunos (6-8 creo) hace años comenzaron a hacer discos con un tamaño de bloque de 4096 bytes, haciendobs=4096
una mejor elección para los discos modernos.fuente
bs
es mucho más alto que eso . Un solo comando SATA puede leer o escribir múltiples sectores, por lo que el núcleo fusiona las E / S antes de enviarlas. Cualquier lugar desdebs=64k
hastabs=1024k
es razonable (el tamaño de caché L3 es a menudo 4-8MiB). A menudo usobs=128k
, que es la mitad del tamaño de caché L2 en las CPU Intel modernas. (dd
incluye dos operaciones de memcpy: en laread(2)
fuente (incluso si es / dev / zero), ywrite(2)
. IIRC,sdd
tenía una opción para escribir ceros, lo que ahorraría un poco de tiempo de CPU. Realmente solo es relevante si el destino es algo que no sea un disco).iostat -x 4
produce la fusión de la solicitud de E / S, observe la salida de o algo así y observe las columnas rrqm / s (solicitudes de lectura fusionadas por segundo) y wrqm / s.ADVERTENCIA:
dd if=/dev/zero of=/dev/
se utiliza para limpiar una unidad o dispositivo antes de copiar datos forenses. La unidad o dispositivo siempre debe desinfectarse antes de copiar información de un sistema bajo investigación forense para mitigar la contaminación cruzada. Por lo tanto, no es un comando incorrecto, el usuario final debe comprender para qué se utiliza o destruirán sus datos. Si esto es lo que desea, entonces verifique la operación de escritura cerodd if=/dev/sda | hexdump -C | head
.Fuente: Guía práctica para investigaciones forenses informáticas por el Dr. Darren Hayes
fuente
Utilizo
dd if=/dev/zero of=/dev/sdX oflag=sync
para probar la calidad de una unidad USB o tarjeta MicroSD insertada ANTES de usarla con gparted, fdisk o dd con una imagen de disco. Creo que esta es una idea prudente, especialmente con los medios MicroSD que tienen un mal historial de calidad.Por supuesto, tenga cuidado con of = sdX porque no hay perdón con un borrado accidental del disco. Verifique que X = letra de unidad del objetivo deseado.
fuente