L'ordre dd (dataset definition) ens permet arxivar tot un sistema de fitxers a baix nivell (les dades es copien byte a byte). També serveix per a fer conversions de dades crues (raw data). Les conversions es fan on-the-fly.
La sintaxi de l'ordre (derivada del Job Control Language - JCL - de IBM ) és:
IMPORTANT: Cal tenir molt de compte en l'ús de l'ordre dd. Un petit error en la sintaxi pot esdevenir en una pèrdua massiva de dades. Per aquesta raó, la utilitat dd també es coneguda en broma com a "data destroyer" o "delete data"
Amb dd podem realitzar, entre d'altres, accions com les següents:
La sintaxi de dd és la següent:
# dd if=cami_del_dispositiu_a_copiar of=cami_del_dispositiu_o_fitxer_on_copiar
On:
Per exemple l'ordre:
# dd /dev/sda3 /dev/st1
Aquest exemple copiaria la partició 3 del disc dur primari a una cinta de tipus SCSI (/dev/st1)
Cal tenir en compte que l'ordre dd no es caracteritza precisament per la seva velocitat. Per exemple, si copiem una partició de 200G on només estem utilitzant 100M, es copiaran totes els 200G i no només les dades reals. Podem dir que dd és una eina que fa una imatge exacte del que copia.
Per restaurar l'exemple anterior caldria executar:
# dd if=/dev/st0 of=/dev/sda3
Podem copiar per blocs utilitzant el paràmetre bs. bs indica la mida del bloc a copiar i si ho combinem amb el paràmetre count, podem indicar el nombre de blocs a copiar. La mida del fitxer a transferir sempre és:
bs*count
També existeixen les següents mides de bloc:
Es poden utilitzar també els següents sufixos:
Algunes implementacions suporten utilitzar el signe de multiplicació:
$ dd bs=2x80x18b if=/dev/fd0 of=/tmp/floppy.image
El paràmetre conv permet fer transformacions
# dd if=/dev/cdrom of=/home/sergi/imatgeCD.iso bs=2048 conv=sync,notrunc
Si volem fer més que un esborrat d'un dispositiu, podem omplir-lo amb dades aleatòries. Això dificulta el procés de recuperació de fitxers esborrats (informàtica forense):
# dd if=/dev/urandom of=/dev/sda
alternative:
for n in {1..7}; do dd if=/dev/urandom of=/dev/sda bs=8b conv=notrunc; done
Un disc sencer:
# dd if=/dev/sda of=/dev/sdb bs=4096 conv=notrunc,noerror
Una partició:
# dd if=/dev/sda2 of=/dev/sdb2 bs=4096 conv=notrunc,noerror
On
Podeu executar:
# dd if=/dev/sdb2 of=/home/sergi/partition.img bs=4096 conv=notrunc,noerror
Amb aquesta comanda farem una còpia de la partició 2 del segon disc al fitxer /home/sergi/partition.img.
Es pot utilitzar dd amb combinació amb ssh utilitzant un conducte (pipe):
# dd if=/dev/sdb2 | ssh [email protected] "dd of=/home/usuari/partition.image"
Suposant que els sectors ocupen 512 bytes (és lo habitual):
$ dd if=/dev/fd0 of=/home/sam/MBRboot.image bs=512 count=2
Copiar només el gestor d'arrancada (no còpia la taula de particions):
# dd if=/dev/sda of=/home/sergi/MBR.image bs=446 count=1
Copiar sencer:
# dd if=/dev/sda of=/home/sergi/MBR.image bs=512 count=1
Consulteu MBR.
Si volem copiar el primer cilindre d'un disc, és a dir, els primers 64 sectors.
# dd if=/dev/sda of=copia.mbr bs=512 count=64
Podem copiar-la directament de disc dur a disc dur amb
# dd if=/dev/sda of=/dev/sdb bs=512 count=64
# dd if=filename of=filename conv=ucase
Per comprovar el temps que tarda en crear un fitxer de 1GB (1 GigaByte= 1024M*8bits)
$ dd if=/dev/zero bs=1024 count=1000000 of=/home/sam/1Gb.file
Un altre opció és utilitzar blocs de dades més llargs
$ dd if=/home/sam/1Gb.file bs=64k | dd of=/dev/null
Es pot fer combinant conductes i l'ordre hexdump:
dd if=/dev/mem | hexdump -C | grep 'some-string-of-words-in-the-file-you-forgot-to-save-before-you-hit-the-close-button'
A la màquina origen:
# dd if=/dev/sda1 bs=16065b | netcat < targethost-IP > 1234
I a la màquina destinació:
# netcat -l -p 1234 | dd of=/dev/sda1 bs=16065b
Consulteu netcat.
Enviant una senyal USR1 a un procés dd en execució podem consultar les estadístiques:
$ dd if=/dev/zero of=/dev/null& pid=$! $ kill -USR1 $pid 18335302+0 records in 18335302+0 records out 9387674624 bytes (9.4 GB) copied, 34.6279 seconds, 271 MB/s
$ mount -o loop floppy.img /mntpoint
Podem utilitzar el dispositiu especial /dev/zero per omplir de zeros un fitxer
# dd if=/dev/zero of=fitxer_buit.img bs=1024 count=400 400+0 registres llegits 400+0 registres escrits 409600 octets (410 kB) copiats, 0,00359745 s, 114 MB/s
Aquest exemple crear un fitxer de mida 400KBytes (400x1024bits).
També podeu utilitzar:
$ dd if=/dev/zero of=file1G.tmp bs=1G count=1
Per fer un fitxer buit de mida 1Giga.
Podeu comprovar que el disc esta buit amb la comanda hexdump:
$ dd if=fitxer_buit.img | hexdump -C | head 800+0 registres llegits 800+0 registres escrits 409600 octets (410 kB) copiats, 0,0438514 s, 9,3 MB/s 00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 00064000
L'asterisc indica repetició de les dades anteriors (to zeros).
Un cop creat el fitxer buit es pot afegir un sistema de fitxers, per exemple amb l'ordre mkfs.
Primer preparem un espai:
$ dd if=/dev/zero of=/vserver/images/vm_base.img bs=1024k count=1000
Crea espai per un disc de 1GB.
$ dd if=/dev/zero of=/vserver/images/vm_base-swap.img bs=1024k count=500
Crea espai per un disc de 512Mb.
Ara els formatem:
$ sudo mkfs.ext3 /vserver/images/vm_base.img ... /vserver/images/mail.img is not a block special device. Proceed anyway? (y,n) <-- y
Per formatar el swap:
$ sudo mkswap /vserver/images/vm_base-swap.img
Podeu omplir el disc amb un sistema bàsic utilitzat debootstrap
Recursos:
Consulteu:
GPXE#Com_crear_un_USB_amb_gPXE.3F
Virtual Box té una eina anomenada convertdd que permet convertir una imatge dd a una imatge de virtualBox
ESTADÍSTIQUES | Ubuntu Server | Ubuntu Desktop ext3 | Ubuntu Desktop etx4 | Windows XP + Ubuntu Desktop ext3 |
---|---|---|---|---|
Mida Sistema Origen | 3.6 GB | Falta pujar imatge | 2.1 GB o 6.2 GB | 1GB + 2.61 GB |
Temps Previst | 60.3 s | Falta pujar imatge | 27 s o 80.67 s | 36 s / 94 s = 130 s |
Temps Real | 405,413 s | Falta pujar imatge | -- o 156.11 s | 910 s |
CPU | Dos Processadors Intel Core 2 Duo E4400 @ 2.00 GHz | Falta pujar imatge | Dual-Core E5700 3.00 GHZ | Dos Processadors Intel Core 2 Duo E4400 @ 2.00 GHz |
RAM | 1.8 GiB | Falta pujar imatge | 2 GB | 2.8 GB |
Disc Dur | 500 GB | Falta pujar imatge | 250 GB | 500 GB |
TODO
Proposta pràctiques alumnes:
Pràctiques d'alumnes: