Chỉ 2 xu của tôi ...
Điều đúng hơn là việc quay xuống các đĩa làm giảm tuổi thọ của chúng. Nhiều năm kinh nghiệm đã chỉ ra rằng khởi động và dừng động cơ đĩa gây ra sự mệt mỏi hơn nhiều so với quay 24/7. Tất cả các đĩa của tôi có số lượng bắt đầu / dừng lớn đều có các khu vực được phân bổ lại và tất cả các đĩa của tôi hoạt động 10 năm 24/7 đều (tin hay không) tốt như mới. Rốt cuộc, các đĩa được tạo ra để quay không phải để chạy không tải, vì vậy nếu ưu tiên của bạn ít mệt mỏi hơn mức tiêu thụ điện, hãy thoải mái để đĩa của bạn quay 24/7.
Tôi có một đĩa 2TB bên ngoài quay xuống sau 30 phút không hoạt động. Đĩa có nghĩa là được cấp nguồn 24/7 để sao lưu các mục đích và hoạt động như một NAS nhỏ gắn liền với Orange PI.
Tôi đã sử dụng quy tắc udev sau đây trong
/etc/udev/rules.d
(Nó không bao giờ hoạt động khi spin down nằm trong firmware firmware)
SUBSYSTEM=="usb", TEST=="power/autosuspend" ATTR{power/autosuspend}="-1"
Mặc dù đĩa hỗ trợ
hdparm -B
Tôi đã viết một tiến trình daemon nhỏ có thể chạy khi khởi động trong
/etc/rc.local
ghi 10 lần vào các ngày và thời gian hiện tại trong một tệp nhật ký để đĩa luôn được bật. Hãy thoải mái sửa đổi theo ý muốn.
Các tùy chọn dòng lệnh là: thư mục đích để viết awake.log và (tùy chọn) thời gian trễ (mặc định 300)
ví dụ
/usr/sbin/disk_awake /mnt/some_disk/keep_alive 30
mã: (bạn có thể biên dịch với gcc)
#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);
}