Skip to main content

Κατανοήστε την εντολή εντολών Linux

How to resolve/fix initramfs error BusyBox issue in Ubuntu,Linux Mint (Ιούνιος 2026)

How to resolve/fix initramfs error BusyBox issue in Ubuntu,Linux Mint (Ιούνιος 2026)
Anonim

Μέσα σε αυτό είναι ο γονέας όλων των διαδικασιών του Linux. Είναι η πρώτη διαδικασία που ξεκινά όταν ένας υπολογιστής εκκινεί και τρέχει μέχρι να κλείσει το σύστημα. Είναι ο πρόγονος όλων των άλλων διαδικασιών.

Ο πρωταρχικός του ρόλος είναι να δημιουργήσει διαδικασίες από ένα σενάριο που είναι αποθηκευμένο στο αρχείο / etc / inittab. Αυτό το αρχείο συνήθως αποθηκεύει εγγραφές που προκαλούν το Init να δημιουργεί gettys σε κάθε γραμμή που μπορούν να συνδεθούν οι χρήστες. Επίσης ελέγχει αυτόνομες διαδικασίες που απαιτούνται από οποιοδήποτε συγκεκριμένο σύστημα.

Ρυθμίσεις

ΕΝΑ επίπεδο εκτέλεσης είναι μια διαμόρφωση λογισμικού του συστήματος που επιτρέπει μόνο μια επιλεγμένη ομάδα διαδικασιών για εκτέλεση. Οι διαδικασίες που δημιουργούνται από το Init για κάθε ένα από αυτά τα επίπεδα καθορίζονται στο αρχείο / etc / inittab. Το Init μπορεί να είναι σε ένα από τα οκτώ επίπεδα εκτέλεσης: 0 έως 6 και S ή s. Το επίπεδο εκτέλεσης αλλάζει έχοντας έναν προνομιούχο χρήστη που τρέχει το Telinit, το οποίο στέλνει τα κατάλληλα σήματα στο Init, λέγοντάς του ποιο επίπεδο εκτέλεσης θα αλλάξει.

Τα επίπεδα λειτουργίας 0, 1 και 6 διατηρούνται. Το Runlevel 0 χρησιμοποιείται για να σταματήσει το σύστημα, το επίπεδο εκτέλεσης 6 χρησιμοποιείται για την επανεκκίνηση του συστήματος και το επίπεδο εκτέλεσης 1 χρησιμοποιείται για να μεταφερθεί το σύστημα σε λειτουργία ενός χρήστη. Το Runlevel S δεν προορίζεται για άμεση χρήση αλλά για τα scripts που εκτελούνται κατά την είσοδο στο επίπεδο εκτέλεσης 1.

Οι διαδρομές 7 έως 9 ισχύουν επίσης, αν και δεν είναι καλά τεκμηριωμένες επειδή οι "παραδοσιακές" παραλλαγές Unix δεν τις χρησιμοποιούν. Τα επίπεδα εκτέλεσης S και s είναι τα ίδια. Εσωτερικά, είναι ψευδώνυμα για το ίδιο επίπεδο εκτέλεσης.

Εκκίνηση

Μετά την επίκληση του Init ως το τελευταίο βήμα της ακολουθίας εκκίνησης του πυρήνα, ψάχνει για το αρχείο / etc / inittab για να δει αν υπάρχει μια καταχώρηση του τύπου initdefault . Η αρχική είσοδος καθορίζει το αρχικό επίπεδο εκτέλεσης του συστήματος. Εάν δεν υπάρχει τέτοια καταχώρηση (ή όχι / etc / inittab καθόλου), πρέπει να εισαχθεί ένα επίπεδο εκτέλεσης στην κονσόλα συστήματος.

Το επίπεδο εκτέλεσης S ή s μεταφέρει το σύστημα σε λειτουργία ενός χρήστη και δεν απαιτεί αρχείο / etc / inittab. Στη λειτουργία ενός χρήστη, ανοίγει ένα ριζικό κέλυφος στο / dev / κονσόλα.

Κατά την είσοδο σε λειτουργία ενός χρήστη, το init διαβάζει τις καταστάσεις ioctl της κονσόλας από το /etc/ioctl.save. Εάν αυτό το αρχείο δεν υπάρχει, το init αρχικοποιεί τη γραμμή με 9600 baud και με CLOCAL ρυθμίσεις. Όταν το init αφήνει τη λειτουργία ενός χρήστη, αποθηκεύει τις ρυθμίσεις ioctl της κονσόλας σε αυτό το αρχείο ώστε να μπορεί να επαναχρησιμοποιηθεί για την επόμενη συνεδρία ενός χρήστη.

Όταν εισέρχεστε σε μια λειτουργία πολλαπλών χρηστών για πρώτη φορά, το Init εκτελεί τις καταχωρήσεις εκκίνησης και εκκίνησης για να επιτρέψει στα συστήματα αρχείων να τοποθετηθούν πριν μπορέσουν οι χρήστες να συνδεθούν. Στη συνέχεια, όλες οι καταχωρήσεις που ταιριάζουν με το επίπεδο εκτέλεσης υποβάλλονται σε επεξεργασία.

Κατά την εκκίνηση μιας νέας διαδικασίας, το Init ελέγχει πρώτα εάν υπάρχει το αρχείο / etc / initscript. Αν το κάνει, χρησιμοποιεί αυτό το σενάριο για να ξεκινήσει τη διαδικασία.

Κάθε φορά που ένα παιδί τερματίζει, ο Init καταγράφει το γεγονός και τον λόγο για τον οποίο πέθανε στο / var / run / utmp και / var / log / wtmp, υπό την προϋπόθεση ότι υπάρχουν αυτά τα αρχεία.

Αλλαγή επιπέδων λειτουργίας

Αφού αναπαράγει όλες τις διαδικασίες που ορίζονται, ο Init περιμένει μια από τις απογόνους του διαδικασίες να πεθάνει, ένα σήμα powerfail ή μέχρι να σηματοδοτηθεί από την Telinit για να αλλάξει το επίπεδο εκτέλεσης του συστήματος. Όταν συμβεί μία από αυτές τις τρεις συνθήκες, επανεξετάζει το αρχείο / etc / inittab. Μπορείτε να προσθέσετε νέες καταχωρήσεις σε αυτό το αρχείο ανά πάσα στιγμή. Ωστόσο, το init εξακολουθεί να περιμένει να εμφανιστεί μία από τις τρεις παραπάνω συνθήκες. Για την παροχή στιγμιαίας απάντησης, η εντολή Telinit Q ή q μπορεί να ξυπνήσει το Init για να επανεξετάσει το αρχείο / etc / inittab.

Εάν το Init δεν είναι σε λειτουργία ενός χρήστη και λαμβάνει σήμα σήματος power-off (SIGPWR), διαβάζει το αρχείο / etc / powerstatus. Στη συνέχεια ξεκινά μια εντολή που βασίζεται στα περιεχόμενα αυτού του αρχείου:

  • ΑΠΟΤΥΓΧΑΝΩ): Η τροφοδοσία τροφοδοτείται, η UPS παρέχει την ισχύ. Εκτελέστε τις εγγραφές powerwait και powerfail.
  • ΕΝΤΑΞΕΙ): Η τροφοδοσία έχει αποκατασταθεί, εκτελέστε τις καταχωρήσεις powerokwait.
  • ΧΑΜΗΛΟΣ): Η ισχύς αποτυγχάνει και το UPS έχει χαμηλή μπαταρία. Εκτελέστε τις καταχωρήσεις powerfailnow.

Αν το / etc / powerstatus δεν υπάρχει ή περιέχει κάτι άλλο από τα γράμματα F, O ή L, το Init συμπεριφέρεται σαν να διαβάζει το γράμμα F.

Η χρήση των SIGPWR και / etc / powerstatus αποθαρρύνεται. Όποιος θέλει να αλληλεπιδράσει με το Init πρέπει να χρησιμοποιήσει το / dev / initctl κανάλι ελέγχου.

Όταν ζητείται από το Init να αλλάξει το επίπεδο εκτέλεσης, στέλνει το προειδοποιητικό σήμα SIGTERM σε όλες τις διαδικασίες που δεν έχουν οριστεί στο νέο επίπεδο εκτέλεσης. Στη συνέχεια περιμένει πέντε δευτερόλεπτα πριν τερματίσει βίαια αυτές τις διαδικασίες χρησιμοποιώντας το σήμα SIGKILL. Σημειώστε ότι το Init υποθέτει ότι όλες αυτές οι διαδικασίες και οι απόγονοί τους παραμένουν στην ίδια ομάδα διαδικασιών που αρχικά δημιούργησε το Init για αυτούς. Αν κάποια διαδικασία αλλάξει τη συσχέτιση της ομάδας της διαδικασίας, δεν λαμβάνει αυτά τα σήματα. Τέτοιες διαδικασίες πρέπει να τερματιστούν χωριστά.

Telinit

Το Telinit συνδέεται με / sbin / init. Παίρνει ένα επιχείρημα ενός χαρακτήρα και σηματοδοτεί το Init για να εκτελέσει την κατάλληλη ενέργεια. Τα ακόλουθα επιχειρήματα χρησιμεύουν ως οδηγίες προς την Telinit:

  • 0, 1, 2, 3, 4, 5 ή 6: Πείτε στο Init να μεταβεί στο καθορισμένο επίπεδο εκτέλεσης.
  • α, β, γ: Ενημερώστε το Init να επεξεργάζεται μόνο εκείνες τις καταχωρίσεις αρχείων / etc / inittab που έχουν επίπεδο εκτέλεσης a, b ή c.
  • Q ή q: Πείτε στο Init να επανεξετάσει το αρχείο / etc / inittab.
  • S ή s: Πείτε στο Init να μεταβείτε στη λειτουργία ενός χρήστη.
  • U ή u: Ενημερώστε το init να εκτελεστεί εκ νέου (διατηρώντας την κατάσταση). Δεν γίνεται επανεξέταση του αρχείου / etc / inittab. Το επίπεδο εκτέλεσης πρέπει να είναι S, s, 1, 2, 3, 4 ή 5. διαφορετικά, το αίτημα αγνοείται σιωπηλά.

Το Telinit μπορεί επίσης να ενημερώσει το Init για πόσο χρονικό διάστημα πρέπει να περιμένει μεταξύ των διαδικασιών αποστολής των σημάτων SIGTERM και SIGKILL. Η προεπιλογή είναι πέντε δευτερόλεπτα, αλλά αυτή η τιμή μπορεί να αλλάξει με το -t δευτερόλεπτα επιλογή.

Το Telinit μπορεί να χρησιμοποιηθεί μόνο από χρήστες με τα κατάλληλα προνόμια.

Ο δυαδικός έλεγχος Init αν είναι Init ή Telinit εξετάζοντας το αναγνωριστικό διαδικασίας του. Το πραγματικό αναγνωριστικό διαδικασίας Init είναι πάντα 1. Από αυτό προκύπτει ότι αντί να καλείται το Telinit, ένα άτομο μπορεί να χρησιμοποιήσει το Init ως συντόμευση.