ฉันจะรันคำสั่ง hdparm ได้อย่างไรหลังจากการบู๊ตและทำต่อใน Fedora 19


10

ฉันซื้อ HD ใหม่ (WD5000BPVT) ซึ่งน่าเสียดายที่พยายามหลับทุก 5-8 วินาที เสียงการคลิกไม่เพียงได้ยินเสียงค่อนข้างชัดเจน แต่เวลาการปั่น 1 วินาทีจะเพิ่มความหน่วงแฝงที่เห็นได้ชัดเจนในการใช้งานแบบวันต่อวัน

ฉันพบว่าhdparm -B 254 /dev/sdaจะปิดใช้งานการนอนหลับสั้น ๆ แต่ฉันไม่รู้วิธีบังคับใช้การตั้งค่านี้ทุกครั้งที่เปิดไดรฟ์ dconf-editorและ 'การตั้งค่าการจัดการพลังงาน' ปพลิเคชันทั้งสองไม่มีอะไรที่ต้องทำในเรื่องเกี่ยวกับการตั้งค่า HD ที่มี ฉันไม่มีเส้นทาง/etc/hdparmหรือ /etc/acpiMATE เป็นผู้จัดการหน้าต่าง

ใน Fedora 19 ฉันจะบังคับให้คำสั่งนี้ทำงานเมื่อใดก็ตามที่เปิดใช้งานไดรฟ์

คำตอบ:


12

ฉันมีปัญหาเดียวกันไม่มีวิธีแก้ไขที่ตรงกับความต้องการของฉัน การใช้ cron นั้นเป็นวิธีการแก้ปัญหาไม่ใช่วิธีแก้ปัญหากฎ udev จะทำงานเมื่อมีการเชื่อมต่อ / ตัดการเชื่อมต่อพลังงาน แต่ไม่ใช่หลังจากหยุดชั่วคราว / ทำงานต่อและpm-utilsไม่ได้ใช้งานเป็นค่าเริ่มต้นใน Fedora 19 เมื่อคุณปิดฝาแล็ปท็อปของคุณ

เนื่องจากsystemdตอนนี้มีหน้าที่รับผิดชอบในการระงับ / จำศีลฉันคิดว่าวิธีที่เหมาะสมในการจัดการกับสถานการณ์นี้คือการสร้างsystemdหน่วยที่จะทำงานทั้งหลังจากบูตและหลังจากกลับมาทำงานจากการหยุดชั่วคราว

หมายเหตุ:

  • โดยการใช้/dev/disk/by-id/...แทนคุณ/dev/sdaจะได้รับดิสก์ที่ถูกต้องเสมอ (sda, b, c ขึ้นอยู่กับลำดับที่เคอร์เนลตรวจพบ)
  • คุณสามารถมีหลายExecStartบรรทัดเพื่อให้คุณสามารถกำหนดค่าหลายดิสก์

นี่คือหน่วยที่ฉันเขียน:

[Unit]
Description=Silence HD
After=suspend.target

[Service]
Type=oneshot
# Disable automatic head parking for the main disk
ExecStart=/sbin/hdparm -B 254 /dev/disk/by-id/ata-ST3250824AS_4N127FD1
# Enable automatic spin down after 30 seconds for the second, infrequently used disk
ExecStart=/sbin/hdparm -S 6 /dev/disk/by-id/ata-ST31000528AS_BVP5H5X1

[Install]
WantedBy=suspend.target basic.target

บันทึกไฟล์นี้เป็น/etc/systemd/system/hdsilence.serviceแล้วเปิดใช้งานโดยใช้:

systemctl enable hdsilence.service
systemctl daemon-reload

ใช้งานได้ดีที่นี่ใน Fedora 20 ด้วย ขอบคุณ!
Jakob

ดังนั้นสิ่งนี้ทำให้การเปลี่ยนแปลง /etc/hdparm.conf ล้าสมัย?
domih

@domih: เท่าที่ฉันสามารถบอก hdparm.conf เป็นสิ่ง Debian และไม่ได้รับการสนับสนุนใน Fedora
Krzysztof Adamski

6

คุณสามารถให้ระบบรันคำสั่งระหว่างการบู๊ตโดยการสร้างเซอร์วิส systemd ของคุณเองหรือเพิ่มคำสั่งไปยัง /etc/rc.d/rc.local

หากคุณต้องการให้คำสั่งรันทุกครั้งที่คุณปลุกระบบหลังจาก sleep / hibernate คุณสามารถเพิ่มสคริปต์ที่เริ่มต้นด้วย 2 หลักไปที่ /etc/pm/sleep.d/ ดูสคริปต์อื่น ๆ ใน / usr / lib64 / pm-utils / sleep.d (สมมติว่า x86_64) สำหรับรายละเอียดเพิ่มเติม โดยทั่วไปจะใช้พารามิเตอร์ขึ้นอยู่กับสถานะที่จะเข้า คุณอาจต้องเพิ่มการเข้าสู่ระบบบางอย่างใน power.d / ในไดเรกทอรีหลักเดียวกันหากคุณต้องการใช้พลังงานแบตเตอรีที่แตกต่างกันเมื่อเทียบกับเมื่อเสียบปลั๊ก


1
creating your own systemd serviceคุณเจาะจงมากขึ้นได้ไหม ฉันไม่มีไฟล์ /etc/rc.d/rc.local
Pete

1
เอกสาร systemdอธิบายไวยากรณ์ของหน่วยบริการ systemd /etc/rc.d/rc.localไฟล์เป็นเพียงสคริปต์เปลือก, สร้างมันขึ้นมาและให้แน่ใจว่าปฏิบัติการของ
jsbillings

3

สำหรับการตั้งค่าที่แตกต่างกันเมื่อทำงานกับ AC / แบตเตอรี่ฉันจะทำผ่านudevกฎง่าย ๆเช่น
/etc/udev/rules.d/98-apmsettings.rules:

SUBSYSTEM=="power_supply", ENV{POWER_SUPPLY_ONLINE}=="0", RUN+="/usr/bin/hdparm -B 128 /dev/sda"
SUBSYSTEM=="power_supply", ENV{POWER_SUPPLY_ONLINE}=="1", RUN+="/usr/bin/hdparm -B 254 /dev/sda"

นี้จะตั้งapmเพื่อ254แล็ปท็อปที่มีการเสียบปลั๊กและตามลำดับ128เมื่อถอดออก นอกจากนี้ยังควรใช้งานได้แม้จะกลับมาทำงานต่อหลังจากหยุดชั่วคราว


1
สำหรับผู้ที่ต้องการคัดลอกคำต่อคำรุ่นใหม่มีhdparmใน/usr/sbinดังนั้นปรับเส้นทาง
โรมัน

2

ฉันมีดิสก์เดียวกัน (และปัญหาเดียวกัน) วิธีแก้ปัญหาโง่ แต่ทำงานของฉัน: ฉันได้ใส่ใน/etc/crontab:

-*/5  * * * *   root  hdparm -B 254 /dev/sda

สิ่งนี้ไม่เพียงเข้าถึงไดรฟ์ทุก ๆ 12 วินาทีหรือไม่ ฉันพิจารณาบางสิ่งตามบรรทัดนั้น แต่ฉันอยากได้ระดับการนอนหลับเมื่อไม่ได้เสียบ
Pete

ทุกห้านาที คุณสามารถเขียนสคริปต์ wrapper ซึ่งตรวจสอบสถานะพลังงานของระบบ
Hauke ​​Laging

1

กฎ udev ทำงานได้ดีกับเหตุการณ์ปลั๊ก แต่เพื่อให้ได้พฤติกรรมที่ถูกต้องหลังจากดำเนินการต่อจากการหยุดชั่วคราวฉันต้องการบางสิ่งเช่นนี้ใน/etc/pm/sleep.d:

#!/bin/sh

case "${1}" in
    resume|thaw)
    if grep -q 1 /sys/class/power_supply/ADP1/online; then
      /usr/sbin/hdparm -B 254 /dev/sda
    else
      /usr/sbin/hdparm -B 128 /dev/sda
    fi
;;
esac
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.