Dd è un’utilità molto potente e utile disponibile su sistemi operativi Unix e Unix-like. Come indicato nel suo manuale, il suo scopo è quello di convertire e copiare i file. Su sistemi operativi Unix e Unix-like come Linux, quasi tutto è trattato come un file, anche i dispositivi a blocchi: questo rende dd utile, tra le altre cose, per clonare dischi o cancellare i dati. L’utilitàdd
è disponibile immediatamente anche nell’installazione più minimale di tutte le distribuzioni., In questo tutorial vedremo come usarlo e come possiamo modificare il suo comportamento utilizzando alcune delle opzioni più comunemente utilizzate per rendere il vostro lavoro di amministrazione del sistema Linux più facile.,/td>
sudo
comando $ – richiede i comandi di linux per essere eseguito come un normale utente non privilegiato
utilizzo di Base
La sintassi di base del dd
è molto semplice., Per impostazione predefinita il programma legge da standard input
e scrive sustandard output
. Possiamo, tuttavia, specificare i file alternativi input
eoutput
utilizzando rispettivamente le opzioni della riga di comandoif
eof
. Qui dd differisce dalla stragrande maggioranza dei comandi della shell, poiché non usa la sintassi standard --option
o -o
per le opzioni.,
ISCRIVITI alla NEWSLETTER & RSS
Iscriviti a RSS e NEWSLETTER e ricevere le ultime notizie Linux, lavoro, consigli di carriera e tutorial.
Vediamo un esempio di utilizzo di dd. Uno dei casi d’uso più tipici per l’utilità è il backup del record di avvio principale: il primo settore su un sistema partizionato legacy MBR
., La lunghezza di questo settore è solitamente512
byte: contiene lo stadio 1 di grub bootloader
e la tabella delle partizioni del disco. Supponiamo di voler eseguire il backup delMBR
del disco /dev/sda, tutto ciò che dobbiamo fare è richiamare dd con la seguente sintassi:
$ sudo dd if=/dev/sda bs=512 count=1 of=mbr.img
Analizziamo il comando sopra. Prima di tutto abbiamo anteposto l’invocazione dd effettiva con il comando sudo, in modo da eseguire il comando con privilegi amministrativi. Questo è necessario per accedere al dispositivo a blocchi/dev/sda
., Abbiamo quindi invocato dd specificando la sorgente di input con l’opzioneif
e il file di output conof
. Abbiamo anche usato le opzionibs
ecount
per specificare rispettivamente la quantità di dati da leggere alla volta, o la dimensione del blocco, e la quantità totale di blocchi da leggere. In questo caso avremmo potuto omettere l’opzionebs
, poiché512
byte è la dimensione predefinita utilizzata da dd., Se eseguiamo il comando sopra, vedremo che produce il seguente output:
1+0 records in1+0 records out512 bytes copied, 0.000657177 s, 779 kB/s
L’output sopra ci mostra la quantità di record letti e scritti, la quantità di dati copiati, la quantità di tempo in cui l’attività è stata completata e la velocità di trasferimento. Ora dovremmo avere un clone del settoreMBR
, memorizzato nel filembr.img
. Ovviamente il suffisso del file non ha alcun significato reale su Linux, quindi l’uso del”.img ” uno è completamente arbitrario: potresti voler usare “.,dd ” per far sì che il nome del file rifletta il comando che è stato utilizzato per creare il file.
Nell’esempio precedente usiamo l’opzione bs
per definire sia la quantità di byte che devono essere letti e scritti alla volta. Per definire separatamente i valori per le due operazioni, possiamo invece utilizzare le opzioniibs
eobs
, che impostano, rispettivamente, la quantità di byte letti e scritti alla volta.,
Saltare i blocchi durante la lettura e la scrittura
Ci sono casi in cui potremmo voler saltare una certa quantità di dimensioni dei blocchi durante la lettura o la scrittura su un file. In questi casi dobbiamo utilizzare le opzioniskip
eseek
, rispettivamente: vengono utilizzate per saltare i blocchi di dati specificati, all’inizio dell’input e all’inizio dell’output.,
Un esempio di tale situazione è quando vogliamo eseguire il backup/ripristino dei dati nascosti tra il MBR
e la prima partizione del disco, che di solito inizia dal settore 2048
, per motivi di allineamento. I settori2047
di questa area di solito contengono, su una configurazione di partizione legacyMBR
, la fase 1.5 del bootloader grub. Come possiamo istruire dd a clonare solo quest’area, senza includere MBR
?, Tutto quello che dobbiamo fare è usare il skip
opzioni:
$ sudo dd if=/dev/sda of=hidden-data-after-mbr count=2047 skip=1
In questo caso abbiamo chiesto dd per copiare 2047
blocchi di 512
byte /dev/sda disco a partire dal secondo., Nella situazione opposta, quando si desidera ripristinare i dati clonati e scrivere di nuovo nello stesso disco orario, si desidera utilizzare la ricerca opzione, che salta il numero specificato di blocchi all’inizio dell’uscita:
$ sudo dd if=hidden-data-after-mbr of=/dev/sda seek=1
In questo caso abbiamo chiesto dd per copiare i dati dal tag hidden-data-after-mbr
e a scrivere su /dev/sda
dispositivo di blocco a partire dal secondo blocco.
Compressione dei dati letti da dd
Come abbiamo già detto prima, una delle operazioni più comuni eseguite con dd è la clonazione del disco., Il comando dd produce un clone perfetto di un disco, poiché copia i dispositivi a blocchi byte per byte, quindi la clonazione di un disco da 160 GB produce un backup della stessa identica dimensione. Quando cloniamo un disco in un file, possiamo comunque pipe i dati letti da dd attraverso utility di compressione come gzip
, per ottimizzare il risultato e ridurre la dimensione finale del file., Diciamo ad esempio che vogliamo creare un clone dell’intero dispositivo a blocchi /dev/sda, potremmo scrivere:
$ sudo dd if=/dev/sda bs=1M | gzip -c -9 > sda.dd.gz
Nell’esempio sopra abbiamo incaricato dd di leggere dal dispositivo /dev/sda, e abbiamo anche cambiato la dimensione del blocco a 1M, che può darci prestazioni migliori in tale situazione. Abbiamo quindi convogliato i dati, elaborandoli ulteriormente con il programma gzip
che abbiamo richiamato con l’opzione -c
(abbreviazione di --to-stdout
) e -9
che indica al programma di utilizzare la massima compressione disponibile., Infine, abbiamo reindirizzato l’uscita al “sda.DD.file “gz”. A proposito, se vuoi saperne di più su redirections
puoi leggere il nostro articolo sull’argomento.
Pulire un dispositivo a blocchi
Un altro caso d’uso dd, è la pulizia di un dispositivo. Ci sono molte situazioni in cui potremmo aver bisogno di eseguire tale operazione: potremmo voler vendere un disco ed essere sicuri che il suo contenuto precedente sia completamente cancellato per ovvi motivi di privacy, oppure potremmo voler cancellare i dati prima di impostare la crittografia., Nel primo caso sarebbe sufficiente sovrascrivere il disco con zeri:
$ sudo dd if=/dev/zero bs=1M of=/dev/sda
Il comando precedente istruisce dd a leggere dal dispositivo/dev / zero che fornisce caratteri nulli e scriverli sui dispositivi fino a quando non è completamente riempito.
Prima di impostare un livello di crittografia sul nostro sistema, potremmo voler riempire il disco con dati casuali, per rendere i settori its che conterranno i dati indistinguibili da quelli vuoti ed evitare perdite di metadati., In questo caso vogliamo leggere i dati dal tag /dev/random
o /dev/urandom
dispositivi
$ sudo dd if=/dev/urandom bs=1M of=/dev/sda
Entrambi i comandi che richiedono una notevole quantità di tempo per completare, a seconda delle dimensioni e del tipo di dispositivo di blocco in questione e la fonte di dati casuali utilizzati, /dev/random
essendo più lento, si blocca fino a quando non raccogliere abbastanza rumore ambientale), ma il ritorno più alta qualità di dati casuali di /dev/urandom
.,
Conversione dei dati
Il conv
opzioni di dd viene utilizzato per applicare conversioni di dati. Le opzioni devono essere fornite con un elenco separato da virgole di simboli come argomenti. Ecco alcuni dei più usati:
- noerror – Questo fa sì che dd continui anche dopo che si verifica un errore di lettura;
- notrunc – Questa opzione indica a dd di non troncare il file di output;
- sync – Questa opzione ha senso soprattutto se usata insieme a noerror. Indica a dd di tamponare ogni blocco di input con NULS.,
Un caso tipico in cui potremmo voler eseguire dd insieme all’opzione conv=sync,noerror
, è quando si clona un disco che contiene settori danneggiati. In tal caso il noerror
opzione dd continuare a funzionare anche se un settore non può essere letto correttamente, e il sync
opzione farà in modo che la quantità di dati non è riuscito a leggere la sua sostituito da NULs
in modo che la lunghezza dei dati è conservato, anche se l’effettiva perdita di dati (in quanto non è possibile leggere).,
Conclusioni
In questo tutorial abbiamo imparato ad usare il potente comando dd. Abbiamo visto alcuni dei casi tipici in cui viene utilizzato il programma, come la clonazione del disco, e impariamo a conoscere la sua sintassi e le opzioni più importanti che possiamo usare per modificare il suo comportamento. Poiché dd è un’utilità molto potente, deve essere utilizzata con estrema attenzione: semplicemente cambiando il target di input e output, si può, in alcune situazioni, distruggere completamente i dati su un disco.