Next Previous Contents

5. Εκκίνηση

Όταν το σύστημα ξεκινά, το BIOS διαβάζει τον τομέα 0 (γνωστός και ως MBR - Master Boot Record) από τον πρώτο δίσκο (ή από δισκέτα ή CD-ROM) και διαβάζει τον κώδικα που βρίσκει εκεί - συνήθως έναν φορτωτή. Αυτά τα προγραμματάκια συνήθως δεν περιέχουν οδηγούς και χρησιμοποιούν το BIOS. Αυτό σημαίνει ότι ο πυρήνας του Linux μπορεί να φορτωθεί μόνο όταν βρίσκεται ολόκληρος στους πρώτους 1024 κυλίνδρους.

Το πρόβλημα αυτό λύνεται πολύ εύκολα: σιγουρευτείτε ότι ο πυρήνας (και ίσως και άλλα αρχεία που χρειάζονται κατά την εκκίνηση, όπως τα αρχεία του LILO) βρίσκονται σε μια κατάτμηση που περιέχεται εξ ολοκλήρου στους πρώτους 1024 κυλίνδρους και ότι το BIOS μπορεί να έχει πρόσβαση - αυτό σημαίνει τον πρώτο ή δεύτερο δίσκο.

Έτσι: δημιουργήστε μια κατάτμηση, ας πούμε 10MB, ώστε να υπάρχει χώρος για μερικούς πυρήνες, σιγουρεύοντας ότι βρίσκεται ολόκληρη στους πρώτους 1024 κυλίνδρους του πρώτου ή δεύτερου δίσκου. Προσαρτήστε την στο /boot ώστε το LILO να βάλει ό,τι χρειάζεται εκεί.

5.1 Το LILO και η επιλογή `linear'

Άλλο ένα σημείο στο οποίο ο φορτωτής και το BIOS πρέπει να συμφωνούν είναι η γεωμετρία του δίσκου. To LILO ρωτά τον πυρήνα για τη γεωμετρία, αλλά όλο και περισσότεροι προγραμματιστές οδηγών έχουν την κακή συνήθεια να παίρνουν τη γεωμετρία από τον πίνακα κατατμήσεων, αντί να λένε στο LILO τι θα χρησιμοποιεί το BIOS. Έτσι, η γεωμετρία από τον πυρήνα είναι συχνά άχρηστη. Σε αυτές τις περιπτώσεις είναι χρήσιμο να βάλετε στο LILO την επιλογή `linear'. Το αποτέλεσμα είναι ότι το LILO δε χρειάζεται τη γεωμετρία κατά την εγκατάσταση του φορτωτή αλλά κάνει τη μετατροπή της γραμμικής διεύθυνσης κατά την εκκίνηση. Και γιατί αυτό δεν ισχύει εξ ορισμού; Υπάρχει ένα μειονέκτημα: με την επιλογή `linear' το LILO δεν ξέρει για τον αριθμό των κυλίνδρων, οπότε δεν μπορεί να σας προειδοποιήσει αν μέρος του πυρήνα είναι εγκατεστημένο μετά το πέρας των 1024 κυλίνδρων και μπορεί να καταλήξετε με ένα σύστημα που δεν ξεκινά.

5.2 Ένα bug του LILO

Με εκδόσεις του LILO κάτω του v21 υπάρχει ένα ακόμα πρόβλημα: η μετατροπή διευθύνσεων που γίνεται κατά την εκκίνηση είναι προβληματική: όταν το c*H είναι 65536 ή παραπάνω, δημιουργείται λάθος στον υπολογισμό. Για Η μεγαλύτερα του 64 δημιουργείται αυστηρότερο όριο για το c από το γνωστό c < 1024; για παράδειγμα, με Η=255 και ένα παλιό LILO πρέπει να έχετε c < 258. (c=ο κύλινδρος όπου βρίσκεται ο πυρήνας, Η=αριθμός κεφαλών).

5.3 Οι 1024 κύλινδροι δεν είναι 1024 κύλινδροι

Ο Tim Williams γράφει: `Είχα την κατάτμηση του Linux στους πρώτους 1024 κυλίνδρους και πάλι δεν ξεκινούσε. Μόνο όταν το έβαλα πριν το 1 GB δούλεψε'. Πώς γίνεται αυτό; Αυτός ήταν ένας SCSI δίσκος με AHA2940UW ελεγκτή που χρησιμοποιεί είτε H=64, S=32 (δηλαδή κύλινδροι του 1 MiB = 1.05 MB), ή H=255, S=63 (δηλαδή κύλινδροι των 8.2 MB), ανάλογα με τις επιλογές στον δίσκο και το BIOS. Αναμφισβήτητα το BIOS υποθέτει το πρώτο, οπότε οι 1024 κύλινδροι φτάνουν μέχρι το 1 GiB, ενώ το Linux χρησιμοποιεί το δεύτερο και το LILO νόμιζε ότι το όριο ήταν στα 8.4 GB.


Next Previous Contents