Έχετε αναρωτηθεί τι συμβαίνει όταν πατάτε το κουμπί power-on του υπολογιστή; Σας έχει ποτέ απασχολήσει η διαδικασία boot του Linux; Τι είναι αυτό το systemd για το οποίο έτυχε να διαβάσετε κάπου στο web; Όσο απλοϊκά ή αδιάφορα κι αν φαίνονται ερωτήματα σαν τα προηγούμενα, υποψιαζόμαστε ότι κάποιοι δεν μπορείτε να δώσετε ικανοποιητικές απαντήσεις. Αλλά για μια στιγμή. Χρειάζεται να σκοτίζεστε με τέτοια θέματα;

Γενικά, όχι, δεν χρειάζεται. Αν όμως θέλετε να λέτε ότι είστε καλός system administrator και πράγματι να είστε καλός system administrator, τότε θεωρούμε πως, ναι, οφείλετε να σκοτίζεστε με τέτοια θέματα – έστω κι αν είναι για μια φορά στο τόσο. Πιθανώς εξάλλου ν’ αντιμετωπίσετε παρόμοια ερωτήματα στο πλαίσιο εξετάσεων για κάποια πιστοποίηση που προσπαθείτε να πάρετε. Καθόλου δεν αποκλείεται, επίσης, να δεχθείτε παρόμοια ερωτήματα κατά τη διάρκεια μιας συνέντευξης (μας έχει συμβεί). Κρίμα δεν θα ήταν να δίνατε ελλιπή απάντηση, μόνο και μόνο επειδή το ερώτημα πάντα σας φαινόταν αδιάφορο ή προφανές; Αλλά ας μην αγχωνόμαστε τώρα με εξετάσεις, πιστοποιήσεις και συνεντεύξεις. Αντίθετα, ελάτε να συζητήσουμε για το τι συμβαίνει σ’ έναν υπολογιστή με το που τον ανοίγουμε, μετά να μάθουμε και πώς ακριβώς φορτώνει το Linux. Κάπως έτσι θα φτάσουμε στη διεργασία init και θα γνωρίσουμε το systemd, το οποίο όλες οι σύγχρονες διανομές έχουν υιοθετήσει.

Το boot process από κοντά

Ακόμη κι όσοι γνωρίζουν καλά τι συμβαίνει από το power-on ως το περιβάλλον γραφικών ή έστω ως την κονσόλα απλού κειμένου με την προτροπή για login, σπάνια σκέφτονται για τις σχετικές παρασκηνιακές διαδικασίες. Βέβαια εκείνοι που ξέρουν και γνωρίζουν δικαιούνται να μη σκέφτονται κάθε φορά για το τι συμβαίνει. Κέρδισαν αυτό το δικαίωμα από τη στιγμή που αφιέρωσαν χρόνο για να διαβάσουν, να μελετήσουν και να πειραματιστούν με τα PC τους, οπότε ας τους αφήσουμε ήσυχους, εκεί, στον άνετο καναπέ τους ή στον επιβλητικό τους θρόνο ή στην όποια καταλληλότερη μεταφορά μπορείτε να σκεφτείτε, τέλος πάντων. Η αλήθεια είναι ότι μερικές φορές έχουν ένα κάπως μπλαζέ υφάκι, κάπως ενοχλητικό ομολογουμένως. Λοιπόν! Προτείνουμε να μάθουμε κι εμείς για το boot process, αν μη το άλλο για να δούμε τι προκαλεί αυτό το υφάκι.

Η διαδικασία εκκίνησης ενός οποιουδήποτε OS ξεκινά με λειτουργίες που επιτελούνται αρχικά από το BIOS ή το UEFI του υπολογιστή και μετά από τον bootloader. Στη συνέχεια φορτώνει ο πυρήνας (kernel) και, ειδικά στην περίπτωση του Linux, η όλη διαδικασία ολοκληρώνεται με τη βοήθεια της διεργασίας init. Σε γενικές γραμμές, λοιπόν, μπορούμε να μιλάμε για τέσσερα διαφορετικά στάδια: BIOS/UEFI, bootloader, kernel και init.

  • Στάδιο 1α – BIOS. Το Basic Input/Output System είναι το κλασικό firmware στην πλατφόρμα του PC. Αν κάποια στιγμή χρειάστηκε ν’ αλλάξετε τη σειρά αναζήτησης bootable code στους (εσωτερικούς ή εξωτερικούς) δίσκους του PC σας, τότε έχετε ήδη αλληλεπιδράσει με το BIOS. Πρώτη δουλειά του BIOS με το που ανοίγουμε τον υπολογιστή είναι να εκτελεί μια σειρά από βασικούς διαγνωστικούς ελέγχους, ώστε να διαπιστωθεί αν το hardware βρίσκεται σε μια στοιχειωδώς καλή κατάσταση. Αφού το BIOS δει τους δίσκους, ψάχνει για το λεγόμενο boot block. Το πού ψάχνει σε κάθε δίσκο εξαρτάται από τη λογική διευθέτησης των κατατμήσεών του (MBR ή GPT partitioning). Πιο συγκεκριμένα, αν το partition table του υπό εξέταση δίσκου ακολουθεί τη λογική του MBR, τότε ψάχνει για το Master Boot Record. Αυτό βρίσκεται στον πρώτο τομέα (sector) του δίσκου, συγκεκριμένα στα πρώτα 512 bytes. Το MBR ενδέχεται να περιλαμβάνει κώδικα για το φόρτωμα κάποιου άλλου προγράμματος, κάπου αλλού στο δίσκο. Το τελευταίο αυτό πρόγραμμα είναι εκείνο που τελικά φορτώνει τον bootloader του λειτουργικού συστήματος.

  • Στάδιο 1β – UEFI. Βελτιωμένος απόγονος του παλιού καλού BIOS είναι το UEFI (Unified Extensible Firmware Interface). Η πλειονότητα των σύγχρονων PCs έχει firmware με UEFI. Η Apple το υιοθέτησε για τους υπολογιστές της χρόνια νωρίτερα, ωστόσο και τα Windows πλέον υποστηρίζουν την εκκίνηση από UEFI. Αν και το GPT partitioning σχεδιάστηκε ώστε να χρησιμοποιείται σε υπολογιστές με UEFI, αξίζει να σημειώσουμε ότι το booting από δίσκους GPT είναι δυνατό ακόμη και σε PCs με το κλασικό BIOS: ο πρώτος τομέας ενός δίσκου GPT είναι δεσμευμένος για κώδικα MBR, ώστε η εκκίνηση να ‘ναι δυνατή και σε υπολογιστή χωρίς UEFI.

  • Στάδιο 2 – Bootloader. Η αποστολή του bootloader είναι να εκκινεί το λειτουργικό σύστημα, ασχέτως αν πρόκειται για το Linux ή για κάποιο άλλο. Ειδικά στην περίπτωση του Linux, ο bootloader επιτρέπει την επιλογή πυρήνα προς φόρτωμα, ενώ είναι και ικανός να του περνά και μια σειρά από παραμέτρους. Ο bootloader που χρησιμοποιείται σήμερα κατά κόρον στον κόσμο του Linux είναι ο GRUB.

  • Στάδιο 3 – Πυρήνας (kernel). Αφού ο bootloader δώσει στον πυρήνα τις όποιες παραμέτρους για το boot, πρέπει να τον φορτώσει στη μνήμη. Αυτό είναι λίγο δυσκολότερο απ’ όσο ακούγεται. Βλέπετε, αν κι ο πυρήνας διαχειρίζεται το hardware του υπολογιστή, τη στιγμή του boot δεν είναι όλοι οι οδηγοί συσκευών διαθέσιμοι και συνεπώς κάποια υποσυστήματα είναι σαν να μην υπάρχουν. Το πρόβλημα αντιμετωπίζεται προσαρτώντας ένα προσωρινό root filesystem, το οποίο περιλαμβάνει τα αρθρώματα (modules) που χρειάζεται ο πυρήνας προκειμένου να δει το hardware. Σε παλιότερες εκδόσεις του Linux, το προσωρινό αυτό filesystem αποτελούσε το αρχείο ονόματι initrd (INITial Ram Disk). Με την προσάρτηση του initrd ο πυρήνας αποκτούσε όλους τους απαραίτητους οδηγούς για την επιτυχή ολοκλήρωση της εκκίνησης. Μόλις φόρτωνε ό,τι χρειαζόταν, το initrd αποπροσαρτόταν και γινόταν η προσάρτηση του root filesystem, στο δίσκο της εγκατάστασης. Στις σύγχρονες διανομές Linux, τη θέση του αρχείου initrd έχει πάρει το initramfs. Κι αυτό είναι ένα προσωρινό σύστημα αρχείων, μόνο που τώρα δεν αποτελεί ξεχωριστό αρχείο αλλά είναι ενσωματωμένο στον πυρήνα. Φυσικά, περιλαμβάνει όλους τους απαραίτητους οδηγούς ώστε να είναι δυνατή η προσάρτηση του root filesystem. Χάρη στο initrd ή στο initramfs, ο πυρήνας αποκτά πρόσβαση στα αρθρώματα που χρειάζεται προκειμένου να δημιουργήσει ένα root device για την προσάρτηση της ριζικής κατάτμησης (root partition). Αρχικά, η προσάρτησή της γίνεται με δικαιώματα ανάγνωσης μόνο (read only mode). Έτσι, το εργαλείο ελέγχου ακεραιότητας κατατμήσεων ονόματι fsck τρέχει με ασφάλεια. Αφού ολοκληρώσει τους ελέγχους του, η ριζική κατάτμηση αποπροσαρτάται και προσαρτάται εκ νέου – αλλά αυτή τη φορά τόσο με δικαιώματα ανάγνωσης όσο και εγγραφής (read-write mode). Χωρίς να χάσει χρόνο, ο πυρήνας αναζητά το πρόγραμμα init και το ενεργοποιεί.

  • Στάδιο 4 – Init. Το init στο Linux είναι πάντοτε η πρώτη διεργασία που ενεργοποιείται. Αποστολή της είναι η εκκίνηση όλων των απαραίτητων υπηρεσιών του λειτουργικού. Τώρα, το πώς τις ξεκινά εξαρτάται από την υλοποίηση. Ναι, δεν υπάρχει ένα μόνο init στο Linux. Για την ακρίβεια, διατίθενται τρεις βασικές υλοποιήσεις.

    • System V init (sysv). Πρόκειται για το παραδοσιακό σύστημα init στον κόσμο του Linux, το οποίο βασιζόμενο στα λεγόμενα startup scripts ξεκινά/σταματά άλλες διεργασίες με τη σειρά. Η κατάσταση του συστήματος καθορίζεται από τα runlevels, με κάθε runlevel να ξεκινά/σταματά το σύστημα κατά τρόπο διαφορετικό.

    • Upstart. Είναι το σύστημα init που χρησιμοποιόταν σε παλαιότερες εκδόσεις του Ubuntu Linux. Στο upstart έχουμε εργασίες (jobs) και γεγονότα (events), όπου κάθε εργασία ξεκινά κι εκτελεί συγκεκριμένες ενέργειες ανταποκρινόμενη σε γεγονότα.

    • Systemd. Είναι το νέο στάνταρτ για το init στο Linux. Κεντρική ιδέα στο systemd είναι οι στόχοι (goals). Ουσιαστικά, υπάρχουν στόχοι που το systemd προσπαθεί να πετύχει ικανοποιώντας τις εξαρτήσεις (dependencies) κάθε στόχου.

Η συνέχεια

Ως εδώ έχουμε αποκτήσει μια πολύ καλή εικόνα για το πώς ξεκινά ο υπολογιστής μας. Με δεδομένο εξάλλου ότι η πλειονότητα των διανομών Linux έχουν υιοθετήσει το Systemd, αξίζει να εστιάσουμε σ’ αυτό. Όπως θα διαπιστώσετε κι εσείς, το Systemd κάνει πολλά περισσότερα από το να ξεκινά υπηρεσίες του λειτουργικού. Είστε διαχειριστής συστήματος που σέβεται τον εαυτό του, οπότε οφείλετε να μάθετε περισσότερα γι’ αυτό. Δεν θα το μετανιώσετε. Διαβάστε τώρα το δεύτερο άρθρο της μίνι σειράς μας.

Οι παράμετροι που περνά ο bootloader (GRUB) στον πυρήνα ενός συστήματος με openSUSE, όπως φαίνονται μέσα από το εργαλείο διαχείρισης YaST.Οι παράμετροι που περνά ο bootloader (GRUB) στον πυρήνα ενός συστήματος με openSUSE, όπως φαίνονται μέσα από το εργαλείο διαχείρισης YaST.

Άρθρα της σειράς

Πώς ξεκινούν τα PC και πώς φορτώνει το Linux

Το Systemd κι ο έλεγχος του logging