it-swarm-ko.tech

USB 외장 하드 드라이브의 절전 모드 방지

일정 기간 동안 사용하지 않으면 외부 USB 드라이브가 회전하지 않도록 말하는 우아한 방법이 있는지 아는 사람이 있습니까? 매분 파일을 작성하는 cron 기반 솔루션을 보았지만 Nice unixey 우아함의 냄새는 없습니다. hdparm 또는 scsi 명령이 있어야합니다 (USB 드라이브는 OpenBSD에서 sd 드라이버를 통해 액세스 됨). 나는 이것이 아마도 Enclosure의 컨트롤러에 내장 된 feature 일까 두렵습니다. 따라서 Enclosure에서 드라이브를 추출하여 기계에 직접 plopping하는 것 외에는 크게 변경할 수 없습니다. 그러나 나는 기회가 없을 때 물어볼 것이라고 생각했습니다.

이상적으로는 OpenBSD 솔루션을 찾고 있지만 동일한 문제를 가진 다른 솔루션이 있다는 것을 알고 있으므로 모든 솔루션이 대답을 고려할 것입니다.

12
gabe.

예, 일반적으로 펌웨어에 내장되어 있습니다. 일부 드라이브 제조업체는 "휴면"또는 스핀 다운 타이머 비활성화를 포함하여 다양한 매개 변수를 수정할 수있는 MS Windows 기반 관리 도구를 제공합니다. Windows 상자에 액세스 할 수 있다면 그 각도를 추구하는 것이 좋습니다.

4
mazianni

내 2 센트 만 ...

디스크를 회전 시키면 서비스 수명이 줄어든다는 것은 사실입니다. 수년간의 경험에 따르면 디스크 모터를 시작하고 중지하면 24/7 스핀보다 훨씬 더 많은 피로가 발생합니다. 시작/중지 횟수가 큰 모든 디스크에는 섹터가 재 할당되었으며 10 년 연중 무휴 24 시간 회전하는 모든 디스크는 새 디스크처럼 (믿거 나 말거나) 좋습니다. 결국 디스크는 유휴 상태가 아닌 회전을 위해 만들어 졌으므로 전력 소비보다 피로가 적은 경우 디스크를 연중 무휴 24 시간 회전 할 수 있습니다.

30 분 동안 사용하지 않으면 회전하는 외부 2TB 디스크가 있습니다. 디스크는 백업 목적으로 연중 무휴 전원이 켜져 있고 Orange PI에 연결된 작은 NAS) 역할을합니다.

다음 udev 규칙을 사용했습니다.

/etc/udev/rules.d

(스핀 다운이 디스크 펌웨어에 있으므로 작동하지 않음)

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

디스크가

hdparm -B

부팅시 실행할 수있는 작은 데몬 프로세스를 작성했습니다.

/etc/rc.local

디스크가 항상 켜져 있도록 로그 파일에 현재 날짜와 시간을 cicles에 10 번 기록합니다. 원하는대로 자유롭게 수정하십시오.

명령 줄 옵션은 다음과 같습니다 : awake.log를 작성할 대상 디렉터리 및 (선택 사항) 시간 지연 (기본값 300)

예 :.

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

코드 : (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);
}
7
Erebus

http://www.arrfab.net/blog/?p=107 의이 솔루션 (Linux 용)은 계속 절전 모드를 유지하는 1TB Seagate 휴대용 드라이브를 지원했습니다.

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

이제 드라이브는 한 시간 동안 유휴 상태로 두어도 즉시 응답합니다. 그래도 다시 시작하는 동안 설정이 저장되는지 여부는 아직 테스트하지 않았습니다.

6
oliver

다음 cronjob이 나를 위해 작동한다는 것을 발견했습니다.

*/5 * * * */bin/touch/dev/sdb &>/dev/null

분명히 디스크의 장치 이름으로 업데이트하십시오.

전원이 꺼지기 전에 드라이브가 유휴 상태에있는 시간에 따라 시간을 변경할 수도 있습니다.

4
Steven

Linux 용 설명서 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).

즉, 드라이브 인클로저가 이러한 명령을 드라이브에 전달하는 것을 지원할 것이라는 보장은 없습니다. 동일한 참조에서는 인클로저와 함께 hdparm을 사용할 수 있다는 것이 SCSI-ATA 명령 변환 시스템 (일명 "SAT")을 지원하는 특정 "최신 (2008 이상)"모델에서만 가능하다고 언급합니다. 나는 최근의 저렴한 백업 드라이브 인 HP SimpleSave 모델을 제외하고는 아직이 작업을 시도하지 않았습니다. 제한된 전원 관리 기능을 제공하는 것 같습니다.

물론 이것은 OpenBSD의 hdparm도 같은 방식으로 작동한다고 가정합니다. 나는 OpenBSD의 방식에 대해 전혀 알지 못하기 때문에 거기에서 당신을 도울 수 없습니다.

2
intuited