Come funziona il comando dd in Linux con esempi

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>

Non è necessario un software speciale per seguire questo tutorial, tranne gg Altri Familiarità con l’interfaccia a riga di comando e reindirizzamenti Convenzioni # – richiede comandi linux di essere eseguito con privilegi di root direttamente come utente root o con l’uso di 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 inpute scrive sustandard output. Possiamo, tuttavia, specificare i file alternativi inputeoutpututilizzando rispettivamente le opzioni della riga di comandoifeof. 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 MBRe 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.

Author: admin

Lascia un commento

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