GNU/Linux >> Linux Esercitazione >  >> Linux

Comando Linux DD - 15 esempi con tutte le opzioni

Il comando Linux dd è una delle utility più potenti che può essere utilizzata in vari modi. Questo strumento viene utilizzato principalmente per copiare e convertire dati, quindi sta per duplicatore di dati. Questo strumento può essere utilizzato per:

  • Backup e ripristino di un intero disco rigido o di una partizione.
  • Creazione di file system virtuali e immagini di backup di CD o DVD chiamati file ISO
  • Copia regioni di file di dispositivo non elaborati come il backup di MBR (record di avvio principale).
  • Conversione di formati di dati come ASCII in EBCDIC.
  • Conversione da minuscolo a maiuscolo e viceversa.

Solo il superutente può eseguire questo comando. Dovresti stare molto attento mentre usi questo comando poiché un uso improprio può causare un'enorme perdita di dati. Quindi, alcune persone considerano questo strumento come un distruttore di dati.

Sintassi del comando dd

L'uso di base del comando dd è piuttosto semplice perché richiede solo due argomenti:if =per specificare il file di input e di =per specificare il file di output. Gli argomenti di queste opzioni possono essere file o dispositivi di blocco. Tuttavia, non consiglierei di usare dd per copiare i file perché cp lo fa in un modo molto più semplice. Tuttavia, puoi usarlo per clonare un disco rigido. La sintassi è

dd if=<source file name> of=<target file name> [Options]

Impareremo varie opzioni mentre esamineremo esempi di comandi dd.

1. Backup e ripristino di un intero disco o di una partizione

È possibile salvare tutti i dati da un intero disco/partizione su un altro disco/partizione. Non una semplice copia come comando cp ma una copia in formato blocco.

a. Eseguire il backup dell'intero disco su disco

Puoi copiare tutti i dati (intero disco) dal disco /dev/sda a /dev/sdb . dd non sa nulla del filesystem o delle partizioni; copierà semplicemente tutto da /dev/sda a /dev/sdb . Devi indicare la dimensione del blocco da copiare alla volta con bs opzione. Quindi, questo clonerà il disco con gli stessi dati sulla stessa partizione.

# dd if=/dev/sda of=/dev/sdb bs=4096 conv=noerror,sync
97281+0 records in
97280+0 records out
99614720 bytes (100 MB) copied, 2.75838 s, 36.1 MB/s

Funziona solo se il secondo dispositivo è grande quanto o più grande del primo. Altrimenti, ottieni partizioni troncate e inutili sul secondo. Qui, se sta per input file , of sta per output file e bs sta per la dimensione del blocco (numero di byte da leggere/scrivere alla volta). Assicurati di utilizzare le dimensioni dei blocchi in multipli di 1024 byte che equivalgono a 1 KB. Se non specifichi la dimensione del blocco, dd utilizza una dimensione del blocco predefinita di 512 byte. Il conv parametro valore noerror consente allo strumento di continuare a copiare i dati anche se riscontra errori. L'opzione di sincronizzazione consente di utilizzare l'I/O sincronizzato.

b. Creazione di un'immagine disco dd (immagine del file)

È possibile creare un'immagine di un disco o un'immagine di file. Il backup di un disco su un'immagine sarà più veloce della copia dei dati esatti. Inoltre, l'immagine del disco rende il ripristino molto più semplice.

# dd if=/dev/sda of=/tmp/sdadisk.img

Puoi memorizzare il file di output dove vuoi ma devi dare un nome file che termina con .img estensione come sopra. Invece di /tmp/sdadisk.img , potresti salvarlo ad esempio in /sdadisk.img se vuoi.

c. Creazione di un'immagine disco compressa

Poiché dd crea il contenuto esatto di un intero disco, significa che richiede una dimensione eccessiva. Puoi decidere di comprimere l'immagine del disco con il comando qui sotto

# dd if=/dev/vda | gzip -c >/tmp/vdadisk.img.gz

La pipa | l'operatore fa in modo che l'output del comando di sinistra diventi l'input del comando di destra. Il -c l'opzione scrive l'output sull'output standard e mantiene invariati i file originali.

d. Eseguire il backup di una partizione o clonare una partizione su un'altra

Invece di un intero disco, puoi eseguire il backup solo di una semplice partizione. Devi solo indicare il nome della partizione nel file di input come di seguito

# dd if=/dev/sda1 of=/dev/sdb1 bs=4096 conv=noerror,sync

Questo sincronizzerà la partizione /dev/sda1 a /dev/sdb1 . Devi verificare che la dimensione di /dev/sdb1 dovrebbe essere maggiore di /dev/sda1 . Oppure puoi creare un'immagine di partizione come di seguito

# dd if=/dev/sda1 of=/tmp/sda1.img

es. Ripristino di un disco o di un'immagine di partizione

Salvare un disco o una partizione aiuta a ripristinare tutti i dati, in caso di problemi con la nostra unità originale. Per ripristinare, è necessario invertire il file di input con il file di output indicato durante l'operazione di backup come di seguito.

# dd if=/tmp/sdadisk.img of=/dev/sda

Recupererai i dati che erano presenti prima dell'operazione di backup e non dopo l'operazione

es. Ripristino dell'immagine compressa

Devi prima indicare il file compresso e il file di output che è il disco compresso prima.

# gzip -dc /tmp/vdadisk.img.gz | dd of=/dev/vda

L'opzione -d qui serve per decomprimere. Nota il file di output. Puoi montare il disco ripristinato per vedere il contenuto. Tieni presente che i dati verranno aggiunti dopo l'ultima operazione di backup di compressione.

2. Creazione di file system virtuale/immagini di backup di CD o DVD come file ISO

Potrebbe essere necessario creare un filesystem virtuale su Linux per alcuni motivi, come la creazione di una macchina virtuale sul tuo host Linux. Puoi anche aver bisogno di creare un'immagine ISO di backup di un CD o DVD

a. Creazione di un filesystem virtuale

Un filesystem virtuale è un filesystem che esiste in un file, che a sua volta esiste su un disco fisico. Può essere necessario per creare, ad esempio, un dispositivo di scambio o loop aggiuntivo o una macchina virtuale. Abbiamo bisogno di /dev/zero che è un file utilizzato per creare un file senza dati ma con la dimensione richiesta (un file con tutti gli zero). In altre parole, questo creerà un file di dati con tutti gli zeri nel file che darà la dimensione a un file.

# dd if=/dev/zero of=/file bs=1024K count=500
500+0 records in
500+0 records out
524288000 bytes (524 MB) copied, 1.21755 s, 431 MB/s

L'opzione count si riferisce al numero di blocchi di input da copiare. Combinato con il valore della dimensione del blocco, indica la dimensione totale da copiare. Ad esempio bs=1024k e count=500 dare una dimensione=1024K*500 =524288000 byte =524MB

Ora controlliamo la dimensione del nostro file

# ls -lh /file
-rw-r--r-- 1 root root 500M May 17 18:57 /file

Puoi vedere che abbiamo il nostro filesystem virtuale creato con la dimensione indicata. Ora puoi usarlo per creare un dispositivo loop o un disco virtuale o qualsiasi altra cosa.

b. Modifica i primi 512 byte di un file con dati nulli

Se durante l'operazione indichi un file di output esistente, perderai i suoi dati. Per alcuni motivi, potrebbe essere necessario sostituire una dimensione del blocco del file di output.

dd if=/dev/zero of=file1 bs=512 count=1 conv=notrunc

Il notrunc opzione si riferisce a non troncare il file, sostituire solo i primi 512 byte, se esiste. Altrimenti, otterrai un file da 512 byte

c. Creazione di un'immagine ISO di backup di CD o DVD

Potresti chiederti perché non copiare semplicemente il contenuto del tuo CD in una directory. Come gestiresti il ​​settore di avvio di un CD? Non puoi trovarlo come file sul dispositivo perché è solo il primo settore. Poiché dd copia settore per settore, d'altra parte, copierà anche quelle informazioni.

# dd if=/dev/cdrom of=/mycd.iso

Devi sapere che devi usare il -o loop opzione, che ti permette di montare un file come un normale dispositivo. Quindi, per montare /mycd.iso sul /mnt/cd directory, fai come sotto

# mount -o loop /mycd.iso /mnt/cd

d) Crea un'unità USB avviabile

Supponiamo di aver scaricato l'immagine iso di centos qui in questa directory "~/Downloads/".

if=~/Downloads/CentOS-8-x86_64-1905-dvd1.iso - il file di input si trova nel percorso '~/Downloads/CentOS-8-x86_64-1905-dvd1.iso'

of=/dev/sdb - il file di output si trova nel percorso '/dev/sdb'

bs=1M - Leggi da '~/Downloads/CentOS-8-x86_64-1905-dvd1.iso' e scrivi in ​​'/dev/sdb' 1 Megabyte di dati alla volta.

# dd if=~/Download/CentOS-8-x86_64-1905-dvd1.iso of=/dev/sdb bs=1M

3. Backup e ripristino di MBR

Il bootloader GRUB è più comunemente memorizzato nell'MBR dell'unità di avvio. L'MBR costituisce i primi 512 byte del disco, consentendo fino a 466 byte di memoria per il bootloader. Lo spazio aggiuntivo verrà utilizzato per archiviare la tabella delle partizioni per quell'unità. Se MBR viene danneggiato, non saremo in grado di avviare Linux.

a. Backup dell'MBR

Poiché l'MBR costituisce i primi 512 byte del disco, dobbiamo solo copiare la dimensione del blocco

# dd if=/dev/sda of=/tmp/sdambr.img bs=512 count=1

Con il count=1 e bs=512 , verranno copiati solo 512 byte che corrispondono alla dimensione del nostro MBR.

Puoi visualizzare l'MBR salvato con il comando od che esegue il dump dei file in ottale e altri formati come di seguito

# od -xa /tmp/sdambr.img
0000000    bf52    81f4    8b66    832d    087d    0f00    e284    8000
          R   ?   t soh   f  vt   - etx   }  bs nul  si eot   b nul nul
0000020    ff7c    7400    6646    1d8b    8b66    044d    3166    b0c0
          | del nul   t   F   f  vt  gs   f  vt   M eot   f   1   @   0

-a l'opzione  seleziona i caratteri con nome e -x seleziona unità esadecimali a 2 byte

b. Backup dei dati di avvio di MBR esclusa la tabella delle partizioni

I dati MBR 512 byte si trovano nel primo settore del disco rigido. Consiste di 446 byte di bootstrap, 64 byte di tabella delle partizioni e 2 byte di firma. Significa che possiamo escludere la tabella delle partizioni e la firma dei byte durante il backup dell'MBR conservando solo una dimensione del blocco uguale alla dimensione del bootstrap.

# dd if=/dev/sda of=/tmp/sdambr2.img bs=446 count=1

c. Ripristino dell'MBR dall'immagine MBR

Puoi ripristinare il tuo MBR come mostrato nei comandi precedenti con

# dd if=/tmp/sdambr.img of=/dev/sda

3. Conversione dei formati di dati

Se un file di input utilizza un set di caratteri che non è il set di caratteri nativo del computer host, l'operatore di importazione deve eseguire una conversione. Ad esempio, se ASCII è il formato nativo per le stringhe sul computer host, ma il file di dati di input rappresenta le stringhe utilizzando EBCDIC, è necessario convertire EBCDIC in ASCII e viceversa.

a. Converti il ​​formato dati di un file da EBCDIC ad ASCII

Se c'è un file ebcdic con te, per lo più recuperato da sistemi mainframe, allora vorresti convertirlo in ASCII per apportare modifiche usando editor di testo su server UNIX

# dd if=textfile.ebcdic of=textfile.ascii conv=ascii

Il conv il parametro value ora è ascii perché convertiamo da EBCDIC a ASCII

b. Converti il ​​formato dati di un file da ASCII a EBCDIC

Dopo aver modificato la versione ASCII e una volta terminato, puoi riconvertirlo in EBCDIC per essere utilizzato dalla tua applicazione.

# dd if=textfile.ascii of=textfile.ebcdic conv=ebcdic

Il conv il parametro value ora è e bcdic perché convertiamo da ASCII a EBCDIC. Se stai semplicemente sostituendo un determinato numero di byte con un numero equivalente di byte con caratteri diversi, la conversione sarebbe agevole e l'applicazione che legge il file non dovrebbe avere problemi.

4. Conversione del caso di un file

Il comando DD può essere utilizzato anche per una cosa incredibile. Può convertire tutto il testo (alfabeti) in un file in maiuscolo o minuscolo e viceversa. Per l'esempio seguente, avremo un file per i test.

# cat file10
test dd convert

a. Conversione di un file in maiuscolo

Poiché il nostro esempio di file di testo è in minuscolo, lo convertiremo in maiuscolo

# dd if=~/file10 of=~/file20 conv=ucase

Il comando creerà il nuovo file indicato. Guardalo ora conv l'opzione richiede ucase valore. Controlliamo il risultato

# cat file20 
TEST DD CONVERT

b. Conversione di un file in minuscolo

Ora faremo l'operazione inversa che convertirà in minuscolo

# dd if=~/file20 of=~/file30 conv=lcase

Vedi che utilizziamo lcase  di conv opzione per convertire da maiuscolo a minuscolo.

# cat file30 
test dd convert

Il comando dd non converte i nomi dei file, ma solo il suo contenuto.

Conclusione

Il comando dd, sebbene non sia tecnicamente un comando di archiviazione, è simile in qualche modo perché può copiare un'intera partizione o disco in un file e viceversa.


Linux
  1. Comando wc Linux con esempi

  2. Comando di ordinamento Linux con esempi

  3. Comando Tee Linux con esempi

  4. Comando testa di Linux con esempi

  5. Comando JQ in Linux con esempi

Comando CD Linux con esempi

Comando Linux watch con esempi

Attendi comando in Linux con esempi

Comando di esportazione Linux con esempi

Riavvia il comando in Linux con esempi

Comando IP Linux con esempi