+ Rispondi alla discussione
Mostra risultati da 1 a 4 di 4

[Guida] - Clonare dischi (o partizioni) da shell con "dd"

Questa discussione si intitola [Guida] - Clonare dischi (o partizioni) da shell con "dd" nella sezione GNU/Linux, appartenente alla categoria Software; Linux ha in dotazione un semplice ma potente comando che consente di creare immagini RAW 1:1 di partizioni o di ...

  1. #1
    L'avatar di ginalfa
    ginalfa non è in linea Senior Member CT
    Data registrazione
    7 January 2010
    Sesso
    Uomo
    Messaggi
    439
    vCash
    600
    Grazie
    91
    Ringraziato 255 volte in 166 post

    Predefinito [Guida] - Clonare dischi (o partizioni) da shell con "dd"

    Linux ha in dotazione un semplice ma potente comando che consente di creare immagini RAW 1:1 di partizioni o di interi dischi.

    Questo può essere utile sia per normali operazioni di backup per le quali esistono comuque distro come SysRescueCD.

    SysRescueCD, con partimage, non effettua la copia RAW della partizione, ma del solo file system, cosa che riduce notevolmente la quantità di dati copiati, ma non rappresenta una vera copia 1:1 del disco o della partizione.

    Avere una copia 1:1 può essere utile, per esempio, se si vuole copiare l'intero disco di un notebook comprese le partizioni di ripristino per riaverlo lindo e pinto come lo si è comprato in caso di disastri accidentali o... colposi .



    Tutto questo va fatto da console per sfruttare al meglio la potenza dei comandi impiegati senza la sovrastruttura (ed i limiti di eventuali front-end grafici).



    Ecco la guida che ai meno navigati può sembrare ostica, ma con un minimo di confidenza col pinguino risulta abbastanza commestibile.

    Il comando "dd" legge byte per byte una qualsiasi periferica o file e ne indirizza il risultato al file o periferica di output.



    dd accetta i parametri if= (input file) e of= (output file)



    Per clonare un disco bisogna avere i privilegi di root, quindi, una volta aperto un terminale nel vostro gnome o KDE bisogna prima di tutto digitare

    Codice:
    ~$ sudo su
    oppure

    Codice:
    ~$ sudo -s
    e digitare la password di root



    L'esempio prende in considerazione la clonazione di un intero disco rigido reindirizzando il file prodotto ad un'unita disco esterna (USB), il tutto con le notazioni e convenzioni du un sistema *buntu (debian).


    Bisogna prima di tutto individuare l'unità disco origine e quella di destinazione

    Codice:
    # fdisk -l
    Avremo un otput del tipo:
    Disco /dev/sda: 82.0 GB, 81964302336 byte
    255 testine, 63 settori/tracce, 9964 cilindri
    Unità = cilindri di 16065 * 512 = 8225280 byte
    Identificativo disco: 0x0eb34caf

    Dispositivo Boot Start End Blocks Id System
    /dev/sda1 * 1 1958 15727603+ 7 HPFS/NTFS
    /dev/sda2 1959 9963 64300162+ f W95 Esteso (LBA)
    /dev/sda5 1959 9963 64300131 7 HPFS/NTFS

    Disco /dev/sdb: 40.0 GB, 40027029504 byte
    255 testine, 63 settori/tracce, 4866 cilindri
    Unità = cilindri di 16065 * 512 = 8225280 byte
    Identificativo disco: 0xf6b3f6b3

    Dispositivo Boot Start End Blocks Id System
    /dev/sdb1 * 1 3953 31746081+ 7 HPFS/NTFS
    /dev/sdb2 3954 4584 5068507+ 83 Linux
    /dev/sdb3 4585 4715 1052257 82 Linux swap / Solaris
    /dev/sdb4 4716 4866 1212907+ 83 Linux

    Disco /dev/sdc: 4143 MB, 4143972352 byte
    33 testine, 63 settori/tracce, 3893 cilindri
    Unità = cilindri di 2079 * 512 = 1064448 byte
    Identificativo disco: 0xb032b032

    Dispositivo Boot Start End Blocks Id System
    /dev/sdc1 * 1 3894 4046832 b W95 FAT32

    Assumiamo quindi di voler clonare il disco rigido interno /dev/sda e salvare l'immagine "backup" sull'unità USB /dev/sdc1 montata in /mnt/sdc1


    NOTA: E' importante che l'unità che si va a clonare sia smontata per evitare che qualcosa vada a cambiarne il contenuto "in corso d'opera" con risultati imprevedibili, quindi ricordatevi di dare un umount a tutte le partizioni montate relative a quell'unità. Nel nostro esempio : sda1 e sda5.


    Naturalmente ci servirà comprimere l'immagine per non ritrovarci un file mastodontico che non sapremmo dove mettere.

    Per questo abbiamo a disposizione l'ottimo algoritmo di compressione gzip

    Per clonare:
    Codice:
    # dd if=/dev/sda | gzip > /mnt/sdc1/backup.img.gz
    Dove dd legge il disco /dev/sda ne invia il risultato a gzip, che a sua volta lo comprime lo scrive nel file.

    Per l'operazione inversa, vale a dire per ripristinare, il comando è:
    Codice:
    # gzip -dc /mnt/sdc1/backup.img.gz | dd of=/dev/sda
    Dove gzip decomprime il file e ne invia al risultato a dd che lo scrive sulla periferica.

    Piccolo problema: spesso le unità esterne sono formattate in FAT32 che supporta file fino a 4GB oppure si vorrà poi conservare lìimmagine su DVD il cui file system supporta massimo 2GB.

    Qui soccorre un altro comanduccio presente in Linux: split, che serve appunto a dividere il file in parti di una data dimensione.

    Poniamo di voler suddividere il risultatato in parti di 2GB, compatibili sia con i DVD che con FAT32.

    Per clonare daremo:
    Codice:
    # dd if=/dev/sda | gzip -c | split -b 2048m - /mnt/sdc1/backup.img.gz.
    Dove dd legge la periferica, invia a gzip, che invia a split, che divide in parti di 2048MB (2GB) e lo scrive sul disco di destinazione.

    Notate che il nome del file di destinazione finisce con un "."

    Questo perché split aggiunge alla fine del nome del file "aa" "ab" "ac" e così via per distinguere i vari frammenti.

    Per rimettere le cose a posto invece usiamo l'ennesimo comando linux: "cat", che unisce (conCATena) tutto quello che gli viene dato in pasto.

    Codice:
    # cat /mnt/sdc1/backup.img.gz.* | gzip -dc | dd of=/dev/sda
    Che preleva i vari pezzi li invia a gzip, che li scompatta e li passa a dd che li scrive sul device.

    dd consente un'altra utile funzione che è quella di copiare il bootsector di un disco rigido:

    Per copiare il MBR
    Codice:
    # dd if=/dev/sda of=/mnt/sdc1/sda.boot.mbr bs=512 count=1
    per ripristinare il MBR
    Codice:
    # dd if=/mnt/sdc1/hda.boot.mbr of=/dev/sda bs=512 count=1
    Ultima modifica di ginalfa; 06-04-10 alle 11: 46.

    Rispondi citando Rispondi citando

  2. I seguenti 3 utenti concordano e/o ringraziano ginalfa per questo post

    Andy86 (07-12-10), Asterix (06-04-10), LadyHawke (06-04-10)

  3. # ADS
    Google Adsense Circuito Adsense
    Data registrazione
    da sempre
    Messaggi
    molti
     
  4. #2
    L'avatar di K.a.o.s.
    K.a.o.s. non è in linea Senior Member CT
    Data registrazione
    8 January 2010
    Sesso
    Uomo
    Località
    /dev/null
    Messaggi
    682
    vCash
    600
    Grazie
    118
    Ringraziato 349 volte in 283 post

    Predefinito Riferimento: LINUX: Clonare dischi (o partizioni) da shell con "dd"

    Bella guida ,
    aggiungerei solo qualche piccolo appunto però: se non si usa gzip (o in generale non la si comprime) si può creare un immagine del disco montabile da terminale, in modo da potervi accedere senza dover necessariamente ripristinarla. Basta montare il modulo loop se non è compilato come buit-in nel kernel (modprobe loop) e poi passare il parametro loop a mount (mount [immagine] /mnt/disco -o loop).

    Altro particolare: passando il parametro -9 a gzip si ottiene la massima compressione (più lenta). Sarebbe da sperimentare l'utilizzo con lzma, che, seppur avendo tempi di compressione lunghi, ottiene i migliori risultati (un kernel arriva ad occupare anche fino al 33% in meno con lzma rispetto a gzip). Ovviamente i tempi di estrazione sono più lunghi rispetto a gzip, ma migliori di bzip2.

    Rispondi citando Rispondi citando

  5. Il seguente utente concorda / ringrazia K.a.o.s. per questo post

    ginalfa (06-04-10)

  6. #3
    L'avatar di ginalfa
    ginalfa non è in linea Senior Member CT
    Data registrazione
    7 January 2010
    Sesso
    Uomo
    Messaggi
    439
    vCash
    600
    Grazie
    91
    Ringraziato 255 volte in 166 post

    Predefinito Riferimento: LINUX: Clonare dischi (o partizioni) da shell con "dd"

    Giusto. Io comunque ho finalizzato allo storage dell'immagine e non alla fruizione con mount -o loop.
    Per i diversi metodi compressione, perchè non posti le righe con le opportune modifiche?

    Rispondi citando Rispondi citando

  7. #4
    L'avatar di K.a.o.s.
    K.a.o.s. non è in linea Senior Member CT
    Data registrazione
    8 January 2010
    Sesso
    Uomo
    Località
    /dev/null
    Messaggi
    682
    vCash
    600
    Grazie
    118
    Ringraziato 349 volte in 283 post

    Predefinito Riferimento: LINUX: Clonare dischi (o partizioni) da shell con "dd"

    Mi sono dimenticato di questa discussione

    Dunque
    Per i diversi metodi compressione, perchè non posti le righe con le opportune modifiche?
    Beh, per prima cosa non sono su Linux , quindi andrei a mente...

    Codice:
    dd if=/dev/sda | gzip -9 > /mnt/sdc1/backup.img.gz
    Per la massima compressione di gzip.

    Per lzma... non mi ricordo sinceramente il comando ed è solamente un'idea buttata lì :). Bisognerebbe prima fare qualche prova. In ogni caso dovrebbe bastare sostituire gzip con lzma o il giusto comando.
    Ultima modifica di K.a.o.s.; 10-04-10 alle 21: 40.

    Rispondi citando Rispondi citando

+ Rispondi alla discussione

Segnalibri

Regole di scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •