Linux Inside
42
Linux Boot Process
Έτσι, λοιπόν, τα 64 bytes στο MBR δηλώνουν τις πρωτεύ-
ουσες κατατμήσεις. Και επειδή μπορούν να οριστούν έως
τέσσερις τέτοιες, χρησιμοποιούμε 16 bytes ανά κατάτμηση,
σύνολο 64.
Βήμα 3 – GRand Unified Bootloader
Το επόμενο βήμα είναι η επιλογή του λειτουργικού συστή-
ματος. Το GRUB [5] είναι ένα πρόγραμμα το οποίο μας εμφα-
νίζει ένα αρχικό μενού, από το οποίο επιλέγουμε το λειτουρ-
γικό σύστημα που θέλουμε να εκκινήσουμε. Είναι, δηλαδή,
ένας διαχειριστής εκκίνησης (ή boot loader) ο οποίος μπορεί
να εκκινήσει Windows, Linux ή ακόμη και Solaris χωρίς πρό-
βλημα.
Η διαδικασία εκκίνησης λειτουργικού μέσω GRUB αποτε-
λείται από τρία (3) στάδια, τα stage1, stage1.5 & stage2. Μέ-
σα από το μενού, πέρα από τη δυνατότητα επιλογής λειτουρ-
γικού συστήματος, μπορούμε να επεξεργαστούμε τις επιλο-
γές των λειτουργικών συστημάτων είτε για να κάνουμε αλλα-
γές είτε για να δημιουργήσουμε μία νέα εγγραφή. Το GRUB
μάς δίνει έναν διερμηνευτή εντολών για να εκτελέσουμε κα-
τάλληλες εντολές. Είναι ένας ολοκληρωμένος boot loader και
δεν είναι τυχαίο που έχει αντικαταστήσει το LiLo (Linux
Loader) που κυριαρχούσε παλιότερα.
GRUB – stage1
Αυτό καταλαμβάνει το code area του MBR, δηλαδή, τα
πρώτα 440 bytes. Η εγκατάσταση του GRUB γίνεται από το
λειτουργικό σύστημά μας. Εάν για κάποιο λόγο δεν γίνει ή
εάν θέλουμε να το επανεγκαταστήσουμε, τότε χρειάζεται να
πληκτρολογήσουμε την παρακάτω εντολή ως διαχειριστές:
grub-install ‘(hd0)’
Η αρίθμηση των δίσκων και κατατμήσεων μέσα από το
GRUB είναι αριθμητική και ξεκινά από το μηδέν. Έτσι η πρώ-
τη κατάτμηση του πρώτου δίσκου είναι η hd0,0. Στο αρχείο
/boot/grub/device.map φαίνεται και η αντιστοίχιση:
(hd0) /dev/sda
Το μέγεθος του stage1 είναι:
# du -b /boot/grub/stage1
512 /boot/grub/stage1
To stage1 εντοπίζει τη γεωμετρία του δίσκου και προσπαθεί
να διαβάσει το stage1.5.
GRUB – Stage 1.5
Το επόμενο στάδιο του GRUB είναι το 1.5. Λόγω του περιο-
ρισμού του μεγέθους του stage1, υπάρχει μόνο η δήλωση
του stage1.5 σε επίπεδο CHS [6]. Δείτε στο τέλος του άρ-
θρου το σύνδεσμο που έχει στη Wikipedia, είναι εξαιρετικό
για να καταλάβετε πώς δουλεύει ένας δίσκος. Το stage1, λοι-
πόν, περιέχει πληροφορίες για τους κυλίνδρους, τις κεφαλές
και τις τομές ενός δίσκου και ό,τι χρειάζεται για να διαβάσει
το stage1.5.
Με τέτοιες κλήσεις CHS, το GRUB εντοπίζει το stage1.5
που βρίσκεται στο δίσκο μας και προσπαθεί να το διαβάσει.
Μόλις το διαβάσει, έχει πλέον πρόσβαση στο filesystem, δη-
λαδή, στα αρχεία του συστήματός μας.
Το stage1.5 φορτώνει το αντίστοιχο σύστημα αρχείων στο
GRUB για να μπορεί να διαβάσει όλα τα απαραίτητα αρχεία
και, φυσικά, το stage2.
Στο δικό μου σύστημα (και πιστεύω σε όλα τα δικά σας)
φορτώνει το /boot/grub/e2fs_stage1_5, καθώς αυτό είναι για
ext filesystem. Αυτό το σημείο είναι σημαντικό, γιατί πλέον το
GRUB έχει τη δυνατότητα να διαβάσει αρχεία, χωρίς να χρει-
αστεί να τα εντοπίσει με κλήσεις CHS.
Η δομή ενός αρχείου συστήματος, το λεγόμενο data
structure, περιγράφεται από τα inodes. To inode είναι ένας
pointer (αριθμός) ο οποίος δείχνει πού είναι το πραγματικό
αρχείο δεδομένων στο δίσκο. Έτσι, λοιπόν, όταν το GRUB
διαβάζει το σύστημα αρχείων, αναζητά το inode για να διαβά-
σει το αρχείο. Κι έτσι διαβάζει το stage2.
GRUB – Stage2
Αφού φορτωθεί και το stage2, είμαστε πλέον σε θέση να
επιλέξουμε λειτουργικό σύστημα. Το GRUB θα εμφανίσει ένα
μενού επιλογών, το οποίο μπορούμε να τροποποιήσουμε!
Μην ξεχνάμε ότι το GRUB μάς προσφέρει ένα ολοκληρωμένο
κέλυφος, το οποίο μας δίνει τη δυνατότητα να επεξεργαστού-
με τις επιλογές.
Ένα τυπικό παράδειγμα μίας εγγραφής λειτουργικού συ-
στήματος είναι το εξής:
title Linux v3
root (hd0,0)
kernel /boot/vmlinuz root=/dev/sda1 ro
initrd /boot/initramfs.img
GRUB – Εγγραφές του μενού
Σε αυτό το σημείο είμαστε έτοιμοι να επιλέξουμε το λει-
τουργικό που θέλουμε να εκκινήσουμε, από το μενού επιλο-
γής λειτουργικού συστήματος. Προτού, όμως, επιλέξουμε το
αγαπημένο μας λειτουργικό σύστημα, καλό θα είναι να εξηγή-
σουμε τι σημαίνουν οι εγγραφές που βλέπουμε στο παραπά-
νω τυπικό παράδειγμα.
Title:
Είναι ο τίτλος που φαίνεται στο μενού επιλογής. Επί-
σης, με βάση αυτό το στοιχείο γίνεται και ο διαχωρισμός στο
GRUB.
root:
Δηλώνει το δίσκο στον οποίο βρίσκεται το λειτουργικό
σύστημά μας. Όπως είπαμε στην ονοματολογία των δίσκων
και των κατατμήσεων, εδώ η αρίθμηση είναι αριθμητική, ξεκι-
νώντας από το 0. Έτσι, ο πρώτος δίσκος και η πρώτη κατά-
τμηση είναι το ‘hd0,0’.
kernel:
Αυτή η δήλωση περιγράφει πού είναι ο πυρήνας
του λειτουργικού συστήματός μας. Αυτό το αρχείο θα προ-
σπαθήσει να διαβάσει κατά την εκκίνηση του λειτουργικού συ-
στήματός μας. Εάν η δήλωση περιέχει το vmlinuz (με z στο
τέλος), σημαίνει ότι ο πυρήνας μας είναι συμπιεσμένος. Εάν
είναι vmlinux, τότε είναι ασυμπίεστος.
Στην ίδια γραμμή δηλώνουμε ποιο είναι το root σύστημα
αρχείων μας. Το rootfs αποτελεί τον αρχικό κατάλογο
(root–ρίζα) στον οποίο βρίσκεται το σύστημα αρχείων. Εδώ η
ονοματολογία είναι /dev/sda1 (ή αντίστοιχα) και έχουμε επί-
σης τη δυνατότητα να ορίσουμε, εκτός από το όνομα του δί-
σκου, την ετικέτα του δίσκου ή ακόμη και το UUID.
Σε αυτό το σημείο θα κάνουμε μία παρένθεση στην περι-
γραφή της διαδικασίας εκκίνησης ενός Linux λειτουργικού
συστήματος και θα πούμε δύο λόγια για την ονοματολογία δί-
Μέσα από το μενού, πέρα από τη δυνατότητα
επιλογής λειτουργικού συστήματος, μπορούμε
να επεξεργαστούμε τις επιλογές των
λειτουργικών συστημάτων είτε για να κάνουμε
αλλαγές είτε για να δημιουργήσουμε μία νέα
εγγραφή.