Todo el dispositivo de salida se borra independientemente de si su tamaño es un múltiplo del tamaño de bloque al que pasa dd
o no.
El notrunc
indicador no tiene efecto cuando la salida es un archivo de dispositivo, porque truncar un archivo de dispositivo no tiene ningún efecto. Si la salida fuera un archivo normal, tendría el efecto de que el archivo de salida no se trunca antes de escribir, lo que en algunos sistemas de archivos significa que los datos antiguos se sobrescriben (en lugar de escribir nuevos bloques de datos y dejar el resto sin adjuntar), sin embargo, esto no sería útil ya que esta propiedad no está garantizada por todos los sistemas de archivos y, además, el comando no solo sobrescribirá el archivo, sino que también seguirá escribiendo hasta que se llene el disco de salida (o se produzca algún otro error).
En lugar de usar dd
y preocuparse por si lo está usando correctamente (como sucede, funciona en este caso particular, pero es complicado y a veces no funciona ), solo usecat
.
cat /dev/zero >/dev/sdX
A pesar de la creencia popular en la web, no hay absolutamente ninguna magia dd
que lo haga de alguna manera más adecuado para escribir en un disco. La magia está en los /dev
archivos. Cualquier herramienta que pueda hacer frente a datos binarios, como cualquier moderno cat
o head
, puede hacer el mismo trabajo que a dd
menos que pase indicadores como seek
o skip
.
Tenga en cuenta que un problema compartido por dd
y cat
es que en una operación exitosa, se producirá un error con "No queda espacio en el dispositivo" (ENOSPC). Si coloca esto en un script, deberá verificar que el error sea ENOSPC o usar un método diferente. Un método más confiable es determinar primero el tamaño del dispositivo (por ejemplo, usarlo /proc/partitions
en Linux), luego escribir exactamente el número correcto de bytes con una herramienta como head
.
size=$(</proc/partitions awk '$4 == "sdX" {print $3}')
head -c "${size}k" /dev/zero >/dev/sdX
Gilles 'SO- deja de ser malvado'
fuente