सोने से USB बाहरी हार्ड ड्राइव को रोकें


12

क्या किसी को पता है कि निष्क्रियता की अवधि के बाद बाहर नहीं निकलने के लिए बाहरी यूएसबी ड्राइव को बताने का एक सुंदर तरीका है? मैंने क्रोन आधारित समाधान देखे हैं जो हर मिनट एक फ़ाइल लिखते हैं, लेकिन कुछ भी नहीं जो अच्छी यूनिक्स लालित्य की खुशबू आ रही है। वहाँ एक hdparm, या scsi कमांड होना चाहिए जिसे मैं जारी कर सकता हूं (usb ड्राइव को sd ड्राइवर के माध्यम से OpenBSD में एक्सेस किया गया है) ड्राइव पर इसे नींद न आने के लिए कहने के लिए। मुझे डर है कि यह संभवतः बाड़े में नियंत्रक में निर्मित एक विशेषता है , और इस तरह से बहुत ज्यादा नहीं है कि यह ड्राइव को बाड़े से बाहर निकालने से अलग हो सकता है और इसे सीधे मशीन में बंद कर सकता है, लेकिन मुझे लगा कि मैं पूछूंगा, पर बंद मौका।

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


1
मैं बस उत्सुक हूं कि आप ड्राइव को नीचे स्पिन क्यों नहीं करना चाहते हैं।
tshepang

1
खैर, फिलहाल, ऐसा इसलिए है क्योंकि मेरे पास एक और मशीन पर एनएफएस के माध्यम से मुहिम शुरू की गई है, और अगर मैं बूट मशीन # 2 बूट करता हूं, जबकि ड्राइव नीचे है, तो यह समय समाप्त हो जाता है, और एनएफएस विभाजन माउंट नहीं होता है।
गाबा

1
ड्राइव स्पिन को कम नहीं होने देना इसके जीवनकाल को कम कर सकता है। मैं इसके बजाय टाइमआउट मुद्दे को संबोधित करने पर विचार करूंगा। मुझे बैकअप NAS के साथ पहले भी इसी तरह की समस्या थी और ऑटोमोटिव (जैसे ऑटोफिक्स) का उपयोग करके सुनिश्चित किया गया था कि सिस्टम टाइमआउट नहीं होगा और केवल डिस्क को स्पिन करेगा यदि माउंटपॉइंट (और ऑटो-माउंटेड) एक्सेस किया गया है।
unode

जवाबों:


4

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


8

बस मेरे 2 सेंट ...

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

मेरे पास एक बाहरी 2TB डिस्क है जो 30 मिनट की निष्क्रियता के बाद नीचे घूमती है। डिस्क का अर्थ 24/7 पर संचालित किया जाता है, जो एक ऑरेंज पीआई से जुड़े छोटे NAS के रूप में कार्य करने के लिए संचालित होता है।

मैंने निम्नलिखित udv नियम का उपयोग किया

/etc/udev/rules.d

(यह कभी भी काम नहीं करता क्योंकि स्पिन डाउन डिस्क फर्मवेयर में है)

SUBSYSTEM=="usb", TEST=="power/autosuspend" ATTR{power/autosuspend}="-1"

हालाँकि डिस्क समर्थन करती है

hdparm -B

मैंने एक छोटी सी डेमन प्रक्रिया लिखी जो बूट समय पर चल सकती है

/etc/rc.local

उस लॉग फ़ाइल में वर्तमान दिनांक और समय को 10 बार cicles में लिखता है ताकि डिस्क हमेशा चालू रहे। अपनी इच्छानुसार संशोधित करने के लिए स्वतंत्र महसूस करें।

कमांड लाइन विकल्प हैं: awake.log और (वैकल्पिक रूप से) लिखने के लिए समय देरी (डिफ़ॉल्ट 300) के लिए लक्ष्य निर्देशिका

जैसे

/usr/sbin/disk_awake /mnt/some_disk/keep_alive 30

कोड: (आप जीसीसी के साथ संकलन कर सकते हैं)

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <string.h>
#include <time.h>

int main(int argc, char* argv[])
{
FILE *fp=NULL;
pid_t process_id=0;
pid_t sid=0;
int secs=300;
char log_file[512];
time_t raw_time;
struct tm *time_info;
int ticks=0;
unsigned long step=1;

if (argc<2||argc>3)
{
 printf("Usage: %s target_directory [seconds]\n",argv[0]);
 exit(1);
}
if (strlen(argv[1])>500)
{
 printf("String length of target_directory is HUGE!\n");
 exit(1);
}
if (chdir(argv[1])<0)
{
 printf("Directory %s does not exist\n",argv[1]);
 exit(1);
}
strcpy(log_file,argv[1]);
strcat(log_file,"/awake.log");
if (!(fp=fopen(log_file,"w+")))
{
 printf("Could not open log file %s\n",log_file);
 exit(1);
}
if (!(argv[2]))
{
 printf("Delay argument not specified. Defaulting to 300 seconds\n");
 secs=300;
}
if (argv[2]&&(secs=atoi(argv[2]))<=0)
{
 printf("Could not parse delay option. Defaulting to 300 seconds\n");
 secs=300;
}
printf("Delay interval %d seconds\n",secs);
process_id=fork();
if (process_id<0)
{
printf("Could not fork()\n");
exit(1);
}
if (process_id>0)
{
printf("Started with pid %d\n", process_id);
exit(0);
}
umask(0);
sid=setsid();
if(sid<0)
{
printf("Could not setsid()\n");
exit(1);
}
close(STDIN_FILENO);
close(STDOUT_FILENO);
close(STDERR_FILENO);
while (1)
{
if (ticks==10)
{
 fclose(fp);
 if (!(fp=fopen(log_file,"w+"))) exit(1);
 ticks=0;step++;
}
time(&raw_time);
time_info=localtime(&raw_time);
fprintf(fp,"%s %lu : %s","Step",step,asctime(time_info));
fflush(fp);
ticks++;
sleep(secs);
}
fclose(fp);
return(0);
}

6
विशेष (C) कार्यक्रम की आवश्यकता क्यों है? सिर्फ एक क्रॉन जॉब ही क्यों ... `* / 15 * * * * तारीख / / mnt / डिस्क / .डेट '
स्टीफन ब्लाट

मैं लेनोवो T470p चला रहा हूं, बाहरी यूएसबी ड्राइव एक ऑर्को यूएसबी आवास के साथ। मैं USB से बूट कर रहा हूं, जैसे ही स्टैंडबाय शुरू होता है, डिवाइस केवल वेकअप पर पढ़ा जाता है। Udv.d कॉन्फ़िगरेशन ने मेरे लिए समस्या तय की।
thst

6

यह समाधान (लिनक्स के लिए) http://www.arrfab.net/blog/?p=107 से 1TB सीगेट पोर्टेबल ड्राइव के लिए मदद मिली है जो सोने के लिए जाती रही:

# sdparm --clear=STANDBY /dev/sdc -S

एक घंटे के लिए बेकार होने पर भी ड्राइव अब तुरंत उत्तरदायी है। अभी तक परीक्षण नहीं किया है कि क्या सेटिंग को पुनः आरंभ आदि में सहेजा गया है, हालांकि।


सूदो के बिना ऐसा करने पर कोई टिप?
कुंभ राशि

मेरा मानना है कि लिंक करने के लिए बदल गया है: arrfab.net/posts/2009/Jan/30/...
ईएसएम

4

मैंने पाया है कि निम्नलिखित क्रोनजोब मेरे लिए काम करता है।

* * 5 * * * * / बिन / स्पर्श / देव / एसडीबी और> / देव / अशक्त

स्पष्ट रूप से इसे अपने डिस्क के डिवाइस नाम के साथ अपडेट करें।

इससे पहले कि आप अपनी शक्तियों को निष्क्रिय कर दें, इसके आधार पर आप समय को अलग-अलग कर सकते हैं।


2

लिनक्स के लिए मैनुअलhdparm निम्नलिखित जानकारी प्रदान करता है:

-B  Query/set Advanced Power Management feature,
    if the drive supports it.
    A low value means aggressive  power  management
    and a high value means better performance.

    Possible settings range
    from values 1 through  127  (which  permit spin-down),
    and values 128 through 254 (which do not permit spin-down).

    The highest degree of  power  management
    is attained with a setting of 1,
    and the highest I/O performance with a setting of 254.

    A  value  of  255  tells hdparm to
    disable Advanced Power Management altogether on the drive
    (not all drives support disabling it, but  most do).

यह कहा जा रहा है, यह अभी भी गारंटी नहीं है कि आपका ड्राइव संलग्नक इन निर्देशों को ड्राइव में स्थानांतरित करने का समर्थन करेगा। एक ही संदर्भ में उल्लेख किया गया है कि एचडीपीआर को एक संलग्नक के साथ उपयोग करने में सक्षम होने के कारण केवल कुछ नए (2008 और बाद के) मॉडल के साथ संभव है जो SCSI-ATA कमांड ट्रांसलेशन सिस्टम, उर्फ ​​"SAT" का समर्थन करते हैं। मैंने अभी तक कुछ भी करने की कोशिश नहीं की है, लेकिन हाल ही में एक सस्ता बैकअप ड्राइव, एक एचपी सिंपलसेव मॉडल। यह कुछ सीमित शक्ति प्रबंधन कार्यक्षमता प्रदान करने के लिए लगता है।

और निश्चित रूप से यह भी मानता है कि ओपनबीएसडी hdparmउसी तरह से काम करता है। मैं OpenBSD के तरीकों के लिए बिल्कुल भी जानकार नहीं हूं, इसलिए मैं वहां आपकी मदद नहीं कर सकता।


1
Hdparm के बराबर OpenBSD है atactl। लेकिन मुझे नहीं पता कि यह USB उपकरणों पर काम करता है; (आईडीई डिस्क ड्राइवर मैन पेज) atactl(8)द्वारा संदर्भित है wd(4), लेकिन umass(4)(यूएसबी स्टोरेज ड्राइवर मैन पेज) द्वारा नहीं।
गिलेस एसओ- बुराई को रोकना '

मैं इसके साथ खेलने जा रहा हूँ, हालाँकि जब से USB ड्राइव / dev / sd * डिवाइस का उपयोग करके माउंट किया जाता है, मुझे यकीन नहीं है कि wd और atact एप्लीकेशन लागू होती है। कुछ पढ़ने / खेलने का समय।
गाबा

क्या आपको लगता है कि hdparmनींद को रोकने के लिए सुडो के बिना किसी तरह लूप में इस्तेमाल किया जा सकता है?
कुम्भ पावर

क्या आप इसके लिए hdparamडिफ़ॉल्ट मान जानते हैं -B [apm_setting]?
jyz
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.