L'intero dispositivo di output viene cancellato indipendentemente dal fatto che la sua dimensione sia un multiplo della dimensione del blocco a cui si passa dd
o meno.
Il notrunc
flag non ha alcun effetto quando l'output è un file di dispositivo, poiché il troncamento di un file di dispositivo non ha alcun effetto. Se l'output fosse un file normale, avrebbe l'effetto di non troncare il file di output prima della scrittura, il che su alcuni filesystem significa che i vecchi dati vengono sovrascritti (invece di scrivere nuovi blocchi di dati e lasciare il resto non attaccato), tuttavia ciò non sarebbe utile poiché questa proprietà non è garantita da tutti i filesystem e inoltre il comando non solo sovrascriverà il file, ma continuerà anche a scrivere fino a quando non viene riempito il disco di output (o si verifica qualche altro errore).
Invece di usare dd
e preoccuparti se lo stai usando correttamente (come succede, funziona in questo caso particolare, ma è complicato e talvolta non funziona ), basta usarecat
.
cat /dev/zero >/dev/sdX
Nonostante la credenza popolare sul web, non c'è assolutamente nulla di magico dd
che lo rende in qualche modo più adatto alla scrittura su un disco. La magia è nei /dev
file. Qualsiasi strumento in grado di far fronte a dati binari, come qualsiasi moderno cat
o head
, può fare lo stesso lavoro, a dd
meno che non passi bandiere come seek
o skip
.
Si noti che un problema condiviso da dd
ed cat
è che in caso di operazione riuscita, si risolveranno in "Nessuno spazio sul dispositivo" (ENOSPC). Se lo inserisci in uno script, dovrai verificare che l'errore sia ENOSPC o utilizzare un metodo diverso. Un metodo più affidabile consiste nel determinare innanzitutto le dimensioni del dispositivo (ad es. Utilizzando /proc/partitions
sotto Linux), quindi scrivere esattamente il giusto numero di byte con uno strumento come head
.
size=$(</proc/partitions awk '$4 == "sdX" {print $3}')
head -c "${size}k" /dev/zero >/dev/sdX