Interessante la questione di questi "sparse file".

In effetti il mio di utilizzare "dd" permetteva la creazione di un file, vuoto, la cui dimensione fisica corrisponde a quella logica. Il file è effettivamente riempito di zeri:
dd if=/dev/zero of=000.0 bs=1k count=$(expr 680 \* 1024)

La creazione di uno "sparse file" invece permette di creare un file effettivamente "vuoto" la cui dimensione fisica non corrisponde alla dimensione logica del file:
dd if=/dev/zero of=test.img bs=1k count=1 seek=$(expr 680 \* 1024)

Infatti negll'esempio precedente andiamo a scrivere 1024 byte di dati dopo aver fatto un salto di 680MB. Logicamente il file ha dimensione logica di 680M+1k, mentre lo spazio realmente occupato è di 1k.

Se si necessita di scrivere su un file vuoto "mantenendo" la dimensione logica iniziale, occorre a questo punto, "appendere" i dati, in quanto una scrittura diretta, "cancellerebbe" il salto di 680M.

Sono andato fin troppo oltre le mie competenze, ma credo che per capirlo fino in fondo occorre conoscere come il filesystem gestisce i file e ne archivia le caratteristiche.

ciao