איך לשנות פרמטרי זמן ריצה של Kernel באופן עמיד ולא עמיד

חלק 13 של סדרת LFCS (Linux Foundation Certified Sysadmin) הסברנו כיצד להשתמש ב-GRUB כדי לשנות את ההתנהגות של המערכת על ידי מעבר אפשרויות לקרנל לתהליך האתחול הנוכחי.

באופן דומה, ניתן להשתמש בשורת הפקודה במערכת Linux פועלת כדי לשנות פרמטרי קרנל בזמן ריצה כשינוי חד פעמי, או לצמיתות על ידי עריכת קובץ התצורה.

לכן, ניתן לאפשר או להשבית פרמטרי קרנל בזמן ריצה בקלות רבה כאשר זה נדרש עקב שינוי נדרש בדרך שבה צפוי לפעול המערכת.

מציג את מערכת הקבצים /proc

המפרט האחרון של תקן היררכיית הקבצים מציין כי /proc מייצג את השיטה הברירת מחדל לטיפול במידע על תהליכים ומערכת כמו גם מידע על קרנל וזיכרון אחר. במיוחד, /proc/sys הוא המקום בו ניתן למצוא את כל המידע על מכשירים, נהגים וכמה תכונות של קרנל.

המבנה הפנימי האמיתי של /proc/sys תלוי בצורת הקרנל שמשמשת, אך סביר להניח שתמצאו את הספריות הבאות בתוכם. בתור תוצאה, כל אחת מהן תכיל תת-ספריות אחרות בהן נשמרים הערכים עבור כל קטגוריית פרמטר:

  1. dev: פרמטרים עבור התקנים ספציפיים המחוברים למכונה.
  2. fs: הגדרת מערכת הקבצים (קווטות ו-inodes, לדוגמה).
  3. kernel: הגדרות ספציפיות לקרנל.
  4. net: הגדרות רשת.
  5. vm: שימוש בזיכרון הווירטואלי של הקרנל.

כדי לשנות פרמטרים בזמן ריצה של הקרנל נשתמש בפקודת sysctl. ניתן לראות את מספר הפרמטרים שניתן לשנות באמצעות:

# sysctl -a | wc -l

אם ברצונך לראות את רשימת הפרמטרים המלאה של הקרנל, פשוט עשה:

# sysctl -a 

כיוון שפלט הפקודה למעלה יכיל מאוד הרבה שורות, נוכל להשתמש בצינורות עם less כדי לבדוק אותו בצורה יותר זהירה:

# sysctl -a | less

בואו נסתכל על השורות הראשונות. יש לשים לב שהתווים הראשונים בכל שורה תואמים לשמות התיקיות בתוך /proc/sys:

Understand Linux /proc Filesystem

לדוגמה, השורה שהוארכה:

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

ניתן לצפות בערך של פרמטר מסוים של לינוקס באמצעות sysctl עם שם הפרמטר או קריאה של הקובץ המשוייך:

# sysctl dev.cdrom.autoclose
# cat /proc/sys/dev/cdrom/autoclose
# sysctl net.ipv4.ip_forward
# cat /proc/sys/net/ipv4/ip_forward
Check Linux Kernel Parameters

הגדרת או שינוי פרמטרי לינוקס

כדי להגדיר את הערך של פרמטר לינוקס ניתן גם להשתמש ב־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 מציין את המספר המרבי של ידיות קובץ שהליבה יכולה להקצות למערכת. בהתאם לשימוש הנמצא של המערכת שלך (שרת אינטרנט / מסד נתונים / שרת קבצים, לתת כמה דוגמאות), עשוי להיות רצוי לשנות את הערך הזה כדי לענות על צרכי המערכת.

אחרת, תקבלו הודעת שגיאה "יותר מדי קבצים פתוחים" במיטב המקרים, ועשוי למנוע ממערכת ההפעלה להפעיל במקרה הגרוע ביותר.

אם זה קורה עקב טעות חפה, הפעילו את המערכת במצב משתמש יחיד (כפי שמוסבר ב- חלק 13 – הגדרה ופיתוח של טוען ההפעלה Grub של Linux) וערכו את /etc/sysctl.conf כפי שנמסר קודם. כדי להגביל את ההתנהלות בכפוף למשתמש, ניתן לעיין ב- חלק 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 אבדו לאחר הגדרת פרמטר הליבה זה:

Block Ping Requests in Linux

A better and easier way to set individual runtime parameters is using .conf files inside /etc/sysctl.d, grouping them by categories.

לדוגמה, במקום להגדיר 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.

האם מצאתם את המאמר הזה מועיל? אנו בהחלט מקווים שכן. אל תהסס להודיע לנו אם יש לכם שאלות או הצעות לשיפור.

Source:
https://www.tecmint.com/change-modify-linux-kernel-runtime-parameters/