USB harici sabit sürücünün uyku moduna geçmesini önleme


12

Harici bir usb sürücüye bir süre kullanılmadığında dönmemesini söylemenin zarif bir yolu olup olmadığını bilen var mı? Her dakika bir dosya yazan cron tabanlı çözümler gördüm, ancak güzel unixey zarafeti kokan hiçbir şey yoktu. Sorun değil bir hdparm veya scsi komutu (usb sürücüler OpenBSD sd sürücüsü üzerinden erişilir) sürücü için uyku değil söylemek gerekir. Bunun muhtemelen kasadaki denetleyicide yerleşik bir özellik olduğunu ve sürücüyü kasadan söküp doğrudan makineye yerleştirmekten başka bir şey değiştiremeyeceği için korkuyorum, ama soruyorum, kapalı şans.

İdeal olarak, ben bir OpenBSD çözümü arıyorum, ama ben orada aynı sorunu w / başkaları olduğunu biliyorum böylece herhangi bir çözüm cevap için dikkate alınacaktır.


1
Sadece sürücünün neden dönmesini istemediğini merak ediyorum.
tshepang

1
Şu an için, bu sürücüyü başka bir makinede NFS aracılığıyla monte ettim ve sürücü kapatılırken # 2 önyükleme yaparsam zaman aşımına uğrar ve NFS bölümü takılmaz.
gabe.

1
Sürücünün devrilmesine izin vermemek ömrünü kısaltabilir. Bunun yerine zaman aşımı sorununu ele almayı düşünürüm. Daha önce bir yedek NAS ile benzer bir sorun yaşadım ve bir autoounter (autofs gibi) kullanmak, sistemin zaman aşımına uğramamasını ve yalnızca bağlama noktasına erişildiğinde (ve otomatik olarak monte edildiğinde) diskleri döndürdüğünü garanti etti.
22'de unode

Yanıtlar:


4

Evet, genellikle yerleşik yazılımda yerleşiktir. Bazı sürücü üreticileri, "uyku" veya devre dışı bırakma zamanlayıcısı dahil olmak üzere çeşitli parametreleri değiştirmenize olanak tanıyan MS Windows tabanlı bir yönetim aracı sağlar. Bir Windows kutusuna erişiminiz varsa, bu açıyı izlemeye değer olabilir.


8

Sadece 2 sentim ...

Diskleri döndürmenin servis ömrünü kısalttığı doğrudur. Yılların tecrübesi, disk motorunun başlatılmasının ve durdurulmasının 7/24 dönüşten çok daha fazla yorgunluğa neden olduğunu göstermiştir. Büyük başlatma / durdurma sayısı olan tüm disklerim yeniden tahsis edilmiş sektörlere sahiptir ve 10/24 yıl dönen tüm disklerim yeni olsun (ister inanın ister inanmayın). Sonuçta, diskler boşta kalmak için değil eğirme için yapılır, bu nedenle önceliğiniz güç tüketiminden daha az yorgunluk ise disklerinizin 7/24 dönmesine izin vermeyin.

30 dakika işlem yapılmadığında dönen harici bir 2TB diskim var. Diskin yedekleme amaçları için 7/24 açık olması ve Turuncu PI'ya bağlı küçük bir NAS olarak kullanılması amaçlanmıştır.

Aşağıdaki udev kuralını

/etc/udev/rules.d

(Aşağı inmek diskler belleniminde olduğu için hiç işe yaramadı)

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

Her ne kadar disk

hdparm -B

Önyükleme zamanında çalışabilecek küçük bir daemon işlemi yazdım

/etc/rc.local

disk her zaman açık olması için bir günlük dosyasında geçerli tarih ve saati 10 kez döngü halinde yazar. İstediğiniz gibi değiştirmekten çekinmeyin.

Komut satırı seçenekleri şunlardır: awake.log yazılacak hedef dizin ve (isteğe bağlı olarak) gecikme süresi (varsayılan 300)

Örneğin

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

kod: (gcc ile derleyebilirsiniz)

#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
Neden özel (C) bir programa ihtiyaç var? Neden sadece bir cron işi değil ... `` / 15 * * * * tarih> / mnt / disk /. Tarih '
Stephen Blott

Orico USB muhafazalı bir Lenovo T470p harici USB sürücü kullanıyorum. USB'den önyükleme yapıyorum, bekleme başlar başlamaz cihaz yalnızca uyandığında okunuyor. Udev.d yapılandırması sorunu benim için düzeltti.
thst

6

Http://www.arrfab.net/blog/?p=107 adresindeki bu çözüm (Linux için), uyumaya devam eden 1 TB Seagate Portable diskine yardımcı oldu:

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

Sürücü bir saat boşta kaldığında bile anında tepki veriyor. Yine de, ayarın yeniden başlatmalar vb. Arasında kaydedilip kaydedilmediğini test etmedi.


sudo olmadan bunu yapmak için herhangi bir ipucu?
Kova Gücü

Bağlantının değiştiğine inanıyorum: arrfab.net/posts/2009/Jan/30/…
esm

4

Aşağıdaki cronjob benim için çalışıyor bulduk.

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

Açıkçası diskinizin aygıt adıyla güncelleyin.

Ayrıca, sürücünüzün kapanmadan önce ne kadar süre boşta kalacağını da değiştirebilirsiniz.


2

Linux için manuelhdparm şu bilgileri sunar:

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

Bununla birlikte, sürücü kasanızın bu yönergelerin sürücüye aktarılmasını destekleyeceği hala garanti edilmez. Aynı referans, hdparm'ı bir kasa ile kullanabilmenin sadece SCSI-ATA Komut Çeviri sistemini, yani "SAT" destekleyen bazı "daha yeni (2008 ve üstü)" modellerle mümkün olduğunu belirtiyor. Bunu henüz ucuz bir yedekleme sürücüsü olan HP SimpleSave modelinden başka bir şey üzerinde denemedim. Bazı sınırlı güç yönetimi işlevselliği sağlıyor gibi görünüyor.

Ve elbette bu da OpenBSD'nin hdparmaynı şekilde çalıştığını varsayar . Ben hiçbir şekilde OpenBSD konusunda bilgili değilim, bu yüzden orada size yardım edemem.


1
Hdparm'ın OpenBSD eşdeğeri atactl. Ama USB cihazlarda çalışıp çalışmadığını bilmiyorum; atactl(8)tarafından wd(4)(IDE disk sürücüsü kılavuz sayfası) referans verilir, ancak umass(4)(USB depolama sürücüsü kılavuz sayfası) tarafından referans verilmez .
Gilles 'SO- kötü olmayı bırak'

Bununla birlikte oynayacağım, ancak usb sürücüleri / dev / sd * cihazlarını kullanarak monte edildiğinden, wd ve atactl'ın uygulandığından emin değilim. Biraz okuma / oynama zamanı.
gabe.

hdparmuyku önlemek için sudo olmadan bir şekilde bir döngüde kullanılabileceğini düşünüyor musunuz?
Kova Gücü

İçin hdparamvarsayılan değeri biliyor musunuz -B [apm_setting]?
jyz
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.