Επισκόπηση υψηλού επιπέδου
Συστημικοί στόχοι
Λειτουργία ενός χρήστη
Ανάκτηση του κωδικού πρόσβασης root
Έλεγχος αρχείων καταγραφής από προηγούμενες μπότες
Επιδιόρθωση σφαλμάτων δίσκου και συστήματος αρχείων
Προβλήματα με τον φορτωτή εκκίνησης με το Grub 2
Αντιμετώπιση προβλημάτων grub
Επιδιόρθωση σπασμένης εγκατάστασης grub
Αυτό το άρθρο περιγράφει τη διαδικασία εκκίνησης για συστήματα CentOS/RHEL 7.x. Αν και μπορεί να παραμείνει παρόμοια με προηγούμενες εκδόσεις, με το RHEL 7, το systemd εισάγεται. Εκτός από τη διαδικασία εκκίνησης, θα παράσχω συμβουλές και κόλπα αντιμετώπισης προβλημάτων στην πορεία.
Πρέπει να κατανοήσετε τη διαδικασία εκκίνησης για να μπορέσετε να αντιμετωπίσετε ενεργά ένα πρόβλημα κατά την εκκίνηση. Διαβάστε τα παρακάτω βήματα μέχρι να εξοικειωθείτε με τη διαδικασία.
Επισκόπηση υψηλού επιπέδου
- Power + post.
- Αναζήτηση συσκευής υλικολογισμικού.
- Το υλικολογισμικό διαβάζει τον bootloader.
- Ο φορτωτής εκκίνησης φορτώνει τη διαμόρφωση (grub2).
- Ο φορτωτής εκκίνησης φορτώνει τον πυρήνα και το initramfs.
- Ο φορτωτής εκκίνησης μεταβιβάζει τον έλεγχο στον πυρήνα.
- Ο πυρήνας προετοιμάζει το υλικό + εκτελείται
/sbin/initως pid 1.
- Το Systemd εκτελεί όλους τους στόχους initrd (προσαρτά το σύστημα αρχείων στο
/sysroot).
- Ο ριζικός πυρήνας FS άλλαξε από τη ρίζα initramfs (
/sysroot) στο σύστημα rootfs ( /) και το systemd εκτελείται ξανά ως έκδοση συστήματος.
- Το Systemd αναζητά τον προεπιλεγμένο στόχο και ξεκινά/σταματά τις μονάδες όπως έχουν διαμορφωθεί ενώ εμφανίζεται η αυτόματη επίλυση εξαρτήσεων και η σελίδα σύνδεσης.
Για περισσότερες πληροφορίες σχετικά με τη διαδικασία εκκίνησης, ανατρέξτε στην επίσημη τεκμηρίωση του λειτουργικού συστήματος για το σύστημά σας.
Συστημικοί στόχοι
Οι στόχοι είναι βασικά οι έλεγχοι εξάρτησης. Έχουν μια διαμόρφωση "πριν" και "μετά" για το ποιες ακριβώς υπηρεσίες απαιτούνται για την επίτευξη αυτού του στόχου. Για παράδειγμα: arp.ethernet.service, firewalld.service, και ούτω καθεξής πρέπει να ξεκινήσετε και να εργάζεστε πριν network.targetνα επιτευχθεί. Αν δεν επιτευχθεί, υπηρεσίες όπως httpd, nfsκαι ldapδεν μπορεί να ξεκινήσει. Υπάρχουν 4 στόχοι που μπορούν να τεθούν στο RHEL/CentOS 7.
- graphical.target (διεπαφή GUI)
- multi-user.target (λειτουργία πολλών χρηστών, σύνδεση βάσει κειμένου)
- rescue.target (προτροπή sulogin, βασική προετοιμασία συστήματος)
- Emergency.target (προτροπή sulogin, η περιστροφή του initramfs ολοκληρώθηκε και η ρίζα του συστήματος τοποθετήθηκε στο / ως μόνο για ανάγνωση)
Για να προβάλετε τον τρέχοντα προεπιλεγμένο στόχο εκκίνησης, χρησιμοποιήστε τα εξής:
systemctl get-default
Λάβετε υπόψη ότι μπορείτε να το αλλάξετε κατά την εκτέλεση απομονώνοντας τον στόχο. Αυτό θα ξεκινήσει/σταματήσει όλες τις υπηρεσίες που σχετίζονται με το νέο στόχο, επομένως να είστε προσεκτικοί (δείτε systemctl isolate new.target).
Λειτουργία ενός χρήστη
Υπάρχουν φορές που θα χρειαστεί να κάνετε εκκίνηση σε λειτουργία ενός χρήστη για να διορθώσετε ένα πρόβλημα με το λειτουργικό σύστημα. Για αυτό το παράδειγμα, θα σας δείξω πώς να χρησιμοποιήσετε τη rescue.target"λειτουργία ενός χρήστη" στο RHEL/CentOS 7.
- Διακόψτε το μενού grub2 πατώντας "e" για επεξεργασία όταν σας ζητηθεί από το μενού grub.
- Βρείτε τη γραμμή που καθορίζει την έκδοση του πυρήνα ( vmlinuz ) και προσθέστε τα ακόλουθα σε αυτήν:
systemd.unit=rescue.target
- Πατήστε "Ctrl+x" για να ξεκινήσετε.
- Στη συνέχεια, θα σας ζητηθεί ο κωδικός πρόσβασης root για να συνεχίσετε, μόλις βγείτε από το κέλυφος διάσωσης, η διαδικασία εκκίνησης θα συνεχίσει να φορτώνει τον προεπιλεγμένο στόχο σας.
Ανάκτηση του κωδικού πρόσβασης root
Αυτή η διαδικασία είναι λίγο διαφορετική από αυτή που χρησιμοποιούσαμε σε προηγούμενες εκδόσεις, αλλά είναι απλή και απαιτεί πολύ λίγα βήματα για να γίνει αυτό. Εάν χρειάζεται να ανακτήσετε τυχόν διαπιστευτήρια, μπορείτε να χρησιμοποιήσετε αυτήν τη μέθοδο για να αποκτήσετε πρόσβαση σε ένα VM. Μπορείτε ακόμα να κάνετε εκκίνηση από ένα ζωντανό CD, να προσαρτήσετε το ριζικό σύστημα αρχείων και να επεξεργαστείτε τον κωδικό πρόσβασης, αλλά αυτή η μέθοδος είναι παρωχημένη και απαιτεί περισσότερη προσπάθεια.
- Επανεκκινήστε το σύστημα.
- Διακόψτε το μενού grub2 πατώντας "e" για επεξεργασία όταν σας ζητηθεί από το μενού grub.
- Μετακινήστε τον κέρσορα στο τέλος της γραμμής που καθορίζει τον πυρήνα ( vmlinuz ). Μπορεί να θέλετε να αφαιρέσετε όλες τις άλλες κονσόλες εκτός της TTY0, ωστόσο αυτό το βήμα μπορεί να μην είναι απαραίτητο στο περιβάλλον σας.
- Προσάρτημα
rd.break( χωρίς εισαγωγικά ) που θα διακόψει τη διαδικασία εκκίνησης λίγο πριν το στοιχείο ελέγχου παραδοθεί από το initramfs στο πραγματικό σύστημα.
- Ctrl+x για εκκίνηση.
Σε αυτό το σημείο, παρουσιάζεται ένα ριζικό κέλυφος με το ριζικό σύστημα αρχείων τοποθετημένο σε λειτουργία μόνο για ανάγνωση στο /sysroot. Θα χρειαστεί να το επανατοποθετήσουμε με δικαιώματα εγγραφής.
Επανατοποθέτηση /sysroot.
# mount -oremount,rw /sysroot
Μετάβαση σε μια φυλακή chroot.
# chroot /sysroot
Αλλάξτε τον κωδικό πρόσβασης για τον χρήστη στον οποίο έχουμε παλιά διαπιστευτήρια.
# passwd <username>
Εάν χρησιμοποιείτε το SElinux, θα πρέπει να εξετάσετε το ενδεχόμενο να προσθέσετε ξανά ετικέτα σε όλα τα αρχεία πριν συνεχίσετε τη διαδικασία εκκίνησης. Αυτό το τμήμα μπορεί να παραλειφθεί εάν δεν χρησιμοποιείτε το SElinux.
# touch /.autorelabel
Βγείτε δύο φορές και το σύστημα θα εκκινήσει καθαρά από το σημείο που το διακόψαμε.
Έλεγχος αρχείων καταγραφής από προηγούμενες μπότες
Μπορεί να είναι χρήσιμο να προβάλλετε αρχεία καταγραφής προηγούμενων αποτυχημένων προσπαθειών εκκίνησης. Εάν τα αρχεία καταγραφής ημερολογίου έχουν γίνει μόνιμα (συνήθως αποθηκεύονται στη μνήμη και έχουν κυκλοφορήσει κατά την εκκίνηση), αυτό μπορεί να γίνει με το journalctlεργαλείο. Ακολουθήστε αυτά τα βήματα εάν πρέπει να ρυθμίσετε την μόνιμο καταγραφή εκκίνησης.
Ως root, δημιουργήστε το αρχείο καταγραφής για να αποθηκευτούν αυτές οι πληροφορίες.
# mkdir -p 2775 /var/log/journal && chown :systemd-journal /var/log/journal
# systemctl restart systemd-journald
Για να επιθεωρήσετε τα αρχεία καταγραφής μιας προηγούμενης εκκίνησης, χρησιμοποιήστε την -bεπιλογή με journalctl. Χωρίς ορίσματα, -bθα φιλτράρει την έξοδο μόνο σε μηνύματα που σχετίζονται με την τελευταία εκκίνηση. Ένας αρνητικός αριθμός σε αυτό το όρισμα θα φιλτράρει σε προηγούμενες μπότες. Για παράδειγμα:
# journalctl -b-1 -p err
Αυτό θα σας δείξει τα αρχεία καταγραφής σφαλμάτων από την εκκίνηση που συνέβη πριν από την πιο πρόσφατη. Θα πρέπει να αλλάξετε την αριθμητική τιμή για να αντικατοπτρίζει την εκκίνηση που πρέπει να προβάλετε.
Επιδιόρθωση σφαλμάτων δίσκου και συστήματος αρχείων
Ένα από τα πιο συνηθισμένα σφάλματα χρόνου εκκίνησης είναι ένα /etc/fstabαρχείο που δεν έχει ρυθμιστεί σωστά . Μπορείτε ΔΕΝ ΜΠΟΡΕΙΤΕ να χρησιμοποιήσετε το rescue.targetγια να διορθώσετε ένα /etc/fstabλάθος. Τα περισσότερα από αυτά τα ζητήματα θα απαιτήσουν από εμάς να χρησιμοποιήσουμε το emergency.targetδεδομένου ότι η "διάσωση" απαιτεί ένα πιο λειτουργικό σύστημα.
Τα ακόλουθα είναι παραδείγματα προβλημάτων που απαιτούν emergency.target:
- Κατεστραμμένο σύστημα αρχείων.
- Ανύπαρκτο UUID σε
/etc/fstab.
- Ανύπαρκτο σημείο στήριξης στο
/etc/fstab.
- Εσφαλμένη επιλογή τοποθέτησης στο
/etc/fstab.
Σημαντικό : Μετά την επεξεργασία του /etc/fstabαρχείου σε κατάσταση έκτακτης ανάγκης, πρέπει να εκτελέσετε τα ακόλουθα για μέτρα ασφαλείας:
# systemctl daemon-reload
Εδώ είναι ένα αναλυτικό παράδειγμα. Θα εκκινήσουμε σε λειτουργία έκτακτης ανάγκης για να αφαιρέσουμε μια ψευδή καταχώριση στο /etc/fstab.
- Διακόψτε το μενού grub2 πατώντας "e" για επεξεργασία όταν σας ζητηθεί από το μενού grub.
- Βρείτε τη γραμμή που καθορίζει την έκδοση του πυρήνα ( vmlinuz ) και προσθέστε τα ακόλουθα σε αυτήν:
systemd.unit=emergency.target
- Πατήστε "Ctrl+x" για εκκίνηση.
- Θα σας ζητηθεί με τον κωδικό πρόσβασης root για να συνεχίσετε.
- Επανασυναρμολόγηση
/ώστε να μπορούμε να κάνουμε αλλαγές στο fstabαρχείο:# mount -oremount,rw /
- Μπορούμε να χρησιμοποιήσουμε την
mountεντολή για να δούμε ποια καταχώρηση προκαλεί το σφάλμα:# mount -a
- Καταργήστε την προσβλητική καταχώριση από το
fstabαρχείο.
- Χρησιμοποιήστε
mount -aξανά για να βεβαιωθείτε ότι το σφάλμα έχει επιλυθεί.
- Χρησιμοποιήστε
systemctl daemon-reloadόπως είχα αναφέρει προηγουμένως για να φορτώσετε ξανά όλα τα αρχεία μονάδας και να δημιουργήσετε ξανά ολόκληρο το δέντρο εξάρτησης.
Μόλις βγείτε από το κέλυφος έκτακτης ανάγκης, το σύστημα θα ολοκληρώσει την εκκίνηση από τον στόχο έκτακτης ανάγκης και στη συνέχεια θα μπορείτε να συνεχίσετε ως συνήθως από εκείνο το σημείο. Αυτό το παράδειγμα χρησιμοποιήθηκε απλώς για να σας δείξει τη διαδικασία χρήσης του στόχου έκτακτης ανάγκης για την πραγματοποίηση μόνιμων αλλαγών σε αρχεία στο σύστημα.
Προβλήματα με τον φορτωτή εκκίνησης με το Grub 2
Το /boot/grub2/grub.cfgαρχείο είναι το κύριο αρχείο διαμόρφωσης. ΜΗΝ επεξεργάζεστε ποτέ αυτό το αρχείο με μη αυτόματο τρόπο. Αντίθετα, χρησιμοποιήστε το grub2-mkconfigγια να δημιουργήσετε τη νέα διαμόρφωση grub2 χρησιμοποιώντας ένα σύνολο διαφορετικών αρχείων διαμόρφωσης και τη λίστα των εγκατεστημένων πυρήνων. Η grub2-mkconfigεντολή θα αναζητήσει /etc/default/grubεπιλογές όπως το προεπιλεγμένο χρονικό όριο λήξης του μενού και τη γραμμή εντολών του πυρήνα προς χρήση και, στη συνέχεια, θα χρησιμοποιήσει ένα σύνολο σεναρίων για /etc/grub.d/να δημιουργήσει το αρχείο διαμόρφωσης που προκύπτει.
Εδώ είναι ένα κειμενικό διάγραμμα αυτής της σχέσης.
/boot/grub2/grub.cfg
|
|__________________
| |
/etc/default/grub /etc/grub.d/*
Σημαντικό: Για να επεξεργαστείτε το κύριο αρχείο grub.cfg, θα χρειαστεί να κάνετε τις επιθυμητές αλλαγές σε /etc/default/grubκαι σε αρχεία /etc/grub.d/και, στη συνέχεια, να δημιουργήσετε ένα νέο grub.cfgεκτελώντας:
# grub2-mkconfig > /boot/grub2/grub.cfg
Αντιμετώπιση προβλημάτων grub
Είναι σημαντικό να κατανοήσετε τη σύνταξη του /boot/grub2/grub.cfgαρχείου πριν την αντιμετώπιση προβλημάτων.
- Πρώτον, οι εγγραφές με δυνατότητα εκκίνησης κωδικοποιούνται μέσα σε μπλοκ "menuentry". Σε αυτά τα μπλοκ,
linux16και οι initrd16γραμμές δείχνουν προς τον πυρήνα που θα φορτωθεί από το δίσκο (μαζί με τη γραμμή εντολών του πυρήνα) και τα initramfs που θα φορτωθούν. Κατά τη διάρκεια της διαδραστικής επεξεργασίας κατά την εκκίνηση, η καρτέλα χρησιμοποιείται για την εύρεση αυτών των γραμμών.
- Οι γραμμές "set root" μέσα σε αυτά τα μπλοκ δεν δείχνουν στο ριζικό σύστημα αρχείων για το σύστημα RHEL/CentOS 7, αλλά αντίθετα δείχνουν στο σύστημα αρχείων από το οποίο το grub2 θα πρέπει να φορτώσει τον πυρήνα και τα αρχεία initramfs. Η σύνταξη είναι
harddrive.partitionόπου hd0βρίσκεται ο πρώτος σκληρός δίσκος στο σύστημα και hd1είναι ο δεύτερος. Τα διαμερίσματα υποδεικνύονται όπως msdos1για το πρώτο διαμέρισμα MBR ή gpt1για το πρώτο διαμέρισμα GPT.
Παράδειγμα από /boot/grub2/grub.cfg:
### BEGIN /etc/grub.d/10_linux ###
menuentry 'CentOS Linux (3.10.0-514.26.2.el7.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-514.el7.x86_64-advanced-a2531d12-46f8-4a0f-8a5c-b48d6ef71275' {
load_video
set gfxpayload=keep
insmod gzio
insmod part_msdos
insmod ext2
set root='hd0,msdos1'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint='hd0,msdos1' 123455ae-46f8-4a0f-8a5c-b48d6ef71275
else
search --no-floppy --fs-uuid --set=root 123455ae-46f8-4a0f-8a5c-b48d6ef71275
fi
Εάν πρέπει να εγκαταστήσετε ξανά το bootloader σε μια συσκευή, χρησιμοποιήστε την ακόλουθη εντολή.
# grub2-install <device>
Επιδιόρθωση σπασμένης εγκατάστασης grub
Για περιπτώσεις που το σύστημα δεν θα εκκινήσει αφού φτάσει στο μενού grub2.
- Θα πρέπει να ξεκινήσετε με την επεξεργασία του μενού grub και την αναζήτηση συντακτικών σφαλμάτων. Εάν βρείτε ένα, διορθώστε το και μπείτε στο σύστημα για να κάνετε επίμονες αλλαγές για να διορθώσετε το πρόβλημα.
- Εάν δεν μπορείτε να βρείτε σφάλματα, ανατρέξτε στην παραπάνω ενότητα όπου κάνουμε εκκίνηση στον στόχο έκτακτης ανάγκης. Θα χρειαστεί να προσαρτήσετε ξανά το root (
/).
- Προβάλετε την τρέχουσα διαμόρφωση grub2 με την ακόλουθη εντολή:
# grub2-mkconfig
- Εάν δεν βλέπετε σφάλματα, είναι πιθανό κάποιος να επεξεργάστηκε το
/boot/grub2/grub.cfgαρχείο. Μην τροποποιήσετε αυτό το αρχείο. Δημιουργήστε ξανά το config με την ακόλουθη εντολή:# grub2-mkconfig > /boot/grub2/grub.cfg
Αφού δημιουργήσετε ξανά τη διαμόρφωση του grub, θα πρέπει να μπορείτε να κάνετε επανεκκίνηση χωρίς προβλήματα.