fb-pixel
SupportHost italian

Come creare copie dei dischi con il comando dd su Linux

Vuoi sapere come creare una copia da un disco a un altro, fare un backup di un SSD, una chiavetta o una scheda SD?

Tutto questo e altro ancora può essere eseguito con il comando dd. Con questo comando potremo copiare dischi e partizioni ed è quindi molto utile per fare copie identiche di dispositivi oppure per creare e ripristinare backup.

Vediamo come si usa il comando, partendo dalla sintassi di base e dalle sue opzioni.

Sintassi del comando dd

Il comando dd su Linux ci permette di clonare interi dischi (come ad esempio SSD, chiavette USB o schede SD). Inoltre questo comando può anche essere utilizzato per eliminare i dati da un disco e per creare delle USB bootable.

La sintassi di base del comando è questa:

dd if=/percorso-in-ingresso of=/percorso-di-destinazione [opzioni]

Per capire esattamente come funziona il comando facciamo un semplice esempio. Ho due schede SD, sda rappresenta la scheda sd che voglio copiare, mentre sdb è la scheda SD di destinazione (su cui voglio creare la copia esatta del contenuto originale di sda).

In questo caso quindi:

  • in if= inserirò il percorso della sorgente, nel mio esempio sda;
  • in of= inserirò il percorso di destinazione, nel mio caso sdb.

Il comando sarà quindi come questo:

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

Tieni presente che il comando richiede privilegi di amministratore per essere eseguito.

Attenzione: il comando dd esegue copie e sovrascrive dati sulla destinazione senza richiedere conferme. Fai quindi attenzione quando usi il comando o rischierai di sovrascrivere e quindi perdere i dati.

Ora che abbiamo visto il funzionamento di base, siamo pronti per vedere le opzioni.

Dopodiché andremo a vedere dei casi d’uso più specifici in cui possiamo usare questo comando e le relative opzioni.

Opzioni del comando dd

Negli esempi di base vedremo come usare il comando per svolgere determinate operazioni. Come già saprai, i comandi Linux hanno delle opzioni che ci permettono di modificare il comportamento del comando oppure avere maggiori informazioni in output durante l’uso dei comandi.

Anche il comando dd non fa eccezione.

Mostrare il progresso durante l’esecuzione del comando

Visto che il comando dd può essere usato per fare copie di interi dischi e che questo processo può durare anche diverse ore, è utile avere la possibilità di seguire l’andamento della copia.

Per farlo ci basta aggiungere al comando l’opzione status=progress.

In questo esempio puoi vedere l’opzione inserita:

sudo dd if=/dev/sda of=/dev/sdb status=progress

Usando questa opzione, vedremo l’avanzamento in tempo reale con la dimensione copiata e la velocità a cui viene eseguita la copia.

Comando Dd Copia Compressa Immagine
Nell’ultima riga di questo esempio si può vedere l’avanzamento del processo di copia.

Definire la dimensione dei blocchi

Le operazioni di lettura e scrittura durante l’utilizzo del comando dd vengono eseguite per blocchi. Per opzione predefinita, il comando dd prende in considerazione blocchi da 512 bytes. Ci sono, però, casi in cui possiamo voler aumentare questa dimensione soprattutto se stiamo lavorando su file molto grandi.

Prima di procedere e usare questa opzione, ricorda che la velocità di lettura e scrittura e quindi l’esecuzione stessa del comando dd dipende sia dalla dimensione dei blocchi che hai impostato, ma anche dalla velocità del disco. In generale aumentando la dimensione dei blocchi si possono ottenere performance migliori e quindi completare la copia in meno tempo.

Per poter modificare la dimensione dei blocchi possiamo usare l’opzione bs del comando dd.

Per esempio, per impostare una dimensione dei blocchi di 4MB, useremo l’opzione così:

bs=4M

Nel comando completo avremo quindi l’opzione specificata in questo modo:

sudo dd if=/dev/sda of=/dev/sdb bs=4M

Evitare errori durante la copia

Uno degli obiettivi del comando dd è quello di permetterci di fare una copia esatta di un disco, per far sì che la copia venga eseguita correttamente è necessario che ci sia un vero e proprio allineamento tra i due dischi.

L’opzione conv è quella che ci aiuta in questo scopo.

Nello specifico usando l’opzione conv=noerror,sync stiamo facendo in modo che:

  • noerror – il valore noerror permette di ignorare gli errori;
  • sync – usando questo valore, se il processo incontra problemi come blocchi parziali, va a riempire di zeri il blocco, in modo che la dimensione resti uguale a quella del disco sorgente.

Casi d’uso del comando dd

Il comando dd ci permette di creare copie di partizioni o di interi dischi. Possiamo usarlo ad esempio per creare una copia di backup di un disco in un file immagine oppure direttamente su un altro dispositivo, ad esempio volendo creare una copia esatta di un SSD su un altro SSD.

Ovviamente possiamo anche fare il processo inverso e andare a ripristinare l’immagine di un disco, quindi fare una copia dall’immagine al disco di destinazione.

Il comando dd è inoltre utile per creare delle USB bootable, ad esempio per avere un sistema operativo come Ubuntu su una chiavetta USB.

In questa guida andremo a vedere alcuni dei casi d’uso più comuni con esempi pratici per ognuno.

Ottenere la lista dei dispositivi

Visto che il comando dd utilizza come sorgente o destinazione i dischi, è importante conoscere la loro denominazione.

Su Linux i dispositivi collegati, ad esempio SSD, hard disk o chiavette vengono denominati in base all’ordine in cui vengono rilevati (con lettere alfabetiche in ordine crescente).

Ad esempio:

  1. /dev/sda
  2. /dev/sdb
  3. /dev/sdc.

Inoltre i dischi possono anche avere denominazioni differenti in base al bus usato tra cui:

  • /dev/nvme0n1
  • /dev/mmcblk0
  • /dev/hd1
  • /dev/sr0

Per ottenere la lista dei dispositivi si può usare il comando lsblk, come in questo esempio in cui vengono mostrati dischi e partizioni:

Elencare Dispositivi Con Lsblk

Suggerimento: per saperne di più sulle partizioni, leggi anche come funziona il comando fdisk.

Creare il backup di una partizione del disco

Il comando dd può essere usato per creare una copia di una partizione, anziché dell’intero disco.

Pensiamo ad esempio di voler creare un’immagine della partizione /sda1, in questo caso useremo il comando:

sudo dd if=/dev/sda1 of=copia-partizione.img status=progress

Nello specifico:

  • if=/dev/sda1 – qui “/dev/sda1” è la partizione che vogliamo copiare
  • of=copia-partizione.img – qui “copia-partizione.img” è il nome dell’immagine che verrà creata.

L’opzione “status=progress” ci permette di seguire l’avanzamento della copia.

Usando il comando in questo modo l’immagine della partizione verrà creata nella posizione corrente. Quindi puoi usare il comando cd per spostarti nella posizione desiderata e poi eseguire il comando.

Creare il backup di un disco

Il comando dd è molto utile per copiare una copia completa di un disco che sia un hard disk meccanico, un SSD, ma anche una scheda SD o una chiavetta USB.

Questo processo consiste nel creare un’immagine completa di un disco. Possiamo usare il comando dd sia per creare un file immagine che poi andremo a trasferire successivamente, sia per fare una copia diretta da un dispositivo all’altro.

Vediamo come si fa con degli esempi.

Per creare un’immagine completa di un disco possiamo usare il comando in questo modo:

sudo dd if=/dev/sda of=copia.img conv=noerror,sync status=progress

Il comando qui sopra funziona in questo modo:

  • if=/dev/sda – questo è il disco sorgente, quello che viene copiato, nel nostro esempio un SSD.
  • of=copia.img – qui indichiamo il nome del file immagine che verrà creato nella posizione corrente.
  • conv=noerror,sync – questa opzione ci permette di saltare gli errori e di sincronizzare le dimensioni dei blocchi (vedi la sezione delle opzioni per maggiori dettagli).
  • status=progress – ci mostra il progresso man mano che l’operazione viene eseguita.

Se, invece, volessimo creare una copia diretta, ad esempio copiando integralmente un SSD su un altro, potremmo usare il comando andando a specificare il disco di destinazione nel valore di “of=”, così:

sudo dd if=/dev/sda of=/dev/sdb conv=noerror,sync status=progress

In questo esempio /sda è il disco di origine, e /sdb è il disco di destinazione.

Una nota importante: le copie eseguite con dd vanno a sovrascrivere completamente i dati. Prima di procedere devi quindi assicurarti che sorgente e destinazione siano esatte o sovrascriverai per sbaglio e perderai tutti i dati nella destinazione.

Quando esegui una copia di questo tipo, inoltre, devi verificare che i dischi abbiano la stessa dimensione o che il disco di destinazione abbia una dimensione maggiore di quello sorgente.

Creare un backup compresso

Possiamo eseguire una copia di un disco eseguendo contemporaneamente anche una compressione, può essere utile ad esempio per conservare un’immagine compressa di una scheda SSD o per velocizzare il processo.

In questo caso per farlo utilizzeremo il comando dd insieme al comando gzip, combinati grazie alla pipe (simbolo |).

Comando Dd Copia Compressa Immagine

Vediamo un esempio di una copia di una microSD:

sudo dd if=/dev/sda conv=sync,noerror status=progress | gzip -c > /home/fabrizio/sd-raspberry.img.gz

In questo caso:

  • il disco in posizione /dev/sda viene letto (dd) e compresso (gzip).
  • /home/fabrizio/sd-raspberry.img.gz” è il percorso in cui viene salvata l’immagine compressa.

Ripristinare un backup

Negli esempi precedenti abbiamo visto come creare una copia completa di un disco e come fare a creare una copia compressa, adesso passiamo al ripristino.

Il ripristino essenzialmente consiste nel copiare l’immagine (ottenuta prima nella fase di backup) sul disco di destinazione.

Per esempio:

sudo dd if=copia.img of=/dev/sdb status=progress

In questo caso stiamo ripristinando l’immagine “copia.img” nel disco sdb.

Se, invece, vogliamo eseguire il ripristino a partire da un’immagine compressa, dobbiamo anche decomprimerla.

Comando Dd Ripristino Da Immagine Compressa

Il comando da usare è come questo, una combinazione di gunzip per la decompressione e dd per la copia:

gunzip sd-raspberry.img.gz --stdout | sudo dd of=/dev/sda status=progress

Questo comando esegue una decompressione dell’immagine in formato gzip (con il comando gunzip) e con il comando dd va a copiarla nella posizione /dev/sda.

Creare la copia di un CD o DVD

Possiamo usare il comando dd su Linux per creare delle immagini ISO di un CD o un DVD. Il procedimento è molto simile a quello che abbiamo visto finora, vediamo un esempio pratico.

sudo dd if=/dev/sr0 of=backup-disco.iso status=progress

In questo caso ci basta:

  • indicare in “if” la posizione del disco, nell’esempio sr0
  • indicare in “of” il nome dell’immagine, nell’esempio “backup-disco.iso”.

Creare una USB bootable

Un altro uso pratico del comando dd è la creazione di una USB bootable. Se ad esempio vogliamo avere un sistema operativo Ubuntu o Alpine su una chiavetta possiamo seguire questi passaggi:

  • scarichiamo l’ISO della distribuzione;
  • usiamo dd per copiare l’ISO sulla chiavetta.

Per esempio:

sudo dd if=alpine-standard-3.22.2-x86_64.iso of=/dev/sdc status=progress

Questo comando ci permette di copiare l’ISO di Alpine su una chiavetta USB alla posizione sdc.

Creare un file di una dimensione prefissata o uno swap file

Possiamo usare dd per creare dei file di dimensione a nostra scelta o degli swap file. Per farlo useremo le opzioni di dd, bs e count, per determinare la dimensione del file finale.

Ad esempio per creare un file di dimensione 2MB, ci basterà usare il comando dd in questo modo:

Creare File Vuoto Dimensione Fissata Comando Dd
sudo dd if=/dev/zero of=filevuoto count=1024 bs=2k

In questo comando:

  • if=/dev/zero – questo ci permette di riempire la destinazione di zeri per allocare lo spazio;
  • of=filevuoto – qui specifichiamo il nome da dare al file, nel nostro esempio “filevuoto”;
  • count – l’opzione count ci permette di definire il numero di blocchi;
  • bs – l’opzione bs indica la dimensione dei blocchi.

In questo caso usare 1024 blocchi da 2kb ci permette di ottenere un file di 2MB.

Suggerimento: un altro metodo è usare il comando fallocate che prealloca lo spazio senza andare a scrivere nulla sul disco e quindi funziona molto più velocemente rispetto a dd.

Eliminare definitivamente tutti i dati di un disco

Possiamo usare il comando dd anche per svuotare completamente un disco (fare un wipe). Come abbiamo già detto in precedenza, quando usiamo dd eseguiamo delle sovrascritture e questo fa sì che ci sia un alto rischio di perdere completamente i dati se non stiamo attenti nell’usare i comandi.

In questo caso però, vediamo proprio come cancellare del tutto il contenuto di un disco. Il principio è semplice: riempire tutto il contenuto del disco con zeri, grazie a dev/zero.

Per esempio:

sudo dd if=/dev/zero of=/dev/sdc

Questo comando va a riempire di zeri il disco in posizione sdc.

Conclusioni

Abbiamo visto come usare il comando dd su Linux per creare copie di interi dischi o partizioni. In questa guida abbiamo esaminato diversi casi d’uso come la creazione e il ripristino di un backup, creando anche immagini compresse dei dischi. Abbiamo anche visto come sia possibile usare il comando dd per eliminare dei dati in maniera definitiva.

Ora tocca a te dirci: quali sono le operazioni che esegui più spesso con questo comando?

Categorie
Indice dei contenuti

    🚀

    Commenti

    Lascia un commento

    Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *