Jul 072011
 

tux dd Sembra un comando poco amichevole, ma se si inizia ad usarlo, vederete che si tratta di un comando potente in grado di fare molte cose diverse, un backup di una partizione, CD o chiavetta USB per esempio oppure alcuni semplici test sulla velocità dei dischi o la CPU.

La pagina man dice:

dd è un’applicazione che “converte e copia un file”

Ma vediamo qualche trucco con esso.

Il clone GNU di dd fa parte del pacchetto fileutils, e direi che qualsiasi Linux dovrebbe averlo installato.
Diversamente dalla maggior parte dei comandi Unix, dd utilizza un formato chiave=valore per i suoi parametri.

Uso Base

L’utility dd copia il file di input specificato nell’uscita specificata con possibili conversioni. Lo standard input e output vengono utilizzati di default. Le dimensioni dei blocchi di input e output possono essere specificati per sfruttare raw physical I/O. Le dimensioni sono specificate in byte, un numero può terminare con k, b, o w per indicare la moltiplicazione per 1024, 512, o 2, rispettivamente. I numeri possono anche essere separati da x per indicare la moltiplicazione.

Quindi le opzioni base sono:

if= file Specifica il percorso di ingresso. Lo Standard input è il default.

of= file Specifica il percorso di uscita. Lo Standard output è il default.

Esempio 1

# dd if=/dev/sda of=/dev/sdb

Questo comando farà la esatta copia di /dev/sda in /dev/sdb

Esempio 2

#dd if=/dev/dvd of=dvd.iso

Questo comando farà una copia del DVD nel file dvd.iso
Esempio 3

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

Riempie la partizione /dev/sda con zero, utile per far scomparire una partizione fisica (o logica).

Esempio 4

# dd if=/dev/hda | gzip > hda.img.gz

Questo comando farà una copia di /dev/hda e attraverso una pipe la passa al programma di compressione gzip.

Aggiungere la dimensione del blocco e il numero di blocchi

Con dd si possono utilizzare anche 2 parametri importanti:

bs= n Imposta sia le dimensioni dei blocchi in n byte per l’input che per l’output.

count= n Copia solo n blocchi di input.

Esempio 5

# dd if=/dev/zero of=/dev/null bs=1M count=32768
32768+0 records in
32768+0 records out
34359738368 bytes (34 GB) copied, 2.64483 s, 13.0 GB/s

Questo comando vi darà la larghezza di banda processore/ memoria in GB/s (nell’esempio, una VPS su linode.com)

Esempio 6

#dd if=/dev/sda of=/home/sam/MBR.image bs=512 count=1

Questo comando crea un’immagine del intero master boot record (compresa la tabella delle partizioni).

Esempio 7

#dd if=/dev/zero bs=1024 count=1000000 of=/home/sam/1Gb.file
 #dd if=/home/sam/1Gb.file bs=64k | dd of=/dev/null

Questi comandi possono essere usati per fare un test di benchmark sui dischi ed analizzare le prestazioni di lettura e scrittura sequenziali per blocchi di byte a 1024.

Cerca e Salta

Queste 2 (seek e skip) opzioni sono un po’ meno comuni ma possono essere utilizzate per eseguire compiti particolari.

skip= n Salta n blocchi di input (utilizzando la specifica dimensione del blocco di ingresso) prima di iniziare a copiare. Se il file è ricercabile, il programma legge n blocchi o cerca di superarli. Sui file non-ricercbili, i blocchi sono letti e dati vengono scartati.

seek= n Salta n blocchi (utilizzando la specifica dimensione del blocco di uscita) dall’inzio dell’output prima di iniziare a copiare.

Esempio 8

## dd if=/dev/mem bs=1k skip=768 count=256 2>/dev/null | strings -n 8

Questo comando mostra informazioni sul BIOS leggendo la memoria da C: 0000 a F: FFFF senza la necessità di dmidecode.

Esempio 9

#dd bs=1k if=image.nrg of=image.iso skip=300

Questo comando converte un file immagine Nero in ISO rimuovendo l’intestazione di 300k da un file di immagine di Nero si converte in formato ISO

Conclusioni

Questa è solo una piccola panoramica delle opzioni più comuni per dd, c’è anche l’opzione di conversione che permette di convertire molti formati di file diversi, forse sara il tema di un altro articolo.


Popular Posts:

Flattr this!

  11 Responses to “Il comando dd sul terminale Linux.”

  1. There is a typo in example 4. Should be:
    dd if=/dev/hda | gzip > hda.img.gz

  2. There is also a basic graphical dd client written in C# and GTK available here, should you be interested.

    It doesn’t yet support setting block sizes or count, but they will be added eventually.
    http://rockcomputing.co.uk/projects.html

  3. Nice overview! Here’s another useful tip: to make dd output it’s progress, open up another terminal window and enter “killall -USR1 dd”. As with anything using kill or killall, make sure you type it correctly before hitting enter.

  4. You can verify that a disc burned properly by doing a bit by bit comparison using dd and cmp. You’ll want to unmount the disc first then run this command.

    dd if=[device file for your optical drive] | cmp [ISO file name ]

    example:

    dd if=/dev/sr0 | cmp my.iso

    I guess the same could be used for verifying files too.

  5. I have tried example #6 many times and it has never worked! I don’t get any errors, I just get another prompt. I never get a MBR.img file or anything else.

    • Check your output file destination. If you just want to create the file in your current directory, simply use of=MBR.image. You may also need to run the command as root. Some distro won’t report any privilege error.

  6. One kind hint
    I have two disk images.
    One is partial and covers the first 50% of a drive called “hdd A” (320GB), let’s call that partial image “disk-A-img1.bin”
    Next I have “disk-A-img2.bin”, which is 100% image of the same “hdd A” but contains many damaged sectors, especially in the first 50%.
    The goal I’d like to achieve is to use dd to overwrite the initial part of “disk-A-img2.bin” with the bytes contained in “disk-A-img1.bin”.
    Is it as simple as providing
    dd if=/tmp/disk-A-img2.bin of=/disk-A-img1.bin or are they required some more parameters?
    I ask this since I’m worrying about the file disk-A-img1.bin to be truncated at the size of disk-A-img2.bin, while as described above, disk-A-img1.bin is required to remain it original size 320GB.
    Thank you for hinting
    Frank

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(required)

(required)

*