next up previous contents index
Next: sortper ordinare i Up: Comandi buffi Previous: tarl'archiviatore a nastro

dd, il duplicatore di dati

La leggenda narra che all'inizio dei tempi, quando fu creato il primo UNIX, i suoi sviluppatori avevano bisogno di un comando a basso livello per copiare i dati tra dispositivi. Dato che avevano molta fretta, decisero di prendere in prestito la sintassi usata dalle macchine IBM-360, e di sviluppare in seguito un'interfaccia consistente con quella degli altri comandi. Il tempo passò, e tutti si erano talmente abituati allo strano modo di usare il comando dd che rimase com'era. Non so se è vero, ma è una bella storia.

Opzioni

A dire la verità, dd non è proprio diverso dagli altri comandi Unix: è un filtro, che legge per default dall'input standard e scrive sull'output standard. Così, se digitate semplicemente dd al terminale, resta in silenzio aspettando dell'input, e ctrl-C è l'unica cosa sensata da digitare.

La sintassi del comando è la seguente:

dd  [if=file] [of=file] [ibs= byte] [obs=byte] [bs=byte] [cbs=byte] [skip=blocchi]
[seek=blocchi] [count=blocchi] [conv={ascii, ebcdic, ibm, block, unblock,
lcase, ucase, swab, noerror, notrunc, sync}]

Tutte le opzioni hanno la forma opzione=valore. Non sono permessi spazi né prima né dopo il segno di uguale; disturbava, dato che la shell in una situazione del genere non espandeva un nome di file, quindi non ve ne dovete preoccupare. È anche importante riordare che tutti i valori sotto forma di numeri (byte e blocchi qui sopra) possono essere seguiti da un moltiplicatore. Le possibili scelte sono b per blocchi, che moltiplica per 512, k per kilobyte (1024), w per parole (2) e xm moltiplica per m.

La spiegazione delle opzioni è data qui sotto.

Esempi

L'esempio classico è quello in cui siete incappati quando avete provato a creare il primo dischetto Linux: come scrivere su un floppy senza un filesystem MS-DOS. La soluzione è semplice:

% dd if=disk.img of=/dev/fd0 obs=18k count=80
Ho deciso di non usare ibs perché non so qual'è la grandezza di blocchi migliore per un hard disk, ma in questo caso non avrei fatto nessun danno se al posto di obs avessi usato bs - potrebbe anche essere stato leggermente più veloce. Notate l'esplicitazione del numero di settori da scrivere (18KB vengono occupati da un settore, quindi count viene impostato a 80) e l'uso del nome a basso livello del dispositivo floppy.

Un'altra applicazione utile di dd è legata al backup su rete. Supponiamo di essere sulla macchina alfa, e che sulla macchina beta ci sia l'unità a nastro /dev/rst0, con un file tar che ci interessa prendere. Abbiamo gli stessi privilegi su entrambe le macchine, ma non c'è spazio su beta per mettere il file tar. In questo caso, possiamo scrivere

% rsh beta 'dd if=/dev/rst0 ibs=8k obs=20k' | tar xvBf - 
per fare l'intera operazione in un solo passo. In questo caso, abbiamo usato le possibilità date da rsh di leggere dal nastro. Le dimensioni di input ed output sono impostate al default per questa operazione, cioè 8KB per leggere dal nastro e 20KB per scrivere sulla ethernet; dal punto di vista dell'altro estremo del tar, c'è lo stesso flusso di byte che si può prendere dal nastro, eccetto per il fatto che arriva in maniera non costante, ed è necessaria l'opzione B.

Dimenticavo: non credo proprio che dd sia un acronimo per ``duplicatore dati'', ma almeno è un buon modo per ricordarsi il suo significato...


next up previous contents index
Next: sortper ordinare i Up: Comandi buffi Previous: tarl'archiviatore a nastro


Fri Sep 19 00:41:53 CEST 1997