Ngăn không cho ổ cứng gắn ngoài USB ngủ


12

Có ai biết nếu có một cách thanh lịch để nói với một ổ đĩa USB bên ngoài không quay xuống sau một thời gian không hoạt động? Tôi đã thấy các giải pháp dựa trên cron viết một tập tin mỗi phút, nhưng không có gì có mùi của sự thanh lịch đẹp mắt. Phải có một lệnh hdparm hoặc scsi mà tôi có thể phát hành (ổ đĩa USB được truy cập thông qua trình điều khiển sd trong OpenBSD) để ổ đĩa bảo nó không ngủ. Tôi e rằng đây có lẽ là một tính năng được tích hợp trong bộ điều khiển trong vỏ và vì vậy không có gì có thể thay đổi nó ngoài việc xé ổ đĩa ra khỏi vỏ và cắm trực tiếp vào máy, nhưng tôi đoán tôi sẽ hỏi, vào cơ hội tắt.

Lý tưởng nhất là tôi đang tìm kiếm một giải pháp OpenBSD, nhưng tôi biết có những giải pháp khác ngoài đó với cùng một vấn đề nên mọi giải pháp sẽ được xem xét cho câu trả lời.


1
Tôi chỉ tò mò tại sao bạn không muốn ổ đĩa quay xuống.
tshepang

1
Chà, hiện tại, đó là vì tôi đã gắn ổ đĩa đó qua NFS trên một máy khác và nếu tôi khởi động máy số 2 trong khi ổ đĩa bị hỏng, nó sẽ hết thời gian và phân vùng NFS không gắn kết.
gabe.

1
Không để ổ đĩa quay xuống có thể làm giảm tuổi thọ của nó. Tôi sẽ xem xét giải quyết vấn đề thời gian chờ thay thế. Tôi đã gặp một vấn đề tương tự trước đây với một NAS dự phòng và sử dụng một bộ đếm tự động (chẳng hạn như autofs) đảm bảo rằng hệ thống sẽ không hết thời gian và chỉ quay các ổ đĩa nếu điểm truy cập được truy cập (và tự động gắn).
giải mã

Câu trả lời:


4

Vâng, nó thường được tích hợp vào phần sụn. Một số nhà sản xuất ổ đĩa cung cấp một công cụ quản lý dựa trên MS Windows sẽ cho phép bạn sửa đổi các thông số khác nhau, bao gồm vô hiệu hóa "chế độ ngủ" hoặc hẹn giờ quay xuống. Nếu bạn có quyền truy cập vào một hộp Windows, có thể đáng để theo đuổi góc độ đó.


7

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);
}

5
Tại sao cần một chương trình (C) đặc biệt? Tại sao không chỉ là một công việc định kỳ ... `* / 15 * * * * ngày> / mnt / đĩa / .date`
Stephen Blott

Tôi đang chạy Lenovo T470p, ổ USB ngoài có vỏ USB orico. Tôi đang khởi động từ USB, ngay khi chế độ chờ bắt đầu, thiết bị chỉ đọc khi thức dậy. Cấu hình udev.d đã khắc phục sự cố cho tôi.
thst

6

Giải pháp này (dành cho Linux) từ http://www.arrfab.net/blog/?p=107 đã giúp cho ổ đĩa Seagate Portable 1TB tiếp tục đi ngủ:

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

Ổ đĩa ngay lập tức phản hồi ngay cả khi không hoạt động trong một giờ. Mặc dù vậy, vẫn chưa kiểm tra xem cài đặt có được lưu trong quá trình khởi động lại hay không.


Bất cứ lời khuyên để làm điều này mà không sudo?
Sức mạnh Bảo Bình

Tôi tin rằng các liên kết đã thay đổi để: arrfab.net/posts/2009/Jan/30/...
ESM

4

Tôi đã tìm thấy rằng các cronjob sau đây làm việc cho tôi.

* / 5 * * * * / bin / chạm / dev / sdb &> / dev / null

Rõ ràng cập nhật nó với tên thiết bị của đĩa của bạn.

Bạn cũng có thể thay đổi thời gian dựa trên thời gian ổ đĩa của bạn không hoạt động trước khi tắt nguồn.


2

Các hướng dẫn cho các Linuxhdparm cung cấp các thông tin sau đây:

-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).

Điều đó đang được nói, vẫn không đảm bảo rằng vỏ ổ đĩa của bạn sẽ hỗ trợ chuyển tiếp các hướng dẫn này vào ổ đĩa. Tham chiếu tương tự đề cập đến việc có thể sử dụng hdparm với vỏ bọc hoàn toàn chỉ có thể với một số mô hình "mới hơn (2008 trở lên)" hỗ trợ hệ thống dịch lệnh lệnh SCSI-ATA, còn gọi là "SAT". Tôi vẫn chưa thử làm điều này trên bất cứ thứ gì ngoại trừ một ổ đĩa sao lưu giá rẻ gần đây, một mẫu HP SimpleSave. Nó dường như cung cấp một số chức năng quản lý năng lượng hạn chế.

Và tất nhiên, điều này cũng cho rằng OpenBSD hdparmhoạt động theo cùng một cách. Tôi hoàn toàn không am hiểu về các cách của OpenBSD, vì vậy tôi không thể giúp bạn ở đó.


1
Tương đương OpenBSD của hdparm là atactl. Nhưng tôi không biết nếu nó hoạt động trên các thiết bị USB; atactl(8)được tham chiếu bởi wd(4)(trang man trình điều khiển đĩa IDE) nhưng không phải bởi umass(4)(trang man trình điều khiển lưu trữ USB).
Gilles 'SO- ngừng trở nên xấu xa'

Tôi sẽ chơi với điều này, mặc dù vì các ổ đĩa USB gắn kết sử dụng các thiết bị / dev / sd *, tôi không chắc chắn áp dụng wd và atactl. Thời gian để làm một số đọc / chơi.
gabe.

Bạn có nghĩ rằng hdparmcó thể được sử dụng trong một vòng lặp theo cách nào đó mà không sudo để ngăn chặn giấc ngủ?
Sức mạnh Bảo Bình

Bạn có biết hdparamgiá trị mặc định cho -B [apm_setting]?
jyz
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.