USB 외장 하드 드라이브가 잠자 지 않도록 방지


12

일정 기간 동안 사용하지 않으면 외장 USB 드라이브가 회전하지 않도록 지시하는 우아한 방법이 있는지 아는 사람이 있습니까? 매분마다 파일을 작성하는 크론 기반 솔루션을 보았지만 멋진 unixey 우아함을 느끼는 것은 없습니다. 잠들지 않도록 드라이브에 발행 할 수있는 hdparm 또는 scsi 명령이 있어야합니다 (usb 드라이브는 OpenBSD의 sd 드라이버를 통해 액세스 됨). 이것은 아마도 인클로저의 컨트롤러에 내장 된 기능 일 것이므로 두려워합니다 . 인클로저에서 드라이브를 추출하고 기계에서 직접 플로 핑하는 것 외에는 크게 변경할 수는 없습니다. 오프 기회에.

이상적으로는 OpenBSD 솔루션을 찾고 있지만 같은 문제가있는 다른 사람들이 있으므로 모든 솔루션을 답으로 고려할 것입니다.


1
나는 왜 당신이 드라이브가 스핀 다운되는 것을 원하지 않는지 궁금합니다.
tshepang

1
글쎄, 현재 다른 드라이브에 NFS를 통해 드라이브를 마운트했기 때문에 드라이브가 회전하는 동안 2 번 머신을 부팅하면 시간이 초과되고 NFS 파티션이 마운트되지 않기 때문입니다.
개브.

1
드라이브를 스핀 다운시키지 않으면 수명이 단축 될 수 있습니다. 대신 시간 초과 문제를 해결하는 것이 좋습니다. 백업 NAS와 비슷한 문제가 있었고 autofs와 같은 자동 마운터를 사용하면 마운트 포인트에 액세스하고 자동 마운트 된 경우 시스템이 시간 초과되지 않고 디스크를 회전시킬 수 있습니다.
unode

답변:


4

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


8

내 2 센트 만 ...

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

30 분 동안 활동이 없으면 회전하는 외부 2TB 디스크가 있습니다. 디스크는 백업을 목적으로하고 주황색 PI에 연결된 작은 NAS의 역할을하기 위해 연중 무휴 24 시간 전원이 공급됩니다.

나는 다음 udev 규칙을 사용했다.

/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

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

6
특별한 (C) 프로그램이 필요한 이유는 무엇입니까? 왜 cron 작업이 아닌가?`* / 15 * * * * date> / mnt / disk / .date`
Stephen Blott

orico USB 하우징이있는 외장형 USB 드라이브 인 Lenovo T470p를 실행하고 있습니다. 대기 모드가 시작 되 자마자 장치가 깨우면 읽기 전용 상태가됩니다. udev.d 구성으로 인해 문제가 해결되었습니다.
thst

6

http://www.arrfab.net/blog/?p=107 의이 솔루션 (Linux 용)은 계속 잠자기 상태가되는 1TB Seagate 휴대용 드라이브에 도움이되었습니다.

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

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


sudo 없이이 작업을 수행하는 데 도움이되는 팁이 있습니까?
물병 자리 힘

링크가 다음과 같이 변경되었다고 생각합니다. arrfab.net/posts/2009/Jan/30/…
esm

4

다음 cronjob이 저에게 효과적이라는 것을 알았습니다.

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

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

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


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

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

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


1
hdparm과 동등한 OpenBSD는 atactl입니다. 그러나 USB 장치에서 작동하는지 모르겠습니다. (IDE 디스크 드라이버 매뉴얼 페이지) atactl(8)는 참조 wd(4)하지만 umass(4)(USB 스토리지 드라이버 매뉴얼 페이지) 는 참조 하지 않습니다 .
Gilles 'SO- 악마 그만해'

USB 드라이브가 / dev / sd * 장치를 사용하여 마운트되므로 wd 및 atactl이 적용되는지 확실하지 않습니다. 독서 / 놀이를 할 시간입니다.
개브.

hdparm수면을 막기 위해 어떤 방법으로도 루프없이 루프에서 사용될 수 있다고 생각 하십니까?
물병 자리 힘

hdparam기본값 을 알고 -B [apm_setting]있습니까?
jyz
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.