Sysctl डिफ़ॉल्ट मान ज्ञात करें? (बिना रीबूट किए)


10

मैंने का मान संशोधित net.core.rmem_maxकिया है sysctl, और अब मैं इसे इसके डिफ़ॉल्ट मान पर वापस सेट करना चाहूंगा।

यदि मैं रिबूट करता हूं, net.core.rmem_maxतो अपने डिफ़ॉल्ट मान पर वापस चला जाएगा (क्योंकि यह ओवरराइड नहीं है /etc/sysctl.conf), लेकिन क्या मैं रिबॉन्डिंग किए बिना इस मान को जान सकता हूं?

आदर्श रूप से मुझे sysctl net.core.rmem_maxइसे संशोधित करने से पहले मूल्य को पढ़ने के लिए चलना चाहिए था, लेकिन मैं भूल गया ...

जवाबों:


4

यह सामान्य रूप से संभव नहीं है: कर्नेल मूल मानों को नहीं रखता है (कम से कम लिनक्स के तहत यह नहीं करता है, और यह संभवतः अन्य यूनिक्स वेरिएंट का सच है)। सेटिंग का मान एक चर में संग्रहीत किया जाता है; जब आप सेटिंग बदलते हैं, तो चर वाली मेमोरी अपरिवर्तनीय रूप से अपडेट की जाती है।

अधिकांश सेटिंग्स के लिए, चर का प्रारंभिक मूल्य एक स्थिर है जो संकलन समय पर निर्धारित होता है और कर्नेल बाइनरी में संग्रहीत होता है। इसलिए, आप सिद्धांत रूप में, डिफ़ॉल्ट मूल्य को खोजने के लिए अपने कर्नेल बाइनरी का निरीक्षण कर सकते हैं। आपको उस सेटिंग के अनुरूप प्रतीक का पता लगाना होगा जिसमें आप रुचि रखते हैं, और कर्नेल बाइनरी में उस प्रतीक के पते का पालन करें। एक वर्चुअल मशीन में अपने कर्नेल को बूट करना कम काम होगा।

अधिकांश सेटिंग्स के लिए, आप कर्नेल स्रोत में देख सकते हैं - kernel/sysctl.cऔर अन्य फाइलें। आप जैसी परिभाषाएँ देखेंगे

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

(इन net/core/sysctl_net_core.c), जिसमें से आप sysctl_rmem_maxवैरिएबल के आरंभ का पता लगा सकते हैं । जबकि यह एक स्थिर से शुरू होता है, यह विस्तार करने के लिए सी कोड को पढ़ने में काफी थोड़ा लेता है।


0

मेरी OpenBSD मशीन पर, /etc/sysctl.conf डिफ़ॉल्ट sysctl मानों के एक समूह को सूचीबद्ध करता है, लेकिन यह सूची संपूर्ण नहीं है।

संभवत: सबसे अच्छा तरीका है कि आप sysctl कोड पढ़ें या किसी ऐसे दोस्त से पूछें जो अपने मूल्यों के लिए उसी OS को चला रहा हो :)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.