Cegah agar hard drive eksternal USB tidak tertidur

12

Apakah ada yang tahu jika ada cara yang elegan untuk memberitahu drive usb eksternal untuk tidak berputar setelah periode tidak aktif? Saya telah melihat solusi berbasis cron yang menulis file setiap menit, tetapi tidak ada yang berbau keanggunan unik unixey. Harus ada hdparm, atau perintah scsi yang dapat saya keluarkan (drive usb diakses melalui driver sd di OpenBSD) ke drive untuk memerintahkannya agar tidak tidur. Saya khawatir ini mungkin fitur yang dibangun pada pengontrol di dalam enklosur, dan karena itu tidak banyak yang bisa mengubahnya selain merobek drive dari enklosurnya dan memasukkannya langsung ke dalam mesin, tetapi saya pikir saya akan bertanya, jika kebetulan.

Idealnya, saya mencari solusi OpenBSD, tapi saya tahu ada orang lain di luar sana w / masalah yang sama sehingga solusi apa pun akan dipertimbangkan untuk jawabannya.

gabe
sumber
1
Saya hanya ingin tahu mengapa Anda tidak ingin drive diturunkan.
tshepang
1
Nah, untuk saat ini, itu karena saya memiliki drive yang dipasang melalui NFS di komputer lain, dan jika saya mem-boot mesin # 2 saat drive diputar, itu timeout, dan partisi NFS tidak me-mount.
gabe.
1
Tidak membiarkan drive menurunkan kecepatan dapat mengurangi masa pakainya. Saya akan mempertimbangkan mengatasi masalah batas waktu sebagai gantinya. Saya punya masalah yang sama sebelumnya dengan cadangan NAS dan menggunakan automounter (seperti autofs) memastikan bahwa sistem tidak akan habis dan hanya memutar disk jika mountpoint diakses (dan terpasang secara otomatis).
unode

Jawaban:

4

Ya, ini umumnya dibangun di dalam firmware. Beberapa produsen drive menyediakan alat manajemen berbasis MS Windows yang akan memungkinkan Anda untuk memodifikasi berbagai parameter, termasuk menonaktifkan "sleep" atau timer spin down. Jika Anda memiliki akses ke kotak Windows mungkin layak untuk mengejar sudut itu.

mazianni
sumber
8

Hanya 2 sen saya ...

Adalah lebih dari benar bahwa memutar disk mengurangi masa pakai mereka. Pengalaman bertahun-tahun telah menunjukkan bahwa memulai dan menghentikan motor disk menyebabkan kelelahan yang jauh lebih besar daripada putaran 24/7. Semua disk saya dengan jumlah awal / henti yang besar telah merealokasi sektor dan semua disk saya yang berputar 10 tahun 24/7 (percaya atau tidak) bagus seperti baru. Lagi pula, disk dibuat untuk pemintalan, bukan untuk pemalasan, jadi jika prioritas Anda tidak terlalu lelah dibandingkan konsumsi daya, jangan ragu untuk membuat cakram Anda 24/7 berputar.

Saya memiliki disk 2TB eksternal yang berputar setelah 30 menit tidak aktif. Disk ini akan diaktifkan pada 24/7 untuk mencadangkan tujuan dan bertindak sebagai NAS kecil yang terpasang pada Orange PI.

Saya menggunakan aturan udev berikut di

/etc/udev/rules.d

(Tidak pernah berhasil karena spin-down ada dalam disk firmware)

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

Meskipun disk mendukung

hdparm -B

Saya menulis proses daemon kecil yang dapat berjalan saat boot di Windows 7

/etc/rc.local

yang menulis 10 kali dalam cicles tanggal dan waktu saat ini dalam file log sehingga disk selalu menyala. Jangan ragu untuk memodifikasi sesuka Anda.

Opsi baris perintah adalah: direktori target untuk menulis awake.log dan (secara opsional) penundaan waktu (default 300)

misalnya

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

kode: (Anda dapat mengkompilasi dengan 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);
}
Erebus
sumber
6
Mengapa perlu program khusus (C)? Mengapa bukan sekadar tugas cron ... `* / 15 * * * * date> / mnt / disk / .date`
Stephen Blott
Saya menjalankan Lenovo T470p, drive USB eksternal dengan rumah USB orico. Saya mem-boot dari USB, segera setelah siaga dimulai, perangkat hanya dapat dibaca saat bangun. Konfigurasi udev.d memperbaiki masalah ini untuk saya.
thst
6

Solusi ini (untuk Linux) dari http://www.arrfab.net/blog/?p=107 telah membantu untuk drive Seagate Portable 1TB yang terus tertidur:

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

Drive sekarang langsung responsif bahkan ketika dibiarkan menganggur selama satu jam. Namun belum menguji apakah pengaturan disimpan di restart ulang dll.

oliver
sumber
ada tip melakukan ini tanpa sudo?
Aquarius Power
Saya yakin tautannya telah berubah menjadi: arrfab.net/posts/2009/Jan/30/…
esm
4

Saya telah menemukan bahwa cronjob berikut bekerja untuk saya.

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

Jelas perbarui dengan nama perangkat disk Anda.

Anda juga dapat memvariasikan waktu berdasarkan berapa lama drive Anda diam sebelum dimatikan.

Steven
sumber
2

The pengguna untuk linux yanghdparm menyediakan info berikut:

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

Yang sedang berkata, itu masih tidak dijamin bahwa drive Anda akan mendukung menyampaikan instruksi ini ke drive. Referensi yang sama menyebutkan bahwa dapat menggunakan hdparm dengan penutup sama sekali hanya mungkin dengan model "baru (2008 dan selanjutnya)" tertentu yang mendukung sistem Terjemahan Terjemahan SCSI-ATA, alias "SAT". Saya belum pernah mencoba melakukan ini pada apa pun kecuali drive cadangan murah baru-baru ini, model HP SimpleSave. Tampaknya menyediakan beberapa fungsi manajemen daya yang terbatas.

Dan tentu saja ini juga mengasumsikan bahwa OpenBSD hdparmbekerja dengan cara yang sama. Saya sama sekali tidak tahu cara OpenBSD, jadi saya tidak dapat membantu Anda di sana.

intuisi
sumber
1
Setara dengan OpenBSD dari hdparm adalah atactl. Tapi saya tidak tahu apakah itu berfungsi pada perangkat USB; atactl(8)dirujuk oleh wd(4)(halaman manual driver disk IDE) tetapi tidak oleh umass(4)(halaman manual driver penyimpanan USB).
Gilles 'SANGAT berhenti menjadi jahat'
Saya akan bermain dengan ini, meskipun karena drive usb mount menggunakan perangkat / dev / sd *, saya tidak yakin wd dan atactl berlaku. Saatnya membaca / bermain.
gabe.
menurut Anda apakah hdparmbisa digunakan dalam satu lingkaran tanpa sudo untuk mencegah tidur?
Aquarius Power
Apakah Anda tahu hdparamnilai default untuk -B [apm_setting]?
jyz