Guida semi-esaustiva al comando dd su Linux

Introduzione

Il comando dd è uno strumento potentissimo e versatile presente in quasi tutte le distribuzioni Linux. Nato per scopi di conversione e copia di file, dd si è evoluto in un’utility indispensabile, soprattutto quando si tratta di operazioni su blocchi di dati. Tra i suoi utilizzi più comuni troviamo la creazione di immagini di dischi, la clonazione di dispositivi di archiviazione, la cancellazione sicura dei dati e molto altro ancora. In questa guida vedremo come padroneggiare il comando dd con una panoramica completa, partendo dalle operazioni più semplici fino a quelle più avanzate.

Presenza nelle varie distribuzioni

dd è preinstallato nella maggior parte delle distribuzioni Linux, inclusi i più diffusi sistemi come Debian, Ubuntu, Fedora, Arch Linux e CentOS. Essendo un comando Unix di base, lo si trova in qualunque distribuzione che aderisca agli standard POSIX.

Compendio tramite esempi

1. Copia di file e dispositivi (uso base)

Uno degli utilizzi fondamentali di dd è la copia di file e dispositivi di archiviazione. La sintassi base del comando è:

dd if=origine of=destinazione
  • if (input file) specifica la sorgente da copiare.
  • of (output file) indica la destinazione dove copiare i dati.
Esempio:

Copiare un’immagine ISO su una chiavetta USB:

sudo dd if=immagine.iso of=/dev/sdX bs=4M status=progress
  • bs=4M definisce la dimensione del blocco in byte (qui 4 megabyte).
  • status=progress permette di visualizzare il progresso dell’operazione.

2. Creare un’immagine di backup di un disco

Un altro uso comune di dd è la creazione di immagini di backup di dischi o partizioni. Questo è utile quando si vuole fare una copia di sicurezza o clonare un intero disco rigido.

sudo dd if=/dev/sdX of=/path/to/backup.img bs=1M

Questo comando creerà un file immagine (backup.img) dell’intero disco sdX.

3. Ripristinare un’immagine su un disco

Se vuoi ripristinare un’immagine precedentemente creata su un disco, puoi semplicemente invertire if e of:

sudo dd if=/path/to/backup.img of=/dev/sdX bs=1M

4. Cancellazione sicura di un disco

Per sovrascrivere un intero disco con dati casuali e cancellarlo in modo sicuro:

sudo dd if=/dev/urandom of=/dev/sdX bs=1M status=progress

In questo modo, il disco verrà riempito con dati casuali, rendendo molto difficile (se non impossibile) recuperare i dati originali.

5. Clonare un disco

Puoi clonare un intero disco su un altro usando dd:

sudo dd if=/dev/sdX of=/dev/sdY bs=64K conv=noerror,sync status=progress
  • conv=noerror,sync dice a dd di continuare anche in caso di errori di lettura (noerror) e di riempire i blocchi incompleti con zeri (sync).

6. Verifica della copia

Per assicurarsi che la copia sia andata a buon fine, è possibile confrontare i checksum del file originale e della destinazione:

sha256sum /dev/sdX
sha256sum /dev/sdY

Questo comando genererà un hash SHA256 per ciascun dispositivo, che potrà essere confrontato per verificare che non ci siano differenze.

7. Limitare la velocità di trasferimento

Per evitare di sovraccaricare il sistema durante la copia di grandi quantità di dati, puoi limitare la velocità di trasferimento con il comando pv (pipe viewer):

pv -tpreb /dev/sdX | dd of=/dev/sdY bs=64K

pv permette di monitorare il progresso del trasferimento e di limitare la velocità.

8. Creare un file di dimensioni specifiche

Per creare un file vuoto (o riempito di zeri) di una dimensione specifica:

dd if=/dev/zero of=file.bin bs=1M count=100

Questo comando creerà un file di 100MB (bs=1M specifica blocchi da 1 megabyte, e count=100 crea 100 blocchi).

9. Copiare parte di un file o dispositivo

Puoi copiare solo una parte di un file o di un dispositivo utilizzando skip e count:

dd if=/dev/sdX of=part.img bs=512 skip=2048 count=4096

Questo copia solo 4096 blocchi da 512 byte, saltando i primi 2048 blocchi.

Clonare dispositivi di dimensioni diverse

Uno degli aspetti cruciali quando si utilizza dd per clonare dischi è la gestione delle dimensioni diverse tra il dispositivo sorgente e quello di destinazione. Mentre dd può clonare un disco più piccolo su uno più grande senza problemi, la clonazione di un disco più grande su uno più piccolo è più complessa e richiede attenzione.

1. Clonazione da un disco più piccolo a uno più grande

Se cloni da un dispositivo più piccolo a uno più grande, dd copierà tutti i dati correttamente, ma lo spazio aggiuntivo sul dispositivo di destinazione rimarrà non allocato. In questi casi, sarà necessario ridimensionare manualmente le partizioni e il filesystem per utilizzare l’intero spazio disponibile.

Esempio di clonazione:
sudo dd if=/dev/sdX of=/dev/sdY bs=64K conv=noerror,sync

Dopo questa operazione, potrai usare strumenti come gparted o fdisk per ridimensionare le partizioni e sfruttare lo spazio non allocato. Se stai utilizzando un filesystem come ext4, puoi usare il comando resize2fs per estendere la partizione:

sudo resize2fs /dev/sdY1

2. Clonazione da un disco più grande a uno più piccolo

Se provi a clonare un disco più grande su uno più piccolo, dd fallirà se il disco sorgente contiene più dati di quanti ne possano essere contenuti sul disco di destinazione. In questi casi, è necessario ridurre il filesystem e le partizioni sul disco sorgente per adattarli al dispositivo più piccolo.

Procedura:
  1. Riduci le partizioni e il filesystem sul disco sorgente utilizzando gparted o resize2fs per adattare lo spazio utilizzato.
  2. Esegui dd per clonare il disco ridimensionato sul dispositivo più piccolo:
sudo dd if=/dev/sdX of=/dev/sdY bs=64K conv=noerror,sync

Nota: Se il disco sorgente contiene più dati di quelli che il disco di destinazione può contenere, dd non riuscirà a completare l’operazione. In alternativa, puoi optare per una soluzione diversa.

Alternative a dd per clonare dischi di dimensioni diverse

Quando si tratta di clonare dischi di dimensioni diverse (soprattutto se il dispositivo sorgente è più grande di quello di destinazione), strumenti come dd possono risultare limitati o poco efficienti. In questi casi, è consigliabile utilizzare soluzioni specializzate come:

  • Clonezilla: Un’utility avanzata che permette di clonare dischi o partizioni e gestisce automaticamente la riduzione delle partizioni e il ridimensionamento dei filesystem. Supporta anche la clonazione tra dischi di dimensioni diverse.
  • GParted Live: Una distribuzione Linux live che include strumenti di gestione avanzata delle partizioni, permettendo di ridimensionare, copiare e spostare partizioni in modo semplice.
  • Partclone: Un altro strumento utile per clonare partizioni che può essere utilizzato insieme a Clonezilla per gestire meglio situazioni in cui il disco di destinazione è più piccolo di quello sorgente.

Utilizzare queste alternative rende la clonazione tra dischi di dimensioni diverse molto più sicura ed efficiente, riducendo al minimo i rischi di perdita di dati o errori di gestione dello spazio.

Linkografia essenziale

  1. Manuale ufficiale di dd – Documentazione dettagliata sul comando dd.
  2. Arch Wiki – Uso avanzato di dd – Approfondimenti e esempi avanzati.
  3. GNU Core Utilities – Manuale delle GNU core utilities, inclusa la descrizione completa di dd.
  4. The Linux Command Line – Guida per principianti all’uso dei comandi in Linux.

Seguendo questa guida, sarai in grado di utilizzare il comando dd per una vasta gamma di operazioni, dalla creazione di backup, alla clonazione di dischi, alla cancellazione sicura dei dati, fino alla copia di file e partizioni.