ใน Part 13 ของซีรีส์ LFCS (Linux Foundation Certified Sysadmin) นี้ เราได้อธิบายวิธีใช้ GRUB เพื่อปรับเปลี่ยนการทำงานของระบบโดยส่งตัวเลือกไปยังเคอร์เนลสำหรับกระบวนการบูตที่กำลังดำเนินการอยู่

ในทำนองเดียวกัน คุณสามารถใช้บรรทัดคำสั่งในระบบ Linux ที่ทำงานอยู่เพื่อแก้ไขพารามิเตอร์เคอร์เนลรันไทม์บางตัวเป็นการแก้ไขครั้งเดียว หรือแก้ไขไฟล์การกำหนดค่าอย่างถาวร

ดังนั้น คุณจึงได้รับอนุญาตให้เปิดหรือปิดใช้งานพารามิเตอร์เคอร์เนลได้ทันทีโดยไม่ยากเมื่อจำเป็นเนื่องจากการเปลี่ยนแปลงที่จำเป็นในวิธีที่ระบบคาดว่าจะทำงาน

แนะนำระบบไฟล์ /proc

ข้อกำหนดล่าสุดของ Filesystem Hierarchy Standard ระบุว่า /proc แสดงถึงวิธีการเริ่มต้นสำหรับการจัดการกระบวนการและข้อมูลระบบตลอดจนข้อมูลเคอร์เนลและหน่วยความจำอื่น ๆ โดยเฉพาะ, /proc/sys เป็นที่ที่คุณสามารถค้นหาข้อมูลทั้งหมดเกี่ยวกับอุปกรณ์ ไดรเวอร์ และคุณสมบัติบางอย่างของเคอร์เนล

โครงสร้างภายในที่แท้จริงของ /proc/sys ขึ้นอยู่กับเคอร์เนลที่ใช้เป็นหลัก แต่คุณมักจะพบไดเร็กทอรีต่อไปนี้ภายใน ในทางกลับกัน แต่ละรายการจะมีไดเร็กทอรีย่อยอื่นๆ ที่ค่าสำหรับพารามิเตอร์แต่ละหมวดหมู่จะคงอยู่:

  1. dev: พารามิเตอร์สำหรับอุปกรณ์เฉพาะที่เชื่อมต่อกับเครื่อง
  2. fs: การกำหนดค่าระบบไฟล์ (เช่น โควต้าและไอโหนด)
  3. เคอร์เนล: การกำหนดค่าเฉพาะเคอร์เนล
  4. net: การกำหนดค่าเครือข่าย
  5. vm: การใช้หน่วยความจำเสมือนของเคอร์เนล

ในการแก้ไขพารามิเตอร์รันไทม์ของเคอร์เนล เราจะใช้คำสั่ง sysctl. สามารถดูจำนวนพารามิเตอร์ที่แน่นอนที่สามารถแก้ไขได้ด้วย:

# sysctl -a | wc -l

หากคุณต้องการดูรายการพารามิเตอร์เคอร์เนลทั้งหมด ให้ทำดังนี้

# sysctl -a 

เนื่องจากผลลัพธ์ของคำสั่งดังกล่าวจะประกอบด้วยหลายบรรทัด เราจึงสามารถใช้ไพพ์ไลน์ที่ตามด้วยน้อยกว่าเพื่อตรวจสอบอย่างละเอียดยิ่งขึ้น:

# sysctl -a | less

มาดูบรรทัดแรกกันบ้าง โปรดทราบว่าอักขระตัวแรกในแต่ละบรรทัดตรงกับชื่อของไดเร็กทอรีภายใน /proc/sys:

ทำความเข้าใจระบบไฟล์ Linux /proc

ตัวอย่างเช่น เส้นที่เน้น:

dev.cdrom.info = drive name:        	sr0

แสดงว่า sr0 เป็นนามแฝงสำหรับออปติคัลไดรฟ์ กล่าวอีกนัยหนึ่งนั่นคือวิธีที่เคอร์เนล sees ที่ขับเคลื่อนและใช้ชื่อนั้นเพื่ออ้างถึง

ในส่วนต่อไปเราจะอธิบายวิธีการเปลี่ยนอื่นๆ more important พารามิเตอร์รันไทม์ของเคอร์เนลใน Linux

วิธีเปลี่ยนหรือแก้ไขพารามิเตอร์รันไทม์ของเคอร์เนล Linux

จากสิ่งที่เราได้อธิบายไปแล้ว มันง่ายที่จะเห็นว่าชื่อของพารามิเตอร์ตรงกับโครงสร้างไดเร็กทอรีภายใน /proc/sys จะพบได้ที่ไหน

ตัวอย่างเช่น:

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

ตรวจสอบพารามิเตอร์เคอร์เนลลินุกซ์

ที่กล่าวว่าเราสามารถดูค่าของพารามิเตอร์เคอร์เนลลินุกซ์เฉพาะโดยใช้ 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 ระบุจำนวนไฟล์สูงสุดที่เคอร์เนลสามารถจัดสรรให้กับระบบได้ ขึ้นอยู่กับการใช้งานระบบของคุณ (เว็บ / ฐานข้อมูล / ไฟล์เซิร์ฟเวอร์ เพื่อระบุตัวอย่าง) คุณอาจต้องการเปลี่ยนค่านี้เพื่อให้ตรงกับความต้องการของระบบ

มิเช่นนั้น ท่านจะได้รับ Too many open files ข้อความแสดงข้อผิดพลาดที่ดีที่สุด และอาจป้องกันไม่ให้ระบบปฏิบัติการบูตได้แย่ที่สุด

หากคุณพบว่าตัวเองอยู่ในสถานการณ์สุดท้ายนี้เนื่องจากความผิดพลาดที่ไร้เดียงสา ให้บูตในโหมดผู้ใช้คนเดียว (ตามที่อธิบายไว้ในส่วนที่ 13 – กำหนดค่าและแก้ไขปัญหา Linux Grub Boot Loader) และแก้ไข /etc/sysctl.conf ตามคำสั่งก่อนหน้านี้ หากต้องการตั้งค่าข้อจำกัดเดียวกันสำหรับแต่ละผู้ใช้ โปรดดูส่วนที่ 14 – ตรวจสอบและตั้งค่าลินุกซ์กระบวนการจำกัดการใช้งานของชุดนี้

kernel.sysrq ใช้เพื่อเปิดใช้งาน SysRq ในแป้นพิมพ์ของคุณ (หรือเรียกอีกอย่างว่าแป้นพิมพ์หน้าจอ) เพื่ออนุญาตให้ใช้การกดแป้นร่วมกันเพื่อเรียกใช้การดำเนินการฉุกเฉินเมื่อระบบไม่ตอบสนอง

ค่าเริ่มต้น (16) แสดงว่าระบบจะให้เกียรติ Alt+SysRq+key และดำเนินการตามรายการใน sysrq.c เอกสารที่พบใน kernel.org (โดยที่คีย์คือตัวอักษรหนึ่งตัวในช่วง bz) ตัวอย่างเช่น, Alt+SysRq+b จะรีบูตระบบอย่างแรง (ใช้สิ่งนี้เป็นทางเลือกสุดท้ายหากเซิร์ฟเวอร์ของคุณไม่ตอบสนอง)

คำเตือน! อย่าพยายามกดคีย์ผสมนี้บนเครื่องเสมือนเพราะอาจทำให้ระบบโฮสต์ของคุณรีบูตได้!

เมื่อตั้งค่าเป็น 1, net.ipv4.icmp_echo_ignore_all จะละเว้นคำขอ ping และวางไว้ที่ระดับเคอร์เนล สิ่งนี้แสดงในภาพด้านล่าง – โปรดทราบว่าคำขอ ping จะหายไปหลังจากตั้งค่าพารามิเตอร์เคอร์เนลนี้:

บล็อกคำขอ Ping ใน Linux
บล็อกคำขอ Ping ใน Linux

วิธีที่ดีกว่าและง่ายกว่าในการตั้งค่าพารามิเตอร์รันไทม์แต่ละรายการคือการใช้ .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

คุณพบว่าบทความนี้มีประโยชน์หรือไม่? เราหวังว่าคุณจะทำอย่างนั้น อย่าลังเลที่จะแจ้งให้เราทราบหากคุณมีคำถามหรือข้อเสนอแนะในการปรับปรุง