USB外付けハードドライブがスリープしないようにする


12

非アクティブな期間の後にスピンダウンしないように外付けUSBドライブに指示するエレガントな方法があるかどうか誰かが知っていますか?私は、毎分ファイルを書き込むcronベースのソリューションを見てきましたが、素晴らしいunixeyの優雅さの香りはありません。スリープしないように指示するためにドライブに発行できるhdparmまたはscsiコマンドが必要です(USBドライブはOpenBSDのsdドライバーを介してアクセスされます)。これはおそらくエンクロージャ内のコントローラに組み込まれている機能であるため、ドライブをエンクロージャから取り外して直接マシンに配置することを除いて、それほど変更することはできないと思いますが、私は尋ねると思いました、オフチャンス。

理想的には、私はOpenBSDソリューションを探していますが、同じ問題を抱えている他の人がいることを知っているので、すべてのソリューションが回答として考慮されます。


1
ドライブがスピンダウンしたくないのはなぜだろう。
tshepang

1
さて、現時点では、そのドライブをNFS経由で別のマシンにマウントしているためです。ドライブが停止しているときにマシン#2を起動すると、タイムアウトになり、NFSパーティションがマウントされません。
ゲイブ。

1
ドライブをスピンダウンさせないと、ドライブの寿命が短くなる可能性があります。代わりに、タイムアウトの問題に対処することを検討します。以前にバックアップNASで同様の問題があり、オートマウンター(autofsなど)を使用して、マウントポイントがアクセス(および自動マウント)された場合にシステムがタイムアウトせず、ディスクのみをスピンアップすることを確認しました。
unode

回答:


4

ええ、それは一般的にファームウェアに組み込まれています。一部のドライブメーカーは、「スリープ」やスピンダウンタイマーの無効化など、さまざまなパラメーターを変更できるMS Windowsベースの管理ツールを提供しています。Windowsボックスにアクセスできる場合は、その角度を追求する価値があります。


8

ちょうど私の2セント...

ディスクをスピンダウンすると、サービスの寿命が短くなることは事実以上です。長年の経験から、ディスクモーターの起動と停止により、24時間年中無休のスピンよりもはるかに多くの疲労が発生することがわかっています。開始/停止の数が多いすべてのディスクにセクターが再割り当てされており、24時間年中無休で10年回転するすべてのディスクは、(信じられないかもしれませんが)新品同様です。結局のところ、ディスクはアイドリング用ではなく回転用に作られているため、電力消費よりも疲労が少ない場合は、ディスクを24時間年中無休で自由に回転させることができます。

30分間何も操作しないとスピンダウンする外部2TBディスクがあります。このディスクは、バックアップの目的で24時間年中無休で電源を入れ、Orange PIに接続された小さなNASとして機能することを目的としています。

私は次のudevルールを使用しました

/etc/udev/rules.d

(スピンダウンはディスクファームウェアにあるため、機能しませんでした)

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

ディスクはサポートしていますが

hdparm -B

起動時に実行できる小さなデーモンプロセスを

/etc/rc.local

これは、現在の日付と時刻をログファイルに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);
}

6
なぜ特別な(C)プログラムが必要なのですか?なぜcronジョブだけではないのですか... `* / 15 * * * * date> / mnt / disk / .date`
Stephen Blott

Lenovo T470p、外付けUSBドライブ、orico USBハウジングを使用しています。USBから起動していますが、スタンバイが開始するとすぐに、デバイスはウェイクアップ時に読み取り専用になります。udev.d構成で問題が解決しました。
2018年

6

http://www.arrfab.net/blog/?p=107からのこのソリューション(Linuxの場合)は、スリープ状態になり続ける1TB Seagateポータブルドライブに役立ちました。

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

ドライブは1時間アイドル状態のままでもすぐに応答します。ただし、再起動などで設定が保存されるかどうかはまだテストしていません。


sudoなしでこれを行うためのヒント?
Aquarius Power

:私は、リンクがに変更されていると信じてarrfab.net/posts/2009/Jan/30/...
ESM

4

次のcronjobがうまくいくことがわかりました。

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

もちろん、ディスクのデバイス名で更新してください。

また、ドライブの電源が切れるまでのアイドル時間に基づいて時間を変更することもできます。


2

Linuxhdparmマニュアルには、次の情報が記載されています。

-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
OpenBSDでhdparmに相当するものはですatactl。しかし、USBデバイスで動作するかどうかはわかりません。(IDEディスクドライバーのマニュアルページ)ではatactl(8)参照されwd(4)ますが、umass(4)(USBストレージドライバーのマニュアルページ)では参照されません。
Gilles「SO-邪悪なことをやめなさい」

これで遊んでみますが、/ dev / sd *デバイスを使用してUSBドライブをマウントするため、wdとatactlが適用されるかどうかはわかりません。読書/再生を行う時間。
ゲイブ。

あなたはhdparm睡眠を防ぐためにsudoなしで何らかの方法でループで使用できると思いますか?
Aquarius Power

hdparamデフォルト値を知っています-B [apm_setting]か?
jyz 2016
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.