Re: dd για Dual Boot δίσκου

Konstantinos Togias ktogias at math.upatras.gr
Wed Feb 9 15:21:24 UTC 2011


Η μετακίνηση του ubuntu (ή οποιασδήποτε gnu/linux διανομής) σε νέο
δίσκο ή νέο/νές διαμέριση/διαμερίσεις μπορεί να γίνει και χωρίς εκ
νέου εγκατάσταση του λειτουργικού. Στο linux τα πάντα είναι αρχεία που
καθορίζονται μονοσήμαντα από το απόλυτο path τους που ξεκινά πάντα από
το ριζικό κατάλογο /. Αν χρησιμοποιούμε περισσότερες κατατμήσεις, τότε
αυτές προσαρτώνται σε κάποιο κατάλογο που βρίσκεται και αυτός κάτω από
το /. Έτσι μπορούμε να μεταφέρουμε όλη την εγκατάσταση με τα
εκτελέσιμα, τον πυρήνα, τους προσωπικούς καταλόγους των χρηστών από
ενα δίσκο σε ένα άλλο ή να τα αναδιατάξουμε σε διάφορα partitions
φροντίζοντας απλά να μην αλλάξουν λόγω της μεταφοράς τα απόλυτα paths
των διαφόρων αρχείων.

Π.χ. Έστω ότι έχουμε μια εγκατάσταση ubuntu στον δίσκο a σε μια ενιαία
κατάτμηση (την 0). Αυτό σημαίνει ότι το / είναι η κατάτμηση sda1. Όλα
τα άλλα αρχεία βρίσκονται μέσα στο sda1. Ακόμα στο ubuntu χρειαζόμαστε
και μια κατάτμηση για swap. Έστω ότι αυτή είναι η sda2. Το σύστημά μας
για να λειτουργήσει πρέπει λοιπόν να ξέρει ότι το / είναι το sda1 και
το swap το sda2.

Αυτό το μαθαίνει ο πυρήνας μας από το αρχείο /etc/fstab. Εκεί μέσα
αναφέρονται οι αντιστοιχίες. Παλιότερα οι αντιστοιχίες δηλώνονταν με
βάση το αρχείο συσκευής που φτιάχνει ο πυρήνας για κάθε δίσκο και
κατάτμηση. Στις πιο πρόσφατες εκδόσεις χρησιμοποιείται ως
αναγνωριστικό το UUID του συστήματος αρχείων της κατάτμησης, το οποίο
είναι ένα μοναδικό αλφαριθμητικό - ταυτότητα που προκύπτει από το ίδιο
το σύστημα αρχείων. Έτσι ακόμα και αν αλλάξει για κάποιο λόγο η
αρίθμηση των συσκευών, ο πυρήνας θα βρει τις σωστές κατατμήσεις που
πρέπει να προσαρτηθούν από το UUID τους. Για να μάθουμε το uuid μιας
κατάτμησης μπορούμε να χρησιμοποιήσουμε τις εντολές blkid και vol_id.
Περισσότερα για το UUID μπορείτε να δείτε στο
http://www.unixtutorial.org/2008/05/ubuntu-uuid-how-to/ .

Πριν όμως από τον πυρήνα, υπάρχει και κάποιος άλλος που πρέπει να
ξέρει κάτι για την φυσική τοποθεσία των συστημάτων αρχείων μας. Αυτός
είναι ο εκκινητής συστήματος GRUB. Μια και τα αρχεία του ίδιου του
πυρήνα βρίσκονται μέσα σε μια κατάτμηση, ο GRUB πρέπει να ξέρει ποια
είναι αυτή προκειμένου να σηκώσει τον πυρήνα. Σε παλιότερες εκδόσεις
αυτό οριζόταν στο /boot/grub/menu.lst . Στις πιο πρόσφατες, ο grub
ανιχνεύει αυτόματα τις κατατμήσεις όπου κατοικούν πυρήνες λειτουργικών
συστημάτων και αυτορρυθμίζεται όταν τρέχουμε την εντολή update-grub.

Έστω τώρα ότι θέλουμε να μεταφέρουμε την εγκατάσταση που περιγράψαμε
πιο πάνω σε ένα νέο δίσκο και να βαλουμε το / σε μια κατάτμηση και το
/home σε μια άλλη. Η διαδικασία που ακολουθούμε είναι η εξής:

1. Συνδέουμε το νέο δίσκο.
2. Εκκινούμε στο υπάρχον σύστημα και διαμερίζουμε μέσα από αυτό το νέο
δίσκο σε 3 κατατμήσεις. Μια για το / μια το /home και μια για το swap.
Αυτό μπορεί να γίνει με fdsik ή gparted.
3. Δημιουργούμε τα αντίστοιχα συστήματα αρχείων στις κατατμήσεις που
φτιάξαμε (π.χ. mkext3fs για / και /home και mkswap για την κατάτμηση
που θα χρησιμοποιηθεί ως swap.
4. Κάνουμε mount την κατάτμηση που θα χρησιμοποιήσουμε ως / στο /mnt μας.
5. Δημιουργούμε τους καταλόγους dev και proc μέσα στο /mnt. Δεν
χρειάζεται να αντιγράψουμε τα αρχεία των τρεχόντων /dev και /proc
στους νέους φακέλους, μια και αυτά δημιουργούνται αυτόματα από τον
πυρήνα.
6. (Με δικαιώματα root) Αντιγράφουμε όλους τους άλλους καταλόγους του
τρέχοντος / στο /mnt εκτός από τον /home. Κατά την αντιγραφή
φροντίζουμε να διατηρούνται οι ιδιότητες ιδιοκτησίας και δικαιωμάτων
των αρχείων και να μεταφερθούν ως έχουν οι συμβολικοί σύνδεσμοι. Η
εντολή sudo cp -a /etc /mnt/ π.χ. θα κάνει τη δουλειά.
7. (Με δικαιώματα root) Δημιουργούμε το φάκελο /mnt/home και κάνουμε
mount την κατάτμηση που προορίζουμε για /home στο /mnt/home.
8. (Με δικαιώματα root) Αντιγράφουμε τα περιεχόμενα του /home στο
/mnt/home, με cp -a.
9. Βρίσκουμε τα UUIDs των νέων κατατμήσεων με το vol_id.
10. Επεξεργαζόμαστε το /mnt/etc/fstab και αλλάζουμε τα uuids ώστε να
αντιστοιχούν με αυτά των νέων κατατμήσεων.
11. Κάνουμε mount --bind τα /dev και /proc στα /mnt/dev και /mnt/proc
12. Κάνουμε chroot στο /mnt. Πλέον είναι σαν να έχουμε bootaρει από το
νέο δίσκο.
13. Τρέχουμε το grub-install για να εγκαταστήσουμε το grub στο νέο
δίσκο (αν ο νέος δίσκος είναι αναγνωρισμένος ως /dev/sdb τρέχουμε
grub-install /dev/sdb.
14. Τρέχουμε και ένα update-grub (δεν ξέρω αν είναι απαραίτητο).
15. Πλέον, αν δεν μας έχει ξεφύγει κάτι έχουμε κάνει όλες τις
ρυθμίσεις για να λειτουργήσει το σύστημά μας από το νέο δίσκο.
Βγαίνουμε από το chroot και κάνουμε shut down τον υπολογιστή. Βγάζουμε
τον παλιό δίσκο ή ρυθμίζουμε το bios να bootάρει από το νέο,
σταυρώνουμε τα δάχτυλα και περιμένουμε. Αν όλα πήγαν καλά θα σηκωθεί
μια χαρά το γνώριμο ubuntu μας.

Τα παραπάνω βήματα δεν είναι αναλυτικά και κάποιος πρέπει να διαβάσει
λίγα man για να τα ακολουθήσει (man mount, man fstab, man chroot, man
fdisk, man cp ...). Μπορεί ακόμα να έχω ξεχάσει κάτι. Πάνε αρκετοί
μήνες από τότε που έκανα τελευταία φορά τη διαδικασία.


Και τέλος, πριν δοκιμάσετε.... ΠΑΡΤΕ BACKUP ΟΤΙ ΘΑ ΣΑΣ ΛΕΙΨΕΙ ΑΝ ΤΟ
ΧΑΣΕΤΕ ΜΕ ΚΑΠΟΙΟ ΛΑΘΟΣ ΧΕΙΡΙΣΜΟ. (και έχετε και ένα cd εγκατάστασης
ubuntu πρόχειρο σε περίπτωση που τα κάνετε τόσο μαντάρα που δεν
παίρνει γιατριά).




---
Konstantinos Togias
Dipl.-Math., M.Sc.
Hellenic Open University
and Research Academic Computer Technology Institute

Ubuntu-gr LoCo team member


More information about the Ubuntu-gr mailing list