Δημοσιεύτηκε: 05 Απρ 2009, 17:48
από digibill
ΠΡΟΣΟΧΗ: Επειδή τα ακόλουθα περιέχουν οδηγίες για low level διεργασίες, βεβαιωθείτε ότι ΚΑΤΑΛΑΒΕΝΕΤΕ ΤΙ ΚΑΝΕΤΕ, μιας και μπορεί πολύ εύκολα να καταστρέψετε τα δεδομένα κάποιου από τα partitions σας!

Πολλές φορές είναι χρήσιμη η δημιουργία ενός image από κάποιον σκληρό μας δίσκο. Μπορεί πχ να έχουμε ένα image του συστήματος και να το εγκαταστήσουμε εύκολα σε πολλά PC, να πάρουμε κάποιο backup ολόκληρου του σκληρού ή -όπως συνέβη στην δική μου περίπτωση- να χρειαστεί να φτιάξουμε ένα image ενός σκληρού για να το χρησιμοποιήσουμε σε κάποιο πρόγραμμα (εγώ ήθελα να βρω κάποια διεγραμένα αρχεία μου και το foremost που είναι από τα καλύτερα προγράμματα στο είδος, διαβάζει image files και ψάχνει εκεί για διάφορα αρχεία).

Η διαδικασία είναι τόσο απλή που εμένα... με μπέρδεψε :P Το ubuntu έχει προεγκατεστημένη την δυνατότητα να δημιουργεί και να ανακτά images με την εντολή dd.

Για την δημιουργία image η εντολή συντάσσεται ως εξής:

Κώδικας: Επιλογή όλων
sudo dd if=/dev/DISK of=/IMAGE_FILE.dd


Στο όρισμα του "if=" βάζουμε το id του δίσκου / partition από τον οποίο θέλουμε να φτιάξουμε το image. To id μπορούμε να το βρούμε είτε από τον partition editor, είτε με την εντολή "sudo fdisk -l" (χωρίς εισαγωγικά εννοείται!) είτε με όποιον άλλο τρόπο μας βολεύει. Για παράδειγμα, στον Partition Editor επιλέγουμε τον δίσκο που μας ενδιαφέρει στην πάνω δεξιά λίστα και βλέπουμε αυτομάτως το id του. Στην δικιά μου περίπτωση με ενδιέφερε ο δίσκος /dev/sdb1 |(για την ακρίβεια το partition sdb1)

Εικόνα

Από τερματικό η εντολή "sudo fdisk -l" επιστρέφει αποτέλεσμα σαν αυτό, με όλους τους δίσκους του συστήματος:

Κώδικας: Επιλογή όλων
vasilis@vasilis-desktop:~$ sudo fdisk -l
[sudo] password for vasilis:

Disk /dev/sda: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x0003fead

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1               1       60801   488384001   83  Linux

Disk /dev/sdb: 40.0 GB, 40020664320 bytes
255 heads, 63 sectors/track, 4865 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x9a8e9a8e

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1        4865    39078081    7  HPFS/NTFS

Disk /dev/sdc: 80.0 GB, 80026361856 bytes
255 heads, 63 sectors/track, 9729 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0xf66f2795

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1   *           1        9327    74919096   83  Linux
/dev/sdc2            9328        9729     3229065    5  Extended
/dev/sdc5            9328        9729     3229033+  82  Linux swap / Solaris

Disk /dev/sdd: 250.0 GB, 250059350016 bytes
255 heads, 63 sectors/track, 30401 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x238ab7ec

   Device Boot      Start         End      Blocks   Id  System
/dev/sdd1               1       30401   244196001   83  Linux

Disk /dev/sde: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0xe8d91010

   Device Boot      Start         End      Blocks   Id  System
/dev/sde1               1       60801   488384001    7  HPFS/NTFS
vasilis@vasilis-desktop:~$



Και πάλι, επιλέγουμε αυτόν που μας ενδιαφέρει και σημειώνουμε το id του.

Το όρισμα μετά το "of=" είναι η τοποθεσία που θα σωθεί το image. Εννοείται ότι θα πρέπει να δώσετε μια τοποθεσία σε κάποιον άλλο σκληρό από αυτόν του οποίου δημιουργείτε το image, έτσι! :P Και φυσικά χρειάζεται η πλήρης διαδρομή, πχ /media/disk2/IMAGE.dd Μπορείτε να ονομάσετε το image όπως εσείς θέλετε :)

Η δημιουργία ενδέχεται να διαρκέσει αρκετή ώρα, ανάλογα με το μέγεθος του δίσκου, άρα και του παραγόμενου image.
Με την εντολή dd μπορείτε επίσης απλά να αντιγράψετε όλα τα "φυσικά" περιεχόμενα ενός δίσκου σε έναν άλλο δίσκο / συσκευή αποθήκευσης. Απλά στο of= ορίζετε αντί για αρχείο ένα νέο id δίσκου, πχ /dev/hd1 κλπ! Το "καλό" είναι ότι η εντολή dd δεν ψάχνει για αρχεία κλπ.... Απλά αντιγράφει όποιο byte υπάρχει στον έναν δίσκο σε κάποιον άλλο!! Έτσι, μπορείτε να αντιγράψετε όλη την φυσική επιφάνεια ενός αποθηκευτικού μέσου...

Για να επαναφέρετε σε κάποιον δίσκο σας ένα image που έχετε δημιουργήσει, απλά αντιστρέφετε τα ορίσματα στα if και of. Παράδειγμα:

  • Δημιουργώ image από τον δίσκο sdb1 στην τοποθεσία /media/bkup/image.dd:
    Κώδικας: Επιλογή όλων
    sudo dd if=/dev/sdb1 of=/media/bkup/image.dd

  • Επαναφέρω το image.dd στον δίσκο sdb1:
    Κώδικας: Επιλογή όλων
    sudo dd if=/media/bkup/image.dd of=/dev/sdb1

Τόσο απλά :lol:Creative Commons License
Η εργασία υπάγεται στην άδεια Creative Commons Αναφορά-Παρόμοια διανομή 3.0 Ελλάδα