ป้องกันไม่ให้ฮาร์ดไดรฟ์ภายนอก USB เข้าสู่โหมดสลีป


12

ไม่มีใครรู้ว่ามีวิธีที่สวยงามที่จะบอกไดรฟ์ usb ภายนอกที่จะไม่หมุนลงหลังจากไม่มีการใช้งานเป็นระยะเวลาหนึ่งหรือไม่? ฉันได้เห็นโซลูชันที่ใช้ cron ที่เขียนไฟล์ทุกนาที แต่ไม่มีอะไรที่มีกลิ่นของความสง่างามของยูนิกซ์ที่ดี จะต้องมีคำสั่ง hdparm หรือคำสั่ง scsi ที่ฉันสามารถออกได้ (ไดรฟ์ usb เข้าถึงได้ผ่านทางไดรเวอร์ sd ใน OpenBSD) ไปยังไดรฟ์เพื่อบอกให้ไม่นอน ฉันกลัวว่านี่อาจเป็นคุณสมบัติที่ติดตั้งไว้ในคอนโทรลเลอร์ในกล่องหุ้มและสิ่งนี้ไม่สามารถเปลี่ยนแปลงได้นอกเหนือจากการฉีกไดรฟ์ออกจากกล่องหุ้มและลอกมันเข้าไปในเครื่องโดยตรง แต่ฉันคิดว่าฉันจะถาม เมื่อมีโอกาส

เป็นการดีที่ฉันกำลังมองหาวิธีแก้ปัญหา OpenBSD แต่ฉันรู้ว่ามีคนอื่น ๆ ที่นั่นด้วยปัญหาเดียวกันดังนั้นคำตอบใด ๆ จะได้รับการพิจารณาสำหรับคำตอบ


1
ฉันแค่อยากรู้ว่าทำไมคุณไม่ต้องการให้ไดรฟ์หมุน
tshepang

1
ทีนี้ก็เพราะฉันมีไดรฟ์นั้นติดตั้งผ่าน NFS บนเครื่องอื่นและถ้าฉันบู๊ตเครื่อง # 2 ในขณะที่ไดรฟ์หมุนลงมันจะหมดเวลาและพาร์ติชัน NFS ก็ไม่ได้เมานต์
เกบ

1
การไม่ปล่อยให้ไดรฟ์หมุนลงอาจทำให้อายุการใช้งานลดลง ฉันจะพิจารณาแก้ไขปัญหาการหมดเวลาแทน ฉันมีปัญหาที่คล้ายกันก่อนกับ NAS สำรองและใช้ automounter (เช่น autofs) ทำให้มั่นใจได้ว่าระบบจะไม่หมดเวลาและหมุนดิสก์เฉพาะเมื่อเข้าถึงจุดเมานท์ (และติดตั้งอัตโนมัติ)
เปิดทำการ

คำตอบ:


4

ใช่มันสร้างโดยทั่วไปในเฟิร์มแวร์ ผู้ผลิตไดรฟ์บางรายมีเครื่องมือการจัดการที่ใช้ MS Windows ซึ่งจะช่วยให้คุณสามารถแก้ไขพารามิเตอร์ต่าง ๆ รวมถึงการปิดใช้งาน "สลีป" หรือตัวจับเวลาแบบหมุนลง หากคุณมีสิทธิ์เข้าถึงกล่อง Windows อาจคุ้มค่าที่จะทำตามมุมนั้น


8

แค่ 2 เซ็นต์ของฉัน ...

มันยิ่งกว่าความจริงที่การหมุนดิสก์จะลดอายุการใช้งาน ประสบการณ์หลายปีแสดงให้เห็นว่าการเริ่มและหยุดมอเตอร์ดิสก์ทำให้เกิดความล้ามากกว่าปั่นหมาด 24/7 ดิสก์ของฉันทั้งหมดที่มีขนาดเริ่มต้น / หยุดขนาดใหญ่มีการจัดสรรเซ็กเตอร์และดิสก์ทั้งหมดของฉันที่หมุนรอบ 10 ปี 24/7 จะเชื่อว่าดีหรือใหม่ ท้ายที่สุดแล้วดิสก์ถูกสร้างขึ้นมาเพื่อการหมุนไม่ใช่เพื่อการไม่ทำงานดังนั้นหากคุณให้ความสำคัญกับความเหนื่อยล้าน้อยกว่าการใช้พลังงานโปรดอย่าลังเลที่จะให้ดิสก์ของคุณหมุนวนตลอดเวลา

ฉันมีดิสก์ 2TB ภายนอกที่หมุนลงหลังจากไม่มีการใช้งานเป็นเวลา 30 นาที ดิสก์นั้นใช้พลังงานจาก 24/7 เพื่อสำรองข้อมูลและทำหน้าที่เป็น NAS ขนาดเล็กที่ติดอยู่กับ Orange PI

ฉันใช้กฎ 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

ฉันใช้ Lenovo T470p, ไดรฟ์ USB ภายนอกที่มีตัวเรือน orico USB ฉันกำลังบูทจาก USB ทันทีที่สแตนด์บายเริ่มทำงานอุปกรณ์จะอ่านได้เฉพาะเมื่อปลุก การกำหนดค่า udev.d แก้ไขปัญหาสำหรับฉันแล้ว
THST

6

โซลูชันนี้ (สำหรับ Linux) จากhttp://www.arrfab.net/blog/?p=107ได้ช่วยสำหรับไดรฟ์พกพา Seagate 1TB ซึ่งยังคงหลับอยู่:

# 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 กับสิ่งที่แนบมานั้นเป็นไปได้เฉพาะกับรุ่น "ใหม่กว่า (2008 และใหม่กว่า)" ที่รองรับระบบการแปลคำสั่ง SCSI-ATA หรือที่รู้จักว่า "SAT" ฉันยังไม่ได้ลองทำอะไรเลยนอกจากไดรฟ์สำรองราคาถูกรุ่น HP SimpleSave ดูเหมือนว่าจะมีฟังก์ชันการจัดการพลังงานที่ จำกัด

และแน่นอนว่านี่ก็ถือว่าhdparmงานของ OpenBSD ในลักษณะเดียวกัน ฉันไม่มีความรู้ในทางของ OpenBSD เลยดังนั้นฉันไม่สามารถช่วยคุณได้


1
เทียบเท่า OpenBSD ของ hdparm atactlคือ แต่ฉันไม่รู้ว่ามันใช้งานได้กับอุปกรณ์ USB หรือไม่ atactl(8)ถูกอ้างถึงโดยwd(4)(หน้า man ไดรเวอร์ดิสก์ IDE) แต่ไม่ใช่โดยumass(4)(หน้า man ไดรเวอร์ของที่เก็บข้อมูล USB)
Gilles 'หยุดความชั่วร้าย'

ฉันจะเล่นกับสิ่งนี้แม้ว่าจะมีไดรฟ์ usb ติดตั้งโดยใช้อุปกรณ์ / dev / sd * ฉันไม่แน่ใจว่าจะใช้ wd และ atactl ใช้เวลาในการอ่าน / เล่น
เกบ

คุณคิดว่าhdparmสามารถใช้ในวงในบางวิธีโดยไม่ต้อง sudo เพื่อป้องกันการนอนหลับ?
กุมภ์กำลัง

คุณรู้hdparamค่าเริ่มต้น-B [apm_setting]ใช่หรือไม่
jyz
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.