Come usare il comando dd in Linux

Dd Guide 00 Featured Image

dd è uno dei comandi più importanti in Linux, utilizzato principalmente per il backup di dischi rigidi e partizioni. Quando utilizzato correttamente, dd può essere uno strumento potente per scrivere dati da una partizione a un’altra e per eseguire diverse operazioni con i file. Qui ti mostriamo come utilizzare il comando dd in modo efficace.

Indice dei contenuti

  • La storia di dd
  • Operandi di base
  • Creazione di un’immagine disco
  • Salvataggio di un’immagine disco su una partizione
  • Creazione di un’immagine disco compressa
  • Specificare una dimensione del blocco
  • Cancellazione di un disco rigido
  • Creazione di un’unità USB avviabile
  • Clonazione di partizioni specifiche usando dd
  • Dumping del contenuto di un CD usando dd
  • Masterizzazione del dump ISO su CD
  • Domande frequenti

Leggi anche: 5 distribuzioni Arch Linux che sono più facili da installare e usare

La storia di dd

Il comando è stato originariamente sviluppato presso i laboratori Bell della AT&T negli anni ‘70 da un informatico di nome Ken Thompson. È stato sviluppato per sistemi basati su Unix e ha ricevuto un nome scelto come riferimento a una dichiarazione trovata nel Job Control Language di IBM, chiamato “DD”. Si può notare che la sintassi del comando assomiglia strettamente a una dichiarazione nel Job Control Language.

Il comando è stato originariamente progettato come un’utilità per convertire ASCII in EBCDIC e viceversa. È stato integrato per la prima volta con una versione di Unix nel 1974, con il rilascio della 5ª edizione del sistema operativo.

dd è stato chiamato “distruttore di dischi” come uno scherzo nella comunità Unix a causa della sua capacità di distruggere dati su dischi rigidi quando utilizzato in modo improprio.

Leggi anche: Come crittografare i tuoi file nel cloud usando Rclone

Operandi di base

Ora che sai un po’ di più sul background del comando e delle sue capacità distruttive quando utilizzato in modo errato, è tempo di imparare come sfruttare tutto ciò che offre agli utenti di diverse distribuzioni Linux.

Per prima cosa, visualizza il manuale usando il flag --help:

dd --help

Dd Guide 01 Dd Print Help

Ci sono due operandi per il comando che sono utilizzati più comunemente. Sono if e of, che stanno per “input file” e “output file” rispettivamente. L’operando if viene utilizzato per rappresentare la posizione di origine, mentre l’operando of viene utilizzato per rappresentare la posizione in cui intendi salvare i dati dalla posizione di input.

dd if= of=

Le posizioni di origine e di output più comuni includono dischi rigidi, partizioni e immagini disco.

Prima di utilizzare il comando, potrebbe essere utile utilizzare l’utilità fdisk per visualizzare le partizioni sul tuo sistema. Questo può essere facilmente fatto usando il flag -l del comando:

sudo fdisk -l

Dd Guide 02 List Fdisk Partitions

Leggi anche: 4 modi per clonare un intero disco rigido su Linux

In questo caso, if viene utilizzato per rappresentare il disco “dev/sda”, e of rappresenta il disco “dev/sdb”, dove i dati da “dev/sda” saranno salvati:

dd if=/dev/sda of=/dev/sdb

Dd Guide 03 Duplicate Device

Creazione di un’immagine disco

Uno dei migliori casi d’uso per il comando è la creazione di immagini disco nel formato di file “.img”. Questo è estremamente utile per il backup dei dati sul tuo sistema basato su Linux ed è probabilmente il modo più veloce e semplice per eseguire il backup di un intero disco rigido.

La logica qui è principalmente la stessa in questo caso, con l’operando if che rappresenta il disco “dev/sda” e l’operando of che rappresenta un file “.img”, dove i dati dal disco rigido saranno salvati:

dd if=/dev/sda of=/tmp/image.img

Dd Guide 04 Dump Partition To Img

Leggi anche: La guida definitiva ai comandi Apt e Apt-Get

Salvataggio di un’immagine disco su una partizione

Creare un’immagine disco con il comando è abbastanza semplice, ma lo è anche la versione inversa di quel processo.

In questo scenario, il nostro file immagine disco sta agendo come file di input, e la nostra nuova partizione sta agendo come file di output. L’utilità sta salvando i dati dalla nostra immagine disco sulla nostra partizione “dev/sdb”:

dd if=/tmp/image.img of=/dev/sdb

Dd Guide 05 Write Img To Device

Leggi anche: Come usare il comando ps in Linux per terminare un processo

Creazione di un’immagine disco compressa

Se crei un’immagine disco di un disco rigido a grandezza naturale, puoi immaginare che la dimensione del file dell’immagine disco finale sarà probabilmente piuttosto grande. Per questo motivo, l’utilità dd ha una funzione che crea immagini disco compresse.

Un’immagine disco compressa può essere creata utilizzando il comando pipe |. In questo caso, viene utilizzato per prendere il contenuto del file di input e eseguire il comando gzip con un flag -c, con il contenuto che viene impacchettato in un file “.gz”:

dd if=/dev/sda | gzip -c > /tmp/image.gz

Dd Guide 06 Create Compressed Dump

Leggi anche: Come usare cURL per il trasferimento dati da riga di comando e altro

Specificare una dimensione del blocco

Puoi anche giocare con la velocità dell’operazione del comando dd. Questo può essere realizzato utilizzando l’operando bs, che viene utilizzato per rappresentare la dimensione del blocco. La dimensione del blocco rappresenta il numero di byte che dd copia nel file di output in un’unica istanza. È rappresentata utilizzando multipli di 1024 byte, e il valore predefinito è impostato a 512 byte. Maggiore è la dimensione del blocco, più velocemente i dati saranno salvati nel file di output.

In questo caso, stiamo impostando la dimensione del blocco a 2048:

dd if=/dev/sda of=/tmp/image.img bs=2048

La dimensione del blocco può anche essere specificata in kilobyte:

dd if=/dev/sda of=/tmp/image.img bs=2K

Dd Guide 07 Img Dump Modify Blocksize

Leggi anche: Come usare il comando lsof in Linux per elencare i file aperti

Cancellazione di un disco rigido

dd può anche essere utilizzato per cancellare il tuo disco rigido. Questo viene realizzato leggendo zeri o caratteri casuali da “dev/zero” o “dev/urandom” e salvandoli sul disco rigido/partizione, sovrascrivendo i dati su di esso. Questo è estremamente utile quando vuoi assicurarti che i tuoi dati non possano essere facilmente recuperati dopo aver venduto o altrimenti smaltito il tuo disco rigido.

Sovrascrivere un disco rigido usando zeri:

dd if=/dev/zero of=/dev/sdb

Dd Guide 08 Zeroing Disk

Puoi anche sovrascrivere il dispositivo utilizzando caratteri casuali:

dd if=/dev/urandom of=/dev/sdb

Dd Guide 09 Randomized Disk

Leggi anche: Come eseguire comandi Bash in background in Linux

Creazione di un’unità USB avviabile

La creazione di unità flash USB avviabili utilizzando file “.iso” con il comando è semplice:

dd if=os.iso of=

Dd Guide 10 Write Image To Device

Clonazione di partizioni specifiche usando dd

Un altro brillante utilizzo per dd è la clonazione di partizioni attive sul tuo sistema Linux. A differenza di un file IMG, la clonazione consente di creare una copia esatta di una particolare partizione e utilizzarla immediatamente. Questo può essere utile se hai una configurazione multi-disco e desideri creare partizioni ridondanti per il tuo sistema.

Per clonare la partizione da “dev/sda4” a “dev/sdd1”.

dd if=/dev/sda4 of=/dev/sdb1 conv=noerror,sync

Il parametro conv ti consente di includere opzioni aggiuntive per modificare il comportamento di dd. Questo può essere semplice come convertire un nome di file in maiuscolo o qualcosa di complesso come cambiare la proprietà di un blocco. In questo caso, sto usando noerror e sync:

  • L’opzione “noerror” dice a dd di continuare a copiare attraverso un file di dispositivo anche se riporta errori di dispositivo. Questo può essere utile se il dispositivo in cui vive la tua partizione è già difettoso, perché “noerror” garantisce che dd copierà tutti i dati recuperabili in quella partizione.
  • L’opzione “sync” dice a dd di riempire ogni blocco di dati in arrivo nel buffer di copia. Ciò significa che dd si assicurerà che ogni bit di dati che può copiare sia esattamente lo stesso tra la sorgente e la destinazione. Questo è per garantire l’integrità dei dati della partizione che stai clonando.

Dd Guide 11 Strict Clone Partition

Leggi anche: Come usare il comando lp in Linux per stampare file dal terminale

Dumping del contenuto di un CD usando dd

È anche possibile utilizzare dd come strumento di dumping per i contenuti del disco. Simile a un file IMG, puoi farlo utilizzando un’unità disco come input e l’estensione .ISO come output. Considera il seguente esempio:

dd if=/dev/cdrom of=/tmp/dump.iso conv=noerror,sync

Questo comando dirà a dd di caricare il dispositivo CD-ROM e copiare i suoi contenuti in un file ISO.

Dd Guide 12 Dump Cd Disc

Una volta completato, puoi utilizzare il comando file per verificare se il file dumpato è un’immagine ISO 9660:

file /tmp/dump.iso

Masterizzazione del dump ISO su CD

Successivamente, puoi utilizzare dd per creare duplicati del file ISO che hai appena creato. Per farlo, devi inserire un disco vuoto nel tuo lettore e utilizzare “dev/cdrom” come file di output di dd. Con questo, puoi quindi eseguire il seguente comando per masterizzare correttamente il file ISO su disco:

dd if=/tmp/image.iso of=/dev/cdrom obs=32k seek=0

Questo comando non tenta di utilizzare alcun bypass di errore o controlli di integrità. Invece, imposta due opzioni specifiche per la scrittura su CD-ROM:

  • L’opzione “obs” imposta la dimensione dei blocchi che dd sta per scrivere sul disco. In questo caso, il comando utilizza 32 kilobyte come base per i trasferimenti su supporti ottici.
  • D’altra parte, l’opzione “seek” dice a dd di impostare l’inizio del trasferimento su un blocco di dati specifico. Per trasferire correttamente su un CD-ROM, è importante impostarlo su 0 in modo che dd scriva immediatamente sul primo settore del disco.

Dd Guide 13 Burn Cd Disk

Leggi anche: 8 prompt Bash utili e interessanti

Domande frequenti

È possibile vedere il progresso di un’operazione dd?

Sì! È incredibilmente facile guardare il progresso di un’operazione dd. Per farlo, tutto ciò che devi fare è includere il parametro status alla fine del tuo comando dd:

dd if=/dev/sda4 of=/dev/sdd1 conv=noerror,sync status=progress

L’opzione “progress” dice a dd di stampare i blocchi che sta attualmente copiando sull’output standard, il che consente di visualizzare il progresso del comando. Oltre all’opzione “progress”, il parametro di stato accetta anche due valori aggiuntivi:

  • Noxfer: Il valore “noxfer” è simile a “progress” ma non stampa le informazioni sul trasferimento complessivo alla fine del comando. Questo può essere utile se stai utilizzando comandi dd come parte di un grande pipe UNIX.
  • None: Il valore “none” dice a dd di non stampare alcuna informazione tranne gli errori quando è in esecuzione. Questo è utile se stai eseguendo attività dd programmate come la creazione di file IMG di backup per partizioni attive.

È corretto impostare sempre una dimensione del blocco alta per accelerare i trasferimenti?

No. Anche se impostare una dimensione del blocco alta accelererà sicuramente il tasso di trasferimento di dd, farlo non garantirà che il dispositivo su cui stai scrivendo si inizializzi correttamente. Ad esempio, impostare una dimensione del blocco alta per supporti ottici come un CD-ROM o un DVD-ROM può portare a dischi illeggibili quando riprodotti su un lettore di dischi.

Una buona regola generale è utilizzare dimensioni di blocco elevate solo quando si dumpano dati da supporti come dischi e chiavette USB. Inoltre, è anche buona pratica impostare la dimensione massima del blocco a 2048 kilobyte. Questo assicura che tu possa comunque ripristinare il contenuto di un disco su un CD o DVD.

Ho provato a creare un’unità USB avviabile ma non si è avviata. dd non funziona?

No! La ragione più probabile per cui non si è avviata è che il file che dd ha copiato sull’unità USB non è un file avviabile. Ad esempio, scrivere un installatore CD su un’unità USB non imposterà i flag appropriati per renderlo avviabile.

Un modo per assicurarti che sia avviabile è controllare le sue proprietà tramite il programma file. Ad esempio:

file /Downloads/ubuntu-21.10.iso

Da lì, devi quindi controllare le proprietà stampate nell’output standard. Un file avviabile dovrebbe essere un’immagine disco o un file ibrido ISO.

Crediti immagine: Unsplash