बस मेरे 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);
}