मैं HDD स्पिन समय को कैसे नियंत्रित कर सकता हूं?


71

मैं अपने पीसी में 2 HDDs है। उबंटू लगभग 15 मिनट के बाद माध्यमिक एचडीडी को बहुत जल्दी बंद कर रहा है, जो मेरे लिए छोटा है। मुझे इस समय को नियंत्रित करने की आवश्यकता है। मैं यह कैसे कर सकता हूं?

मैंने गनोम पावर प्रबंधन की कोशिश की, लेकिन इसे उपयोगी नहीं पाया।

जवाबों:


67

एक नजर है hdparm

से मैनुअल ( man hdparmकमांड लाइन पर):

-S ड्राइव के लिए स्टैंडबाय (स्पिंडाउन) टाइमआउट सेट करें। इस मान का उपयोग ड्राइव द्वारा किया जाता है ताकि यह निर्धारित किया जा सके कि बिजली बचाने के लिए धुरी मोटर को बंद करने से पहले कितनी देर तक प्रतीक्षा करनी चाहिए (डिस्क गतिविधि के साथ नहीं)। ऐसी परिस्थितियों में, ड्राइव को बाद में डिस्क एक्सेस का जवाब देने में 30 सेकंड तक का समय लग सकता है, हालांकि अधिकांश ड्राइव बहुत तेज हैं।

टाइमआउट मान की एन्कोडिंग कुछ अजीब है। शून्य के मान का अर्थ है "टाइमआउट अक्षम हैं": डिवाइस स्वचालित रूप से स्टैंडबाय मोड में प्रवेश नहीं करेगा। 1 से 240 तक के मान 5 सेकंड के गुणक को निर्दिष्ट करते हैं, 5 सेकंड से 20 मिनट तक के समय की उपज। 241 से 251 तक के मान 30 मिनट की 1 से 11 इकाइयों तक निर्दिष्ट हैं, 30 मिनट से 5.5 घंटे तक के समय की उपज। 252 का मान 21 मिनट का टाइमआउट दर्शाता है। 253 का मान 8 और 12 घंटों के बीच एक विक्रेता-निर्धारित टाइमआउट अवधि निर्धारित करता है, और मूल्य 254 आरक्षित है। 255 को 21 मिनट और 15 सेकंड के रूप में व्याख्या की गई है। ध्यान दें कि कुछ पुराने ड्राइव में इन मूल्यों की बहुत अलग व्याख्या हो सकती है।

तो sudo hdparm -I /dev/sdb | grep levelउदाहरण के लिए वर्तमान spindown मूल्य, दिखाएगा:

Advanced power management level: 254

मैनुअल से: 254 आरक्षित है इसलिए मुझे उम्मीद है कि यह उबंटू का डिफ़ॉल्ट हो सकता है (क्या कोई इस पर पुष्टि / विस्तार कर सकता है?)

उदाहरण:

sudo hdparm -S 25 /dev/sdb = 25 * 5 सेकंड के बाद स्पिंडाउन।

sudo hdparm -S 245 /dev/sdb = बाद में (245-240) * 30 मिनट तक फैला।


धन्यवाद टिप्स के लिए रिन्जविंड, जिसने मुझे बहुत मदद की, लेकिन मैं चाहता हूं कि मैं ubuntu की अगली रिलीज में इसके लिए गुई देखूं या इसे gnome पावर मैनेजर में एकीकृत किया जा सके
user16295

4
Lzap के उत्तर के बारे में आप grepAPM ( -Bparm) के लिए प्रतीत होते हैं , लेकिन -Sस्पिन्डाउन के बारे में बात करते हैं । क्या आप भी एपीएम के बारे में कुछ जानते हैं?
टर्बो

3
वर्तमान -Bसेटिंग ऊपर बताए अनुसार दिखाई गई है। मैं वर्तमान -Sसेटिंग कैसे देख सकता हूं ?
सब्रेवुल्फी

5
sudo hdparm -y /dev/sdbजानवर को तुरंत मार देता है
स्यामई

1
@SabreWolfy मैंने पूछा है कि एक अलग प्रश्न के रूप में: मैं वर्तमान ड्राइव स्पिन-डाउन समय का पता कैसे लगा सकता हूं?
ændrük

46

डिस्क उपयोगिता -> एचडीडी ड्राइव का चयन करें -> ऊपरी दाएं कोने पर "अधिक कार्य ..." आइकन पर क्लिक करें -> ड्राइव सेटिंग ...

मेरा ऐसा दिखता है: स्क्रीनशॉट


6
सबसे दूर तक, धन्यवाद! (यदि आपके पास यह नहीं है, तो आपको जो पैकेज स्थापित करने की आवश्यकता है उसे बीटीडब्ल्यू करें gnome-disk-utility
गेरहार्ड बर्गर

लाइन में जाने का रास्ता! +1
न्यू-रे

हां, बेहद आसान है - खुशी है कि यह यहां है।
ज़्ज़्ज़ाक ...

@ रे यू, सर, कमाल हैं! मुझे मूल रूप से उम्मीद नहीं थी कि यह बाहरी एचडीडी के लिए काम करेगा लेकिन यह किया!
UTF-8

1
अधिकांश युक्तियों में त्रुटि प्रवण फ़ाइल संपादन या कंसोल ऑपरेशन शामिल हैं, जबकि उपयोगकर्ता के अनुकूल उपकरण इस तरह से पहले से ही बाहर निकलते हैं!
वूयेक

29

यदि आप hdparm की सेटिंग को रिबूट के बीच लगातार करना चाहते हैं, तो इसे crontab में जोड़ने के बजाय, आप उपयोग कर सकते हैं /etc/hdparm.conf। मेरे पास निम्नलिखित हैं, पूंजी एस के उपयोग पर ध्यान दें, न कि नीचे की ओर:

command_line {
    hdparm -S 25 /dev/disk/by-uuid/f6c52265-d89f-43a4-b03b-302c3dadb215 
}

अपने द्वारा UUID की जगह उस पंक्ति को जोड़ें, या आप /dev/sdXप्रारूप का उपयोग करके डिवाइस को निर्दिष्ट कर सकते हैं । आप कमांड के साथ अपनी डिस्क का यूयूआईडी पता कर सकते हैं sudo blkid


3
क्या command_lineआजकल इसका इस्तेमाल करना सही है? मेरे पास अलग-अलग उदाहरण हैं /etc/hdparm?
डिम

1
Ondra ndižka का उत्तर आज तक अधिक प्रतीत होता है।
राफेल

9
  1. अपनी डिस्क का UUID खोजें

    sudo lsblk --output NAME,FSTYPE,LABEL,UUID,MODE
    
  2. संपादित करें /etc/hdparm.conf

    sudo -H gedit /etc/hdparm.conf  # Be careful from now on
    
  3. के लिए देखो spindown-timeया अपने डिस्क सेटिंग्स अनुभाग।

    /dev/disk/by-label/4TB {
        spindown_time = 1200
    }
    
  4. मैं यूयूआईडी द्वारा डिस्क को संदर्भित करना पसंद करता हूं जो विभिन्न प्रतिष्ठानों में एक ही रहता है (जब तक कि आप इसे एचडब्ल्यू में खुद नहीं बदलते)।

    /dev/disk/by-uuid/91e32677-0656-45b8-bcf5-14acce39d9c2 {
        spindown_time = 1200
    }
    
  5. यदि init स्क्रिप्ट बूट समस्याओं का कारण बनती है, तो आप nohdparm कर्नेल कमांड लाइन पर पास कर सकते हैं , और स्क्रिप्ट को चलाया नहीं जाएगा।


उस पैरामीटर के लिए इकाइयाँ क्या हैं?
detly

IIRC, यह सेकंड है। या हो सकता है कि यह पैरामीटर है, जिसमें जंगली नियम थे जैसे "यदि यह 10 वर्ष से कम है, तो उसके दस सेकंड, यदि 100 से कम है, तो यह मिनट है", और ऐसा। मुझे खोजने की आवश्यकता होगी।
ओन्द्रा žižka

2
यह इकाइयाँ नहीं हैं, इसे देखें: wiki.archlinux.org/index.php/Hdparm
Ondra raižka

चीयर्स, किसी कारण से मैं इसे नहीं ढूंढ सका man hdparm.conf
13

man hdparm.confअप्रत्यक्ष रूप से पढ़ता है कि -Sमानों को मानों के लिए पारित किया जाता है <255 शीर्ष उत्तर में नियम के साथ संगत होना चाहिए । किसी भी आगे की जानकारी का स्वागत किया है।
dma_k

8

घंटों और घंटे बिताने के बाद मुझे पता चला कि मेरी WDC ड्राइव hdparm -S कमांड का समर्थन नहीं करती है, कोई बात नहीं idle3 विशेषता मान (google: idle3ctl)। और यह WD ड्राइव के साथ आम समस्या है। लेकिन मुझे यह घोषणा करते हुए खुशी हो रही है कि एचडी-आइडल ( http://hd-idle.sourceforge.net/ ) त्रुटिपूर्ण रूप से काम करता है। अगर dpkg-builded पैकेज (इंस्टालेशन नोट्स देखें) से स्थापित किया गया है, तो यह ubuntu और debian दोनों पर डीमन बनाता है (config / etc / default / hd-idle में है)। हाइबरनेशन से फिर से शुरू होने के बाद भी अच्छी तरह से काम करता है।

mc default # ps aux | grep hd-idle | grep -v grep | कट-सी 66-; f में [विज्ञापन]; do hdparm -C / dev / sd $ f | grep -v "^ $"; किया हुआ
/ usr / sbin / hd-idle -i 1800 -a sdc -i 600 -a sdd -i 60 -l /var/log/hd-idle.log
/ Dev / sda:
 ड्राइव स्थिति है: सक्रिय / निष्क्रिय
/ Dev / SDB:
 ड्राइव स्थिति है: स्टैंडबाय
/ Dev / एसडीसी:
 ड्राइव स्थिति है: स्टैंडबाय
/ Dev / SDD:
 ड्राइव स्थिति है: स्टैंडबाय



5

मुझे पता चला कि सैमसंग HD204UI का स्पिंडाउन व्यवहार APM स्तर ( hdparm -B) पर निर्भर करता है । यदि एपीएम स्तर 127 है, तो स्पिंडाउन टाइमआउट 10 एस है। यदि एपीएम स्तर 150 है, तो स्पिंडाउन टाइमआउट -Sविकल्प द्वारा परिभाषित किया गया है।


एचडीपीआर सेट कर सकता है लेकिन -Sविकल्प नहीं मिल सकता है ( डिस्क स्पिंडाउन समय निर्धारित करने का तरीका देखें )। इसे पाने के लिए, "डिस्क" जीयूआई सॉफ्टवेयर का उपयोग करें। स्क्रीनशॉट के साथ अन्य उत्तर देखें ।
क्रिशवेबडे

5

मैं कुछ जोड़ता हूं:

@reboot sudo hdparm -S244 /dev/disk/by-uuid/71492809-e463-41fa-99e2-c09e9ca90c8e  > /dev/null 2> /dev/null

जड़ के साथ करने के लिए। Uuid का उपयोग करना बेहतर है, मुझे लगता है कि क्योंकि sda/ sdbआदि हर रिबूट के साथ बदलने लगता है


10
उपयोग क्यों नहीं hdparm.conf?
ændrük

3

उबंटू में 14.04

डिस्क> हाइलाइट ड्राइव> ऊपरी दाहिने हाथ के कोने में गियर पर क्लिक करें> ड्राइव सेटिंग्स> अब आपके पास स्टैंडबाय, एपीएम, एएएम और जीयूआई का उपयोग करने के लिए एक आसान में कैश सेटिंग्स लिखें!


आप यह काम कैसे करते हैं? मैंने इसे सेट किया है, और रिबूट के बाद अगर मैं इसमें वापस जाता हूं तो याद आया है कि ड्राइव को पावर डाउन करना चाहिए, लेकिन यह कभी नहीं करता है। hdparm -C हमेशा दिखाता है कि यह सक्रिय है और केवल कमांड से hdparm -S xxx चलाना काम कर रहा है।
डैन कार्टर

1
आप "डिस्क" कहां पाते हैं?
nealmcb

1

WD ड्राइव पर, WD ड्राइव के साथ, मुझे लगता है कि किसी भी स्तर को hdparm के साथ सेट करने से-ड्राइव में परिणाम 254 के बाद के hdparm -I के स्तर पर वापस आ जाता है । इसलिए मुझे यकीन नहीं है कि वे नीचे घूम रहे हैं या नहीं। मुझे लगता है कि वे अभी भी नीचे घूम रहे हैं।

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


1

मुझे एचडीपीएम के साथ कोई सौभाग्य नहीं था जो एक यूएसबी परिक्षेत्र में लगे बाहरी एचडीडी पर था, जिसका उपयोग मैं मिनीडलना के साथ मीडिया की सेवा के लिए करता हूं।

मुझे यहाँ से एक विचार आया: https://serverfault.com/questions/562738/keeping-usb-backup-drive-from-sleeping-ORE-mounted

डिस्क के यूआईडी का उपयोग करने से सर्वोत्तम परिणाम मिलते हैं, जिन्हें आप पा सकते हैं:

sudo blkid

निम्न विधि को रूट एक्सेस की आवश्यकता होती है, लेकिन इतना एचडीपीआर करता है। यह ड्राइव से हर 5 मिनट में एक यादृच्छिक ब्लॉक पढ़ने के लिए crontab का उपयोग करता है और सभी संदेशों को अनदेखा करता है। यह सुनिश्चित करने के लिए कि आपके पास सही UUID है, कमांड लाइन पर इस तरह से परीक्षण करें (सुनिश्चित करें कि आप अपने वांछित UUID का उपयोग करते हैं, यह नहीं):

sudo dd if=/dev/disk/by-uuid/f01df4b5-6865-476a-8d3b-597cbd886d41 of=/dev/null count=1 skip=$RANDOM

आपको इस तरह आउटपुट देखना चाहिए:

1+0 records in
1+0 records out
512 bytes copied, 0.000738308 s, 693 kB/s`

इस संदेश को दबाने के लिए, जो अंत में कहीं लिखा जा सकता है, संभवतः / filesystem (जो मेरे मामले में SSD पर है), नीचे मैं रूट crontab का उपयोग कर रहा हूं। तुम वहाँ साथ हो

sudo crontab -e

फिर, टिप्पणियों के तहत:

*/5 * * * * bash -c 'dd if=/dev/disk/by-uuid/f01df4b5-6865-476a-8d3b-597cbd886d41 of=/dev/null count=1 skip=$RANDOM' >/dev/null 2>&1

आशा है कि यह इसी तरह के मुद्दों के साथ किसी और की मदद करता है। दुर्भाग्य से, यह अभी भी syslog को लिखा जाता है, लेकिन इसे दबाने के संभावित तरीके हैं; इस सर्वरफॉल्ट पोस्ट को देखें ।

[संपादित करें] 2017-01-07 09:02:

मैं इन संदेशों को /etc/rsyslog.d/50-default.conf संपादित करके इस संदेश को दबाने में सक्षम था:

*.*;auth,authpriv.none -/var/log/syslog

इसके लिए:

*.*;cron,auth,authpriv.none -/var/log/syslog

दुर्भाग्य से, यह सभी क्रोन संदेशों को दबा देता है; मुझे रूट फाइलसिस्टम (जो मेरे मामले में एक बूढ़े एसएसडी पर है, इसलिए मैं राइट टू लिमिडेट करना चाहता हूं) से लॉग इन करने के लिए क्रोन नहीं मिल सका, लेकिन जैसा कि यह सिर्फ एक होम सर्वर है, मैं शायद बहुत याद नहीं कर रहा हूं। उत्पादन मशीन के लिए निश्चित रूप से इस रणनीति की सिफारिश नहीं करेंगे ।

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