GNU/Linux >> Linux Esercitazione >  >> Linux

5 Esempi pratici del comando dd in Linux

Il comando dd in Linux è un'utilità per copiare e convertire file e ha molti usi pratici.

È stato suggerito che il nome sia derivato da una vecchia funzione IBM Job Control Language in cui dd stava per "Definizione dati". In Linux, l'abbreviazione sta per "Data Duplicator" o "Disk Dump" o una varietà di altre allitterazioni a seconda della tua fonte.

Potrebbe anche essersi guadagnato il toccante soprannome di "distruttore di dati" che mi porta a un punto importante. Si prega di prestare attenzione quando si esercita il comando dd.

Questo comando è in grado di causare seri danni. Assicurati di ricontrollare la tua sintassi per evitare errori costosi. Non vuoi essere la persona che confonde i nomi delle partizioni e guarda in agonia mentre la loro partizione di root viene distrutta e sostituita con un file vuoto.

Conoscere il comando dd

Ecco la sintassi del comando dd:

dd if=<filename> of=<filename> [options]

C'è una vasta gamma di usi per questo comando, introdurrò alcuni approcci comuni.

Supporti fisici/clonazione di partizioni/backup

Nella sintassi sopra, "if" e "of" sono rispettivamente per il file di input e il file di output. Questa è la funzionalità principale di dd. Duplica i dati da una fonte all'altra. Non è necessario utilizzare supporti fisici con dd.

Manipolazione del testo

È possibile utilizzare stdin (input standard) dalla tastiera per raccogliere l'input e puntarlo a un file. È anche possibile convertire rapidamente maiuscole e minuscole e una varietà di altri utili strumenti di modifica del testo sono inclusi nella pagina man.

Ho menzionato IBM in precedenza alludendo alla lunga storia di questo programma. Una delle funzionalità originali di questo comando era in realtà incentrata sulla conversione di EBCDIDC, uno schema di codifica creato da IBM, in ASCII.

Manipolazione del filesystem

Puoi anche copiare file con esso, ma il comando cp è consigliato su dd per questa semplice applicazione. Abbiamo un articolo in cui puoi leggere il comando cp.

Alcune note comportamentali

Quando si copia con dd , dovresti anche essere consapevole del fatto che per impostazione predefinita copierà il completo informazioni da una fonte specificata.

Ciò significa che se provi a duplicare una partizione o un disco, copierà anche lo spazio libero.

Quindi, ad esempio, se stai clonando un disco rigido con 4 TB, avrai bisogno di un'unità di destinazione con almeno 4 TB per evitare file ed errori troncati. Ricorda inoltre, se il disco ha solo 1 TB di dati, dd copierà comunque gli altri 3 TB di spazio. È una mossa sbagliata che farà sprecare molto tempo e risorse.

Ci sono alcuni vincoli che possiamo aggiungere a dd e altre misure che possiamo adottare per cambiare questo comportamento. Ci sono in realtà una quantità schiacciante di controlli che possono essere utilizzati insieme a dd. Cercherò di affrontare alcuni di quelli che penso possano avvantaggiare maggiormente i nostri lettori, ma l'obiettivo di questo articolo è fornire un'introduzione su dd, non documentare ogni possibile funzione.

Attenzione! Per esercitarti, usa una macchina virtuale

Ti esorto a concettualizzare il tuo obiettivo e ad eseguirlo con attenzione per evitare di corrompere o distruggere file importanti. Ovviamente, non siamo responsabili per la perdita delle tue informazioni. Se commetti un errore. Non dire che non ti abbiamo avvertito.

Consiglio di esercitarsi su una macchina virtuale fittizia per familiarizzare prima di tentare di alterare qualsiasi risorsa del "mondo reale". Questo perché il comando dd ha la capacità di cambiare e quindi danneggiare il tuo filesystem se lo usi in modo errato.

Per questo tutorial, ho deciso di provare qualcosa al di fuori della famiglia Debian e ho creato una copia di Fedora 31 in VirtualBox.

5 Esempi pratici del comando dd

Con gli avvisi e alcune informazioni contestuali fuori mano, siamo pronti per passare ad alcune applicazioni per questo comando semplice ma potente.

Esempio 1:clonare dischi

Clonare un disco su un altro può essere molto semplice con dd. Per il mio esempio, ho due dischi chiamati "sda" e "sdb".

Ricorda che "sda" tenterà di copiarsi su "sdb" utilizzando l'intero contenuto dell'unità, non solo i dati.

È necessario allocare spazio sufficiente sul file di output per accogliere lo spazio inutilizzato nel settore. Puoi anche scegliere di ripartizionare l'unità in base alle dimensioni esatte attualmente riempite dai dati. Consiglierei questo metodo. Ridurrà il tempo necessario per eseguire l'operazione e creare un documento più utile.

Quando sei pronto per clonare un disco, puoi eseguire fdisk per identificare i tuoi dischi, le loro partizioni e la loro capacità.

sudo fdisk -l 

L'esecuzione di questo comando elencherà le unità e le partizioni disponibili e le rispettive dimensioni. Questo può essere utile per identificare correttamente il tuo dispositivo di destinazione.

Anche in questo caso, per la nostra applicazione utilizziamo i nomi "sda" e "sdb" e assumeremo che abbiano le stesse dimensioni.

[[email protected] ~]$ sudo dd if=/dev/sda of=/dev/sdb
[[enter pw for sudo]]
dd: writing to 'dev/sdb': No space left on device
8108369+0 records in
8108369+0 records out
4151484416 bytes (4.2 GB, 3.9 GiB) copied, 12.3602 s 336 MB/s

L'output ci fa sapere che la scrittura è andata a buon fine, possiamo ignorare il messaggio che dice che non c'è più spazio rimasto su 'sdb'.

Il riepilogo elenca anche la quantità di dati copiati, il tempo impiegato e la velocità con cui sono stati copiati. Lo esamineremo un po' di più quando tratterò le dimensioni dei blocchi.

Esempio 2:backup di una partizione del disco

I passaggi per la clonazione di un dispositivo e il backup di una partizione sono simili. Invece che il nostro file di destinazione è un dispositivo, possiamo creare un file ".img" (immagine del disco non elaborato).

Diciamo che il nostro sistema ha una partizione separata per la nostra directory home in 'sda2' e vogliamo eseguirne il backup in un file chiamato 'home_backup.img' nella nostra directory corrente.

dd if=/dev/sda2 of=home_backup.img

È così facile! Quindi ora non hai più scuse per non avere una buona routine di backup.

Certo, è stato facile, ma c'è sempre altro da imparare.

Gestire la dimensione del blocco nel comando dd

Prima di entrare nel prossimo esempio, parliamo di BS, o dimensione del blocco. Se l'hai visto usato per specificare un valore con i comandi dd, potresti chiederti perché è lì.

Se la tua curiosità ti porta a fare una ricerca su Internet, sono pronto a scommettere che probabilmente sei ancora chiedendomi perché è lì.

Farò del mio meglio per dare una spiegazione in un linguaggio semplice. I dispositivi a blocchi sono generalmente supporti fisici con spazio di archiviazione limitato.

Puoi cercare informazioni su un supporto come un disco cercando un blocco di dati specifico. Così, ad esempio, il sistema può leggere un CD-ROM e cercare informazioni a partire dal blocco 500 (un numero arbitrario). Può anche essere utilizzato per "prenotare" informazioni e magari utilizzare informazioni dal blocco 500 al blocco 1500.

Questi blocchi possono essere segmentati in modo da rendere efficiente l'analisi del sistema. Ciò può riflettere lo spazio di archiviazione del supporto o le specifiche di sistema standard a cui è probabile che il supporto sia associato.

Continuerò con l'esempio di un CD-ROM che ha una propria dimensione di blocco definita (2048). Ogni blocco deve avere un massimo di 2048 byte. Anche se un blocco contiene solo 100 byte di dati, occuperà comunque gli stessi 2048 byte.

Ci sono alcuni casi in cui potresti voler definire la dimensione del blocco per far funzionare dd più velocemente o prevenire il danneggiamento dei dati. Tornando al nostro esempio di CD-ROM, la creazione di blocchi di dimensioni diverse potrebbe causare anomalie al momento della lettura dei dati.

Se non viene definito, dd utilizzerà una dimensione del blocco di 512. Questa è la dimensione del blocco più piccola che un tipico disco rigido può leggere.

Se il tuo supporto non è limitato a una determinata dimensione del blocco, probabilmente sei sicuro di regolarlo per le prestazioni (tempo di scrittura). Diamo un'occhiata ad alcuni esempi.

Prestazioni con dimensioni del blocco non specificate

[[email protected] ~]$ sudo dd if=/dev/sda of=home_backup.img
[sudo] password for linuxhandbook: 
dd: writing to 'home_backup.img': No space left on device
31974953+0 records in
31974952+0 records out
16371175424 bytes (16 GB, 15 GiB) copied, 113.848 s, 144 MB/s

Rendimento con dimensione del blocco di 1024

[[email protected] ~]$ sudo dd if=/dev/sda of=home_backup.img bs=1024
[sudo] password for linuxhandbook: 
dd: error writing 'home_backup.img': No space left on device
15987477+0 records in
15987476+0 records out
16371175424 bytes (16 GB, 15 GiB) copied, 75.4371 s, 217 MB/s

Puoi vedere che il processo è stato eseguito a una velocità maggiore. Un'altra corsa con una dimensione del blocco di 4096 è stata più veloce ma con una velocità di 327 MB/s. Anche la memorizzazione nella cache di sistema può avere un ruolo nella velocità, ma questo è un argomento per un altro giorno.

Potresti aver notato la variazione nel numero di record in entrata e in uscita. Questo perché stiamo cambiando la dimensione di ogni blocco e quindi la capacità dei singoli blocchi, nonostante il file di output rimanga della stessa dimensione. Per questo motivo, la regolazione del valore bs può avere conseguenze indesiderate. Ad esempio, potrebbe causare discrepanze durante l'esecuzione di un checksum.

Esempio 3:elimina i dati e azzera il disco

Ricordi tutti gli avvertimenti di prima? Questo comando sostituirà ogni blocco di 'sda' con zero.

dd if=/dev/zero of=/dev/sda

Come funziona? Essenzialmente, lo stesso di tutti gli altri comandi in e out dd. Che cos'è "/dev/zero"?

È uno pseudo-dispositivo incluso nei sistemi operativi Unix/Linux che scriverà zero su un file finché non raggiunge la fine del file.

Allo stesso modo puoi usare "dev/random" che emette bit casuali di dati. Ciò potrebbe non essere necessario se prevedi di utilizzare un file di immagine non elaborato per sostituire i contenuti poiché l'utilizzo di dd copierà già lo spazio inutilizzato.

Nota che alcune persone cattive ingannano gli utenti ignari eseguendo questo comando in vari forum Linux. Ora che sai cosa fa questo comando, non cadrai preda di questo scherzo malvagio.

Esempio 4:crea .ISO da CD/DVD

Puoi copiare direttamente dall'unità cd-rom se il tuo computer ne ha ancora uno. In precedenza ho detto che la dimensione standard in byte di un cd-rom è 2048. Imposteremo la dimensione in byte in modo che corrisponda a quella per evitare problemi di conversione e quindi aggiungeremo un paio di altri comandi.

dd if=/dev/cdrom of=space_jam_dvd.iso bs=2048 conv=noerror,sync

Lascia che ti spieghi alcune cose. Con conv=noerror , eventuali errori verranno ignorati. Il programma proseguirà fino al blocco finale senza fermarsi. Non si fermerà per loro.

Se utilizzato insieme a "noerror", "sync" assicurerà che tutti i blocchi di dati mancanti vengano automaticamente riempiti con informazioni nulle.

Ciò significa che i dati esistenti verranno mappati nelle stesse posizioni, presumibilmente preservando quanto più contenuto possibile.

È importante assicurarsi che i file di origine e di destinazione abbiano lo stesso "bs" impostato per queste operazioni, altrimenti non avranno i risultati desiderati.

Esempio 5:creare una USB avviabile

Puoi usare dd per creare una USB avviabile ed è facile come ti aspetteresti. In effetti, questo è uno degli usi più popolari del comando dd.

C'è un passaggio in più coinvolto qui. Usiamo il comando mkfs per costruire il filesystem sulla nostra USB prima di eseguire 'dd'.

Senza opzioni, utilizza il sistema ext2 predefinito. Quindi supponendo che l'USB che vogliamo preparare si chiami "sdb" e vogliamo cambiare il file system in ext4, eseguiremo il seguente comando:

sudo mkfs.ext4 /dev/sdb

Se vuoi usarlo con un sistema Windows puoi sostituire la prima parte del comando con mkfs.ntfs.

Puoi anche utilizzare la seguente sintassi:

mkfs -t [for type] $filesystem.

Una volta preparato il supporto di avvio, possiamo continuare con il nostro comando dd.

dd if=someFile.iso of=/dev/sdb

Usa l'immagine montabile .iso e copia nel nome dell'unità corrispondente per il tuo dispositivo USB.

Conclusione

Grazie per aver letto. Spero che questo primer su 'dd' ti sia piaciuto. Ci sono tanti modi diversi in cui puoi usare questo comando. Ho cercato di coprire molti degli esempi più utili. Se hai qualcosa che vorresti vedere o una domanda diretta, mi piacerebbe aiutarti. Fatemi sapere cosa ne pensate qui sotto nei commenti.


Linux
  1. Comando cp in Linux:7 esempi pratici

  2. Comando di arresto di Linux:5 esempi pratici

  3. Esempi pratici del comando Unzip in Linux

  4. 10 esempi pratici di comandi Linux nm

  5. 7 Esempi di comandi Linux df

5 esempi pratici di Tail Command in Linux

echo Command in Linux:7 esempi pratici

5 Esempi pratici del comando Read in Linux

Esempi essenziali del comando ps in Linux

Pratico comando Ping negli esempi di Linux

Esempi di comandi id in Linux