Πρώτο commit
Αυτό το commit περιλαμβάνεται σε:
commit
8ec8e9bee2
451 αρχεία άλλαξαν με 46736 προσθήκες και 0 διαγραφές
112
content/articles/19/04_boot.md
Κανονικό αρχείο
112
content/articles/19/04_boot.md
Κανονικό αρχείο
|
@ -0,0 +1,112 @@
|
|||
+++
|
||||
title = 'Διαδικασία εκκίνησης του Υπολογιστή.'
|
||||
date = '1999-11-01T00:00:00Z'
|
||||
description = ''
|
||||
author = 'DJ Art(mailto:djart@freemail.gr)'
|
||||
issue = ['Magaz 19']
|
||||
issue_weight = 4
|
||||
+++
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
*Το άρθρο αυτό αποτελεί συνέχεια του αντίστοιχου άρθρου του τεύχους 13. Έχει σκοπό να εμβαθύνει περισσότερο στο εσωτερικό και στη λειτουργία του αρχείου
|
||||
/etc/inittab και του καταλόγου /etc/rc.d/*
|
||||
|
||||
----------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
**1. init και /etc/inittab**
|
||||
---------------------------------------------------
|
||||
|
||||
**2. Τα αρχεία /etc/inittab και /etc/rc.d/rc.sysinit**
|
||||
-----------------------------------------------------------------------------
|
||||
|
||||
**3. Το αρχείο /etc/rc.d/rc.local**
|
||||
----------------------------------------------------------
|
||||
|
||||
**4. Οι κατάλογοι rcX.d**
|
||||
------------------------------------------------
|
||||
|
||||
|
||||
### [1. init και /etc/inittab]{#s1}
|
||||
|
||||
Η man page του init αναφέρει: \"Το init είναι ο πατέρας όλων των processes\". Ο πρωταρχικός του ρόλος είναι να δημιουργήσει processes από τις οδηγίες που του
|
||||
δίνει το /etc/inittab. Ο τρόπος με τον οποίο το Linux εκκινεί τα processes μετά από το boot του kernel, προέρχεται από μία άλλη έκδοση του UNIX, την System V.
|
||||
Στην πραγματικότητα η εντολή init είναι συμβατή με την System V init εντολή. Παρόλο που η init χαρακτηρίζεται ως το τελευταίο βήμα της διαδικασίας του boot του
|
||||
kernel, είναι η πρώτη εντολή που ρυ θμίζει και προετοιμάζει το σύστημά σας για χρήση. Η init δουλεύει διαβάζοντας το /etc/inittab και τρέχοντας τα scripts του
|
||||
καταλόγου /etc/rc.d σύμφωνα βέβαια με το επιθυμητό runlevel. Κάθε script μπορεί να σταματήσει ή να ξεκινήσει μια υπηρεσία, όπως π.χ. την υπηρεσία για το mail,
|
||||
τα news ή το Web.
|
||||
|
||||
Αυτή είναι μιά άποψη του καταλόγου /etc/rc.d (προσέξτε ότι από διανομή σε διανομή, τα runlevels δεν είναι ίδια):
|
||||
|
||||
init.d/
|
||||
rc*
|
||||
rc.local*
|
||||
rc.sysinit*
|
||||
rc0.d/
|
||||
rc1.d/
|
||||
rc2.d/
|
||||
rc3.d/
|
||||
rc4.d/
|
||||
rc5.d/
|
||||
rc6.d/
|
||||
|
||||
Στον κατάλογο /etc/rc.d/init.d θα βρείτε έναν αριθμό από scripts που χρησιμεύουν στο να σταματούν ή να ξεκινούν τις διάφορες υπηρεσίες.
|
||||
|
||||
|
||||
### [2. Τα αρχεία /etc/inittab και /etc/rc.d/rc.sysinit]{#s2}
|
||||
|
||||
Το σπουδαιότερο script είναι το rc.sysinit, καθώς είναι το πρώτο script που εκτελείται στο Linux. Οι λειτουργίες του script αυτού είναι οι εξής:
|
||||
|
||||
- Ορίζει το PATH (κάνει export τη μεταβλητή PATH)
|
||||
- Ρυθμίζει το networking
|
||||
- Ξεκινάει το swapping για τη virtual memory
|
||||
- Ορίζει το hostname του συστήματος
|
||||
- Ελέγχει το root partition για πιθανές επιδιορθώσεις (fsck)
|
||||
- Ελέγχει τα quotas του root filesystem
|
||||
- Ενεργοποιεί τα user και group quotas για το root filesystem
|
||||
- Ξανακάνει mount το root filesystem, αλλά αυτήν την φορά read/write
|
||||
- Ελέγχει τον πίνακα των mounted filesystems, τον /etc/mtab
|
||||
- Ετοιμάζει το σύστημα για το φόρτωμα των modules
|
||||
- Βρίσκει τα modules dependencies
|
||||
- Ελέγχει τα υπόλοιπα filesystems για πιθανές επιδιορθώσεις
|
||||
- Κάνει mount όλα τα υπόλοιπα filesystems
|
||||
- Σβήνει πολλά /etc αρχεία, όπως π.χ. το /etc/fastboot
|
||||
- Σβήνει τα UUCP lock αρχεία
|
||||
- Ρυθμίζει την ώρα του συστήματος
|
||||
- Ξεκινάει το swap partition
|
||||
- Ετοιμάζει τις serial ports
|
||||
- Φορτώνει τα modules
|
||||
|
||||
Το rc.sysinit script εκτελείται από την init δια μέσου του /etc/inittab. Το inittab περιέχει την εξής γραμμή:
|
||||
|
||||
# System initialization.
|
||||
si::sysinit:/etc/rc.d/rc.sysinit
|
||||
|
||||
|
||||
### [3. Το αρχείο /etc/rc.d/rc.local]{#s3}
|
||||
|
||||
Μέχρι τώρα είδαμε ότι μετά το boot του kernel, η εντολή τρέχει το script rc.sysinit. Στη συνέχεια, η εντολή init εκτελεί το script rc.local. Αν κοιτάξετε το
|
||||
περιεχόμενο του rc.local, θα διαπιστώσετε ότι αυτό το script μαζεύει πληροφορίες για το όνομα της διανομής σας και για την αρχιτεκτονική του υπολογιστή σας και
|
||||
τοποθετεί αυτές τις πληροφορίες στο αρχείο /etc/issue. Το περιεχόμενο του αρχείου αυτού αναδεικνύεται κατά τη διαδικασία του login από το χρήστη.
|
||||
|
||||
Αναλυτικότερα, σε ένα RedHat σύστημα, το rc.local διαβάζει το αρχείο /etc/redhat-release, που περιέχει την έκδοση της διανομής, και στη συνέχεια εκτελεί τις
|
||||
εντολές **uname -r**, που εμφανίζει την έκδοση του kernel, και **uname -m**, που εμφανίζει τον τύπο του επεξεργαστή (π.χ. 686). Στο τέλος, τοποθετεί όλες αυτές
|
||||
τις πληροφορίες στο αρχείο /etc/issue (με echo \>\> ).
|
||||
|
||||
**Σημείωση:** Ο σκοπός του rc.local δεν είναι να αποτελεί ένα μέρος για να βάζει κανείς εντολές για τη ρύθμιση (initialization) του συστήματος, παρόλο που
|
||||
μερικοί το κάνουν. Στο BSD UNIX, το rc.local χρησιμοποιείται για τον έλεγχο των δικτυακών υπηρεσιών. Το Linux δεν χρησιμοποιούσε πάντα τα ίδια initialization
|
||||
scripts, οπότε μπορεί να βρείτε διαφορές μεταξύ των RedHat, SuSE, Slackware και των άλλων διανομών.
|
||||
|
||||
|
||||
### [4. Οι κατάλογοι rcX.d]{#s4}
|
||||
|
||||
Η επόμενη εργασία που κάνει η εντολή init είναι η εκτέλεση των ειδικών scripts για κάθε runlevel. Μέσα στον κατάλογο /etc/rc.d, όπως είδαμε, υπάρχουν οι
|
||||
κατάλογοι rcX.d, όπου X είναι ο αριθμός του αντίστοιχου runlevel (από 0 έως 6). Αν κοιτάξετε τα περιεχόμενα ενός από αυτούς του καταλόγους, θα δείτε οτι
|
||||
περιέχουν links στα διάφορα scripts του καταλόγου /etc/rc.d/init.d. Η μορφή των links είναι κάπως έτσι:
|
||||
|
||||
S10network ή
|
||||
K10network
|
||||
|
||||
Το γράμμα S ή K αντιστοιχεί στην εκκίνηση ή στον τερματισμό μιάς υπηρεσίας (S από το Start και K από το Kill). Ο αριθμός δίπλα από το γράμμα χρησιμεύει για να
|
||||
τρέχουν τα scripts στη σωστή σειρά (για παράδειγμα να μην κάνει unmount τα partitions πριν κλείσει το network file-sharing).
|
||||
|
Φόρτωση…
Προσθήκη πίνακα
Προσθήκη υπερσυνδέσμου
Παράθεση σε νέο ζήτημα