Bagaimana saya bisa menjalankan perintah hdparm setelah boot dan melanjutkan pada Fedora 19?

10

Saya membeli HD baru (WD5000BPVT) yang sayangnya mencoba untuk tidur setiap 5-8 detik. Tidak hanya suara klik yang cukup terdengar, waktu putar 1 detik menambahkan latensi yang sangat nyata dalam penggunaan sehari-hari.

Saya menemukan hdparm -B 254 /dev/sdaakan menonaktifkan tidur yang sangat singkat tetapi saya tidak tahu bagaimana menegakkan pengaturan ini setiap kali drive dihidupkan. Aplikasi dconf-editordan 'Preferensi Manajemen Daya' keduanya tidak melakukan apa-apa sehubungan dengan pengaturan HD. Saya tidak memiliki /etc/hdparmatau /etc/acpijalur. MATE adalah manajer jendela.

Pada Fedora 19, bagaimana saya bisa memaksa perintah ini untuk berjalan setiap kali drive diaktifkan?

Pete
sumber

Jawaban:

12

Saya memiliki masalah yang sama tidak ada solusi di sini yang sesuai dengan kebutuhan saya. Menggunakan cron benar-benar merupakan solusi, bukan solusi, aturan udev dijalankan ketika daya terhubung / terputus tetapi tidak setelah ditangguhkan / dilanjutkan dan pm-utilstidak lagi digunakan secara default di Fedora 19 ketika Anda misalnya menutup laptop Anda.

Karena systemdsekarang bertanggung jawab untuk menangguhkan / berhibernasi, saya pikir satu-satunya cara yang tepat untuk menangani situasi ini adalah dengan membuat systemdunit yang akan berjalan baik setelah boot dan setelah melanjutkan dari suspend.

Catatan:

  • Dengan menggunakan /dev/disk/by-id/...alih-alih /dev/sda, Anda selalu yakin untuk mendapatkan disk yang tepat (sda, b, c tergantung pada urutan mereka terdeteksi oleh kernel)
  • Anda dapat memiliki banyak ExecStartbaris sehingga Anda dapat mengonfigurasi beberapa disk

Inilah unit yang saya tulis:

[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

Simpan file ini sebagai /etc/systemd/system/hdsilence.servicedan kemudian aktifkan menggunakan:

systemctl enable hdsilence.service
systemctl daemon-reload
Krzysztof Adamski
sumber
Berfungsi besar di sini di Fedora 20, juga. Terima kasih!
Jakob
Jadi ini membuat perubahan ke /etc/hdparm.conf usang?
domih
@domih: Sejauh yang saya tahu hdparm.conf adalah hal Debian dan tidak didukung pada Fedora.
Krzysztof Adamski
6

Anda dapat meminta sistem menjalankan perintah saat boot dengan membuat layanan systemd Anda sendiri atau menambahkan perintah ke /etc/rc.d/rc.local.

Jika Anda ingin perintah dijalankan setiap kali Anda membangunkan sistem setelah tidur / hibernasi, Anda dapat menambahkan skrip yang dimulai dengan 2 digit ke /etc/pm/sleep.d/, lihat skrip lain di / usr / lib64 / pm-utils / sleep.d (dengan anggapan x86_64) untuk detail lebih lanjut. Pada dasarnya, dibutuhkan parameter tergantung pada negara mana yang dimasukkan. Anda mungkin juga perlu menambahkan beberapa login ke power.d / di direktori induk yang sama jika Anda ingin beroperasi secara berbeda pada daya baterai dibandingkan dengan ketika dicolokkan.

jsbillings
sumber
1
creating your own systemd serviceBisakah Anda lebih spesifik? Saya tidak punya file /etc/rc.d/rc.local.
Pete
1
The dokumentasi systemd menjelaskan sintaks dari unit pelayanan systemd. The /etc/rc.d/rc.localfile hanya shell script, membuat dan pastikan yang executable.
jsbillings
3

Untuk pengaturan yang berbeda saat menggunakan AC / baterai, saya akan melakukannya melalui udevaturan sederhana , misalnya
/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"

Ini akan diatur apmke 254saat laptop dicolokkan dan masing-masing 128saat dicabut. Juga, itu harus selalu bekerja, bahkan setelah melanjutkan dari penangguhan.

don_crissti
sumber
1
Bagi mereka yang seperti menyalin kata demi kata, rilis baru memiliki hdparmdi /usr/sbin, jadi sesuaikan jalan.
Roman
2

Saya memiliki disk yang sama (dan masalah yang sama). Solusi bodoh tapi berhasil saya: Saya telah memasukkan itu ke dalam /etc/crontab:

-*/5  * * * *   root  hdparm -B 254 /dev/sda
Hauke ​​Laging
sumber
Bukankah ini hanya mengakses drive setiap 12 detik? Saya mempertimbangkan sesuatu di sepanjang garis itu, tetapi saya agak ingin tidur pada tingkat tertentu ketika tidak terisi.
Pete
Setiap lima menit. Anda dapat menulis skrip wrapper yang memeriksa status daya sistem.
Hauke ​​Laging
1

Aturan udev bekerja dengan baik pada peristiwa plug, tetapi untuk mendapatkan perilaku yang benar setelah melanjutkan dari penangguhan, saya perlu sesuatu seperti ini di /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
rampok
sumber