Help

Christos Ricudis ricudis at itc.auth.gr
Thu Jul 23 14:01:38 EEST 2009


esk wrote:

> 
> Γειά σας..
> 
> Χρησιμοποιω το προγραμμα G4u για να κανω κλωνοποίηση δίσκων. Οι δισκοι 
> είναι SCSI και ειναι πανω σε controller Adaptec 29160.
> 
> Με το G4u (βασιζεται σε BSD) δεν υπαρχει κανενα προβλημα. Αναγνωριζει 
> τους δισκους και κάνω θαυμασια τη δουλεια μου. Το μονο αρνητικο ειναι 
> οτι πρεπει να εχω δευτερο δισκο για κλωνοποίση εκεινη τη στιγμη. Εγω 
> θελω να αποθηκευσω το image σε CD για να μη χρειαζομαι κάθε φορα να έχω 
> δισκο source.
> 
> Υπάρχει τo προγραμμα clonezilla (βασιζεται σε linux)  που εχει τη 
> δυνατοτητα να γράφει σε CD.
> Ομως δεν αναγνωρίζει τους δισκους (οι οποιοι σημειωτεο ειναι μικροι 9 GB).
> 


Δεν υπαρχει πιο σιγουρη συνταγη αποτυχιας απο το να χρησιμοποιεις ενα 
Unix συστημα με νοοτροπια Windows. Το Unix δεν ειναι "ενα καλυτερο 
συστημα σαν τα Windows", οσο κι αν κατι διανομες-de-cul ενθαρρυνουν 
αυτον τον τροπο σκεψης. Το Unix ειναι "κατι εντελως διαφορετικο".

Εξηγουμαι.

Νοοτροπια Windows :

Θελω να κανω το Χ. Για να δουμε αν υπαρχει καποιο ετοιμο προγραμματακι 
που να κανει το Χ. Α τι ωραια βρηκα το Α το Β το Γ και το Δ. Το Α και το 
Β κανουν περιπου το Χ αλλα οχι ακριβως. Το Γ κανει κατι τελειως 
διαφορετικο. Το Δ υποτιθεται οτι κανει το Χ αλλα μου σκαει στη μαπα.

Ουα ουα.

Η αντιστοιχη "Νοοτροπια Unix" ειναι :

Θελω να κανω το Χ. Το Χ μου φαινεται αρκετα στοιχειωδης εργασια, οποτε 
πριν κοιταξω αν υπαρχει καποιο ετοιμο προγραμματακι που την κανει, θα δω 
εαν μπορει να γινει με τα εργαλεια που μου δινει ετοιμα το συστημα, 
γιατι κατα πασα πιθανοτητα θα μου κανουν τη δουλεια μου.

Στην προκειμενη περιπτωση, αυτα τα εργαλεια λεγονται dd, mkisofs, bzip2, 
cdrecord.

Προσεχουμε οτι ενα συστατικο του αρχικου προβληματος ειναι "πως να 
χωρεσουμε ενα image 9GB σε ενα CD 650MB. Προφανως δε μπορουμε - πρεπει 
καπου να αποθηκευσουμε ενδιαμεσα αρχεια. Επειδη δεν θελουμε να το 
κανουμε, θα πρεπει να βρουμε ενα τροπο να γραψουμε κατευθειαν το image 
κομματιαστα στο CD.

Ενα full image του δισκου μπορεις να το παρεις με την εντολη

dd if=/dev/sda of=/tmp/sda-image-original.img bs=16384

(bs σημαινει block size. Το 16384 ειναι καλο νουμερο για δισκους).

Εαν απαλειψουμε την παραμετρο of, το image αντιγραφεται απο την dd στο 
standard output, απο οπου μπορει να το παραλαβει το mkisofs σε streaming 
mode για να δημιουργησει ενα .iso file που ειναι το "σωστο" format για 
CD images:

Η "ενωση" του standard output ενος προγραμματος με το standard input 
ενος αλλου γινεται με πιπα. Δηλαδη "|".

dd if=/dev/sda bs=16384 | mkisofs -stream-media-size 333000 > cd-image.iso

(το 333000 αντιστοιχει στον αριθμο των sectors ενος 650MB CD).

Το .iso file γραφεται στο CD με την εντολη cdrecord, η οποια επισης 
μπορει να δεχτει στο standard input της την εξοδο της mkisofs :

dd if=/dev/sda bs=16384 | mkisofs -stream-media-size 333000 | cdrecord 
-dao tsize=333000s -

Το - στο τελος του cdrecord command line του λεει "παρε την εισοδο σου 
απο το standard input"

Ολα ωραια και καλα εαν ο δισκος μας στο /dev/sda ειναι μικροτερος απο 
650MB. Τι κανουμε στην περιπτωση που ειναι 9GB?

Η dd εχει τη δυνατοτητα να κανει skip ενα αριθμο blocks που εμεις της 
δινουμε, και να σταματησει την αντιγραφη εκει που θα της πουμε. Οι 
αριθμοι που δεχεται για τα μεγεθη ειναι ολοι σε blocks, οποτε κατ'αρχας 
διαιρουμε τα νουμερα που εχουμε με το block size. Αφηνουμε παντα ενα 
περιθωριο μαλακ^H^H^H^H^Hασφαλειας.

600000000/16384 = 36621 και κατι ρεστα απο τσιχλοφουσκες. Αρα το CD μας
χωραει σιγουρα 36621 16384-byte blocks. Αρκει να το πουμε στο dd :

dd if=/dev/sda bs=16384 count=36621 | mkisofs -stream-media-size 333000 
| cdrecord -dao tsize=333000s -

για να γραψουμε σε CD τα πρωτα 600 mbytes του image του /dev/sda δισκου.

Τα επομενα 600mbytes τα παιρνουμε χρησιμοποιωντας στην dd την παραμετρο 
skip. θελουμε να προσπερασουμε τα πρωτα 36621 blocks που ηδη γραψαμε :

dd if=/dev/sda bs=16384 count=36621 skip=36621 | mkisofs 
-stream-media-size 333000 | cdrecord -dao tsize=333000s -

Προσεχουμε εδω οτι κατα τη διαδικασια, το dd μας ενημερωνει ποσα ακριβως 
bytes αντεγραψε :

599998464 bytes (600 MB minus change from bubblegum) copied, XXX 
seconds, YYY MB/s

Η τριτη δοση των 600mbytes βρισκεται στο block 2*36621 = 73242

dd if=/dev/sda bs=16384 count=36621 skip=73242 | mkisofs 
-stream-media-size 333000 | cdrecord -dao tsize=333000s -

Ποτε καταλαβαινουμε οτι η διαδικασια τελειωσε; Οταν το dd μας ενημερωσει 
οτι ο δισκος εφτασε στο τελος του, αρα αντεγραψε *λιγοτερα* απο τα 
συνηθισμενα 599998464 bytes.

Και τωρα ευλογα θα ρωτησει καποιος : "Γιατι πρεπει να κανω ολη αυτη τη 
μανουρα για να φτιαξω ενα disk image?". Στην απαντηση βρισκεται ακριβως 
το νοημα της ελευθεριας που σου παρεχει η χρηση του Unix - πιο 
καθημερινη και πιο απτη απο την καπως απομακρυσμενη και 
ιδεολογικοποιημενη αλλα παραπλησια εννοια του "ελευθερου/ανοιχτου" 
λογισμικου. Χρησιμοποιωντας το, εχεις την ελευθερια να κανεις οτι εσυ 
θελεις/χρειαζεσαι, αντι να εξαρτασαι απο το να σου καλυψει τις αναγκες 
σου ενας τριτος που γραφει το g4u, το clonezilla, η οτιδηποτε παρομοιο. 
Ελευθερια που, βεβαια, εχει ενα κοστος - το κοστος του οτι χρειαζεται να 
επενδυσεις χρονο και διαβασμα σε ενα πολυ μακρυ ταξιδι - που αξιζει ομως 
τον κοπο - μεχρι να μαθεις να συνδιαζεις αποδοτικα τα μικρα συστατικα 
ενος Unix συστηματος ετσι ωστε να δημιουργησεις εσυ το εργαλειο που 
χρειαζεσαι.

-- 
Christos Ricudis

Systems Administrator - IT Support Center     ___ O~
Aristotle University of Thessaloniki         =\_@\//=


More information about the Linux-greek-users mailing list