== DCFLDD == Dcfldd e` un utilissimo tool per fare imaging dei dischi. Supporta molte funzionalita` utili quali per esempio l'hashing con diversi algoritmi della intera immagine e anche di spezzoni di essa, e l'output contemporaneo su piu` dispositivi o files, in modo da fare enne copie assieme (semplicemente indicando of=xxxx piu` di una volta). Un limite e` che usa sempre e comunque un solo core della CPU, e questo puo` mettere la CPU in crisi quando si fa hashing e i dischi sono veloci. Alcuni esempi di uso di dcfldd: * Copia da /dev/sda a /dev/sdz e contemporaneamente anche a un file su un disco montato, con generazione dell' hashlog e dell'errorlog, scegliendo come algoritmo di hashing sha512 e creando solo un hash per l'intera immagine {{{ dcfldd if=/dev/sda of=/dev/sdz of=/mnt/destination_file.dd hashlog=/mnt/hash.txt errlog=/mnt/error.txt hash=sha512 }}} * Come sopra, in piu` si fa guessing del tempo rimanente tenendo conto della dimensione del disco di partenza (sizeprobe) {{{ dcfldd if=/dev/sda of=/dev/sdz of=/mnt/destination_file.dd hashlog=/mnt/hash.txt errlog=/mnt/error.txt hash=sha512 sizeprobe=if }}} * Come sopra, in piu` si fa un hash a parte per ogni blocco di 1 GByte di dati (va a finire nell' hashlog) oltre all'hash totale. {{{ dcfldd if=/dev/sda of=/dev/sdz of=/mnt/destination_file.dd hashlog=/mnt/hash.txt errlog=/mnt/error.txt hash=sha512 sizeprobe=if hashwindow=1G }}} * '''Cancellazione''' di un hard disk con degli zeri (e conto del tempo rimanente): {{{ dcfldd pattern=00 of=/dev/sdc bs=1M sizeprobe=of }}} === Mettere R/O i device === Prima di combinare casini, e` meglio essere doppiamente sicuri mettendo in r/o i device originali. Per farlo, si puo` usare il comando {{{ blockdev --setro /dev/sdX }}} Avendo cura di farlo sia per il device di base che per le partizioni. Per esempio: {{{ blockdev --setro /dev/sdd blockdev --setro /dev/sdd1 }}} Il comando per tornare a scrivere e` {{{ blockdev --setrw /dev/sdX }}} === Test di velocita` e i loro risultati === {{{ time dcfldd if=/dev/sda of=/media/kurgan/secondario/test.dd hashlog=/media/kurgan/secondario/hash.txt hash=sha512 sizeprobe=if }}} Questo fra un SSD (in lettura) e un disco meccanico (in scrittura) tutti e due SATA3 ha fatto 99 Mbyte al secondo ovvero 5,8 Gbyte al minuto su un Core I7, senza mai mandare a tappo la cpu, compreso il tempo di hashing. Togliere l'hashing riduce il carico di CPU, ma tanto il collo di bottiglia sono i dischi e non la CPU. Questo test ha girato a 0.8 Gbit al secondo, ben sotto la velocita` del SATA3 (6 Gbit) ma sopra quella dell' USB2 (480 Mbit). {{{ time dcfldd if=/dev/sda of=/dev/null hashlog=/media/kurgan/secondario/hash.txt hash=sha512 sizeprobe=if }}} Questo fra un SSD e /dev/null, stesse condizioni di prima. Porta la CPU a tappo per calcolare l'hash. La porta a tappo comunque anche senza calcolare l'hash. Tempo impiegato 30 minuti. Velocita` reale 16,5 GByte / minuto ovvero 284 Mbyte/secondo ovvero 2,27 GBit/secondo, ancora lontano dai 6 Gbit del sata3. {{{ time dcfldd if=/dev/sda of=/dev/null hashlog=/media/kurgan/secondario/hash.txt hash=sha512 hashwindow=1G sizeprobe=if }}} Questo test e` come il precedente ma usa la hash window, quindi calcola di fatto due hash assieme, uno per la window e uno per il totale. Il tempo totale e` passato da 30 a 60 minuti. L'hashing prende molto tempo anche su una CPU veloce. Riducendo la hash window a 1M, quindi mille volte piu` piccola, comunque il processo dura sempre 60 minuti, segno che il problema e` nel fatto di fare due hash contemporeaneamente, e non nella piccola dimensione della hash window e del risultante elevato numero di righe dell'hashlog (ragionevole peraltro). === Qualche conclusione di massima sulle prestazioni === * USB3 e ESATA (3 Gbit) funzionano piu` o meno alla stessa velocita`, che e` quella del disco oppure quella della CPU se si vuole fare hashing. * A seconda delle prestazioni dei dischi la velocita` varia da 80 a 300 Mbyte/secondo. Questi sono alcuni esempi su Core i7 senza hashing (CPU scarica tranne che nel caso dell' SSD) * da un SSD in SATA a /dev/null: 280 Mbyte/secondo ovvero 16,5 Gbyte/minuto * da un HDD 5400 RPM 2,5 pollici in ESATA (3Gbit) o USB3 a /dev/null: circa 100 Mbyte/secondo ovvero 5,8 Gbyte/minuto * da /dev/zero a un HDD 5400 RPM 2,5 pollici in ESATA (3Gbit) o USB3: circa 90 Mbyte/secondo ovvero 5,1 Gbyte/minuto (non dipende dal fatto di scrivere, ma dal disco lento) * da un HDD 7200 RPM 3,5 pollici in ESATA (3Gbit) o USB3 a /dev/null: da 4 a 7 Gbyte/minuto a seconda del modello del disco (stessa interfaccia ESATA, stesso PC) * USB2 e` limitato a circa 40 MByte/secondo, quindi 2,3 GBytes al minuto.