Πώς να αλλάξετε τις παραμέτρους χρόνου εκτέλεσης πυρήνα με μόνιμο και μη μόνιμο τρόπο


Στο Μέρος 13 αυτού, πώς να χρησιμοποιήσετε το GRUB για να τροποποιήσετε τη συμπεριφορά του συστήματος περνώντας επιλογές στον πυρήνα για τη διαδικασία εκκίνησης που βρίσκεται σε εξέλιξη.

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

Έτσι, επιτρέπεται να ενεργοποιείτε ή να απενεργοποιείτε τις παραμέτρους του πυρήνα on-the-fly χωρίς μεγάλη δυσκολία όταν χρειάζεται λόγω μιας απαιτούμενης αλλαγής στον τρόπο που αναμένεται να λειτουργήσει το σύστημα.

Παρουσιάζοντας το /proc Filesystem

Η πιο πρόσφατη προδιαγραφή του προτύπου ιεραρχίας συστήματος αρχείων υποδεικνύει ότι το /proc αντιπροσωπεύει την προεπιλεγμένη μέθοδο για το χειρισμό των πληροφοριών διεργασίας και συστήματος, καθώς και άλλων πληροφοριών πυρήνα και μνήμης. Ειδικότερα, το /proc/sys είναι όπου μπορείτε να βρείτε όλες τις πληροφορίες σχετικά με συσκευές, προγράμματα οδήγησης και ορισμένες δυνατότητες του πυρήνα.

Η πραγματική εσωτερική δομή του /proc/sys εξαρτάται σε μεγάλο βαθμό από τον πυρήνα που χρησιμοποιείται, αλλά είναι πιθανό να βρείτε τους παρακάτω καταλόγους μέσα. Με τη σειρά τους, καθένας από αυτούς θα περιέχει άλλους υποκαταλόγους όπου διατηρούνται οι τιμές για κάθε κατηγορία παραμέτρων:

  1. dev: παράμετροι για συγκεκριμένες συσκευές που είναι συνδεδεμένες στο μηχάνημα.
  2. fs: διαμόρφωση συστήματος αρχείων (π.χ. ποσοστώσεις και inode).
  3. πυρήνας: ρύθμιση παραμέτρων για τον πυρήνα.
  4. net: διαμόρφωση δικτύου.
  5. vm: χρήση της εικονικής μνήμης του πυρήνα.

Για να τροποποιήσουμε τις παραμέτρους χρόνου εκτέλεσης του πυρήνα θα χρησιμοποιήσουμε την εντολή sysctl. Ο ακριβής αριθμός των παραμέτρων που μπορούν να τροποποιηθούν μπορεί να προβληθεί με:

# sysctl -a | wc -l

Εάν θέλετε να δείτε την πλήρη λίστα των παραμέτρων του πυρήνα, απλώς κάντε:

# sysctl -a 

Καθώς η έξοδος της παραπάνω εντολής θα αποτελείται από ΠΟΛΛΕΣ γραμμές, μπορούμε να χρησιμοποιήσουμε μια διοχέτευση ακολουθούμενη από λιγότερες για να την επιθεωρήσουμε πιο προσεκτικά:

# sysctl -a | less

Ας ρίξουμε μια ματιά στις πρώτες γραμμές. Λάβετε υπόψη ότι οι πρώτοι χαρακτήρες σε κάθε γραμμή ταιριάζουν με τα ονόματα των καταλόγων μέσα στο /proc/sys:

Για παράδειγμα, η επισημασμένη γραμμή:

dev.cdrom.info = drive name:        	sr0

υποδηλώνει ότι το sr0 είναι ψευδώνυμο για τη μονάδα οπτικού δίσκου. Με άλλα λόγια, αυτός είναι ο τρόπος με τον οποίο ο πυρήνας \βλέπει” αυτή τη μονάδα δίσκου και χρησιμοποιεί αυτό το όνομα για να αναφέρεται σε αυτήν.

Στην επόμενη ενότητα θα εξηγήσουμε πώς να αλλάξετε άλλες \πιο σημαντικές παραμέτρους χρόνου εκτέλεσης πυρήνα στο Linux.

Πώς να αλλάξετε ή να τροποποιήσετε τις παραμέτρους χρόνου εκτέλεσης πυρήνα Linux

Με βάση όσα έχουμε εξηγήσει μέχρι τώρα, είναι εύκολο να δούμε ότι το όνομα μιας παραμέτρου ταιριάζει με τη δομή καταλόγου μέσα στο /proc/sys όπου μπορεί να βρεθεί.

Για παράδειγμα:

dev.cdrom.autoclose → /proc/sys/dev/cdrom/autoclose
net.ipv4.ip_forward → /proc/sys/net/ipv4/ip_forward

Ελέγξτε τις παραμέτρους πυρήνα Linux

Τούτου λεχθέντος, μπορούμε να προβάλουμε την τιμή μιας συγκεκριμένης παραμέτρου πυρήνα Linux χρησιμοποιώντας είτε το sysctl ακολουθούμενο από το όνομα της παραμέτρου είτε διαβάζοντας το σχετικό αρχείο:

# sysctl dev.cdrom.autoclose
# cat /proc/sys/dev/cdrom/autoclose
# sysctl net.ipv4.ip_forward
# cat /proc/sys/net/ipv4/ip_forward

Ορισμός ή τροποποίηση παραμέτρων πυρήνα Linux

Για να ορίσουμε την τιμή για μια παράμετρο πυρήνα μπορούμε επίσης να χρησιμοποιήσουμε το sysctl, αλλά χρησιμοποιώντας την επιλογή -w και ακολουθούμενα από το όνομα της παραμέτρου, το σύμβολο ισότητας και την επιθυμητή τιμή.

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

# echo 0 > /proc/sys/net/ipv4/ip_forward
# sysctl -w net.ipv4.ip_forward=0

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

Για να ορίσετε μόνιμα αυτές τις τιμές, επεξεργαστείτε το /etc/sysctl.conf με τις επιθυμητές τιμές. Για παράδειγμα, για να απενεργοποιήσετε την προώθηση πακέτων στο /etc/sysctl.conf βεβαιωθείτε ότι αυτή η γραμμή εμφανίζεται στο αρχείο:

net.ipv4.ip_forward=0

Στη συνέχεια, εκτελέστε την ακόλουθη εντολή για να εφαρμόσετε τις αλλαγές στη διαμόρφωση που εκτελείται.

# sysctl -p

Άλλα παραδείγματα σημαντικών παραμέτρων χρόνου εκτέλεσης πυρήνα είναι:

Το fs.file-max καθορίζει τον μέγιστο αριθμό χειρισμών αρχείων που μπορεί να εκχωρήσει ο πυρήνας για το σύστημα. Ανάλογα με την προβλεπόμενη χρήση του συστήματός σας (ιστός/βάση δεδομένων/διακομιστής αρχείων, για να αναφέρουμε μερικά παραδείγματα), μπορεί να θέλετε να αλλάξετε αυτήν την τιμή για να καλύψετε τις ανάγκες του συστήματος.

Διαφορετικά, θα λάβετε ένα μήνυμα λάθους \Πολλά ανοιχτά αρχεία στην καλύτερη περίπτωση και ενδέχεται να εμποδίσει την εκκίνηση του λειτουργικού συστήματος στη χειρότερη περίπτωση.

Εάν λόγω ενός αθώου λάθους βρεθείτε σε αυτήν την τελευταία κατάσταση, κάντε εκκίνηση σε λειτουργία ενός χρήστη (όπως εξηγείται στο Μέρος 14 – Παρακολούθηση και Ορισμός ορίου χρήσης διαδικασίας Linux αυτής της σειράς.

Το kernel.sysrq χρησιμοποιείται για την ενεργοποίηση του πλήκτρου SysRq στο πληκτρολόγιό σας (γνωστό και ως πλήκτρο οθόνης εκτύπωσης) ώστε να επιτρέπει σε ορισμένους συνδυασμούς πλήκτρων να επικαλούνται ενέργειες έκτακτης ανάγκης όταν το σύστημα έχει γίνει αδιάφορη.

Η προεπιλεγμένη τιμή (16) υποδεικνύει ότι το σύστημα θα τιμήσει τον συνδυασμό Alt+SysRq+κλειδί και θα εκτελέσει τις ενέργειες που αναφέρονται στο sysrq.c τεκμηρίωση που βρίσκεται στο kernel.org (όπου το κλειδί είναι ένα γράμμα στην περιοχή b-z). Για παράδειγμα, το Alt+SysRq+b θα επανεκκινήσει το σύστημα με δύναμη (χρησιμοποιήστε το ως έσχατη λύση εάν ο διακομιστής σας δεν αποκρίνεται).

Προειδοποίηση! Μην επιχειρήσετε να πατήσετε αυτόν τον συνδυασμό πλήκτρων σε μια εικονική μηχανή, επειδή μπορεί να αναγκάσει το κεντρικό σύστημα να επανεκκινήσει!

Όταν οριστεί σε 1, το net.ipv4.icmp_echo_ignore_all θα αγνοήσει τα αιτήματα ping και θα τα αποβάλει σε επίπεδο πυρήνα. Αυτό φαίνεται στην παρακάτω εικόνα – σημειώστε πώς χάνονται τα αιτήματα ping μετά τη ρύθμιση αυτής της παραμέτρου πυρήνα:

Ένας καλύτερος και ευκολότερος τρόπος για να ορίσετε μεμονωμένες παραμέτρους χρόνου εκτέλεσης είναι η χρήση αρχείων .conf μέσα στο /etc/sysctl.d, ομαδοποιώντας τα κατά κατηγορίες.

Για παράδειγμα, αντί να ορίσετε τα net.ipv4.ip_forward=0 και τα net.ipv4.icmp_echo_ignore_all=1 στο /etc/sysctl.conf, μπορούμε να δημιουργήσουμε ένα νέο αρχείο με το όνομα net.conf μέσα στο /etc/sysctl.d:

# echo "net.ipv4.ip_forward=0" > /etc/sysctl.d/net.conf
# echo "net.ipv4.icmp_echo_ignore_all=1" >> /etc/sysctl.d/net.conf

Εάν επιλέξετε να χρησιμοποιήσετε αυτήν την προσέγγιση, μην ξεχάσετε να αφαιρέσετε τις ίδιες γραμμές από το /etc/sysctl.conf.

Περίληψη

Σε αυτό το άρθρο εξηγήσαμε πώς να τροποποιήσετε τις παραμέτρους χρόνου εκτέλεσης του πυρήνα, τόσο μόνιμες όσο και μη, χρησιμοποιώντας sysctl, /etc/sysctl.conf και αρχεία μέσα στο / etc/sysctl.d.

Στα έγγραφα sysctl μπορείτε να βρείτε περισσότερες πληροφορίες σχετικά με τη σημασία περισσότερων μεταβλητών. Αυτά τα αρχεία αντιπροσωπεύουν την πληρέστερη πηγή τεκμηρίωσης σχετικά με τις παραμέτρους που μπορούν να οριστούν μέσω του sysctl.

Βρήκατε αυτό το άρθρο χρήσιμο; Ελπίζουμε σίγουρα να το κάνατε. Μη διστάσετε να μας ενημερώσετε εάν έχετε ερωτήσεις ή προτάσεις για βελτίωση.