लगातार ब्लॉकदेव सेटरा आगे की सेटिंग को पढ़ता है


14

मैंने कुछ SSDs को SLES 11 SP2 सर्वर पर /dev/sda1और ऊपर चढ़ा लिया /dev/sdb1है, और मैं इसके साथ आगे की सेटिंग को पढ़ने में सक्षम था blockdev --setra:

sudo blockdev --setra 4096 /dev/sda
sudo blockdev --setra 4096 /dev/sdb
sudo blockdev --getra /dev/sda
4096
sudo blockdev --getra /dev/sdb
4096

मैं बूट पर इस सेटिंग को कैसे जारी रख सकता हूं? विशेष रूप से, क्या इसमें एक समान सेटिंग है sysctl.conf, या मुझे ऐसा करने के लिए एक आरसी स्क्रिप्ट के लिए समझौता करना होगा?


2
मुझे नहीं पता कि इसका कोई 'उचित' समाधान है, लेकिन udv नियम निश्चित रूप से RC स्क्रिप्ट से अधिक उचित होगा।
पैट्रिक

3
आप SSD BTW पर रीड-फॉरवर्ड क्यों बढ़ाना चाहेंगे ? मैं दी गई बात को नहीं देख सकता कि एसएसडी के पास बहुत कम समय है।
स्टीफन चेजलस

जवाबों:


16

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

आप अपने उपकरणों (जैसे डिस्क मॉडल और निर्माता) को निष्पादित करने के लिए आवश्यक विशिष्ट विशेषताओं को प्राप्त कर सकते हैं:

udevadm info -a -p /sys/block/sda

और अपने ब्लॉक डिवाइस के लिए सभी एटीआर जोड़े की जाँच करें।

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

इंटेल एसएसडी के लिए एक विशिष्ट अनुसूचक को लागू करने के लिए यहां एक उदाहरण है, आपका वांछित रीडहेड मूल्य (4096 ब्लॉक = 2048 केबी), और अन्य सभी एसएसडी के लिए एक अलग अनुसूचक भी लागू करें:

cat /etc/udev/rules.d/99-ssd.rules
# http://unix.stackexchange.com/a/71409/36574
# Setting specific kernel parameters for a subset of block devices (Intel SSDs)
SUBSYSTEM=="block", ATTRS{model}=="Intel SSDSC*", ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{bdi/read_ahead_kb}="2048", ATTR{queue/scheduler}="deadline"
# for all other non-rotational block devices set a scheduler to 'noop' and readahead to 1024KB
SUBSYSTEM=="block", ATTR{queue/rotational}=="0", ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{bdi/read_ahead_kb}="1024", ATTR{queue/scheduler}="noop"

फ़ाइल को सहेजने के बाद आप परीक्षण कर सकते हैं कि क्या आपका नियम डिवाइस से मेल खाएगा और udvadm का उपयोग करके क्या करेगा:

udevadm test --action=add /sys/block/sda

यह उन सभी नियमों को प्रिंट करता है जो udev लोड करता है, क्या मेल खाता है, क्या नहीं करता है, और डिवाइस प्लग इन होने पर क्या निर्णय करेगा।

उम्मीद है की यह मदद करेगा।


अच्छी जानकारी। मैं कुछ ऐसे ही udv नियमों की कोशिश करने जा रहा हूं जब मुझे मौका मिलेगा और मैं आपके पास वापस आऊंगा। हम उपयोग कर रहे हैं OCZ vertex 3, लेकिन मुझे नहीं लगता कि आपके सुझाए गए नियम इंटेल के लिए विशिष्ट हैं, मॉडल क्षेत्र को छोड़कर, सही है?
बंजर

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

10

ध्यान दें कि पढ़ने-आगे कम से कम /sys( /sys/class/block/sda/queue/read_ahead_kb), blockdevऔर hdparm( hdparm -a) के माध्यम से सेट किया जा सकता है ।

hdparmडेबियन और इसके डेरिवेटिव में hdparm.confबूट पर सेट करने के लिए प्रति-डिवाइस विशेषताओं को निर्दिष्ट करने और हॉट-प्लग ( udevनियमों के माध्यम से ) के साथ आता है।

तो आपके पास हो सकता है:

/dev/disk/by-id/my-disk... {
  read_ahead_sect = 4096
}

(आईडी के उपयोग से बेहतर है कि sdaएक बूट से दूसरे में बदल सकता है)।


मैं hdparmSLES 11 को देखता हूं , लेकिन इसका पता नहीं लगा सकता hdparm.conf। Google मुझे बताता है कि किसी भी hdparmसेटिंग को जारी रखने के लिए, कम से कम SuSE पर एक rc स्क्रिप्ट की आवश्यकता है ।
बंजर

@ बंजर, हाँ, ऐसा लगता है कि यह डेबियन एक्सटेंशन (उबंटू में थोड़ा संशोधित) है: एक शेल स्क्रिप्ट शुरुआती बूट पर चलती है और डिवाइस हॉट प्लग उस फ़ाइल को पार्स करता है और hdparmउसी के अनुसार कॉल करता है । मैंने जवाब अपडेट कर दिया है।
स्टीफन चेजलस

/sysपथ को निर्दिष्ट करने के लिए +1 हालांकि @zorlem udevनियम बूटअप कॉन्फ़िगरेशन के लिए बहुत अच्छा है।
तोटर

-1

इसमें कुछ भी समान नहीं sysctlहै, हां, हां, /etc/rc.localएक तरीका है, या एक जैसा है। और सावधान रहना, - मैंने व्यक्तिगत रूप से देखा कि उबंटू पर, - उन परिवर्तनों को और भी तेजी से बूट के बाद एक बार सेट किया जा रहा है, इसलिए, इसे crontabरखने के लिए उपयोग करने की समझ भी हो सकती है।

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