ค้นหาค่าเริ่มต้น sysctl? (โดยไม่ต้องรีบูตเครื่อง)


10

ฉันได้แก้ไขค่าnet.core.rmem_maxด้วยsysctlแล้วและตอนนี้ฉันต้องการตั้งค่ากลับเป็นค่าเริ่มต้น

หากฉันรีบูทnet.core.rmem_maxจะกลับไปเป็นค่าเริ่มต้น (เพราะมันไม่ได้ถูกเขียนทับ/etc/sysctl.conf) แต่ฉันจะรู้ค่านี้ได้โดยไม่ต้องรีบูตเครื่องหรือไม่?

เป็นการดีที่ฉันควรจะวิ่งsysctl net.core.rmem_maxไปอ่านค่าก่อนที่จะแก้ไข แต่ฉันลืม ...

คำตอบ:


4

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

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

สำหรับการตั้งค่าส่วนใหญ่คุณสามารถดูในแหล่งเคอร์เนล - kernel/sysctl.cและไฟล์อื่น ๆ คุณจะเห็นคำจำกัดความเช่น

    {
            .procname       = "rmem_max",
            .data           = &sysctl_rmem_max,
            …
    },

(ในnet/core/sysctl_net_core.c) จากการที่คุณสามารถติดตามการเริ่มต้นของตัวแปรsysctl_rmem_max ในขณะที่สิ่งนี้ถูกเริ่มต้นจากค่าคงที่มันใช้เวลาค่อนข้างน้อยในการอ่านรหัส C เพื่อขยาย


0

บนเครื่อง OpenBSD ของฉัน /etc/sysctl.conf จะแสดงรายการค่า sysctl เริ่มต้นจำนวนมาก แต่รายการนี้ไม่ครบถ้วนสมบูรณ์

อาจเป็นวิธีที่ดีที่สุดคือการอ่านรหัส sysctl หรือถามเพื่อนที่ใช้ระบบปฏิบัติการเดียวกันสำหรับค่าของเขา :)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.