Linux カーネルがセカンダリ HDD をスリープ解除しないようにする方法

Linux カーネルがセカンダリ HDD をスリープ解除しないようにする方法

システムのスリープ/ウェイクアップ サイクル後に、(Linux) カーネルにセカンダリ HDD を起動しないように指示する方法はありますか? 私のラップトップには、システム ルートを含むプライマリ ドライブとして SSD があり、バックアップ システムと散発的にアクセスするファイルを保存するセカンダリ HDD があるため、質問しています。ラップトップは通常、何日にもわたって毎日多くのスリープ/ウェイクアップ サイクル (休止状態ではなく、RAM へのサスペンド) を繰り返すため、セカンダリ HDD を手動でスリープ状態にし、システムのスリープ/ウェイクアップ サイクル中はスリープ状態を維持するようにカーネルに指示したいと思います。

答え1

セカンダリ HDD はバックアップにのみ使用するため、fstab にドライブを自動的にマウントしないように指示し、ドライブをマウントし、バックアップを作成して、再度ドライブをアンマウントするバックアップ スクリプトを作成することをお勧めします。

noauto オプションを指定した fstab 行の例:

/dev/sdb1 /media/backup ext4 user,noauto 0 0

バックアップ用のbashスクリプトは次のように始まりmount /media/backup、次のように終わります。umount /media/backup

答え2

ディスクを回転させない

ディスクの回転はカーネルにハードコードされているようだ(感謝ヴェオンこれを掘り起こしてくれた人に感謝します。)
しかし、もちろん修正することは可能です:古いバージョンのカーネル用のパッチ全体的に奇妙です。
これについてはカーネル パラメータ/スイッチがあったことを覚えていると思っていました。

これはハックなので、アップデートのたびにカーネルにパッチを当ててビルドする必要があり、場合によっては変更されたコードにパッチを適応させる必要があるため、お勧めしません。より良い方法は、パッチ (実際のスイッチを提供し、すべてのシステムで機能するもの) をカーネル開発者自身に送信することです。これは、この回答の範囲を超えていると思います。:)


ディスクを再度停止する (SystemD/Linux)

Marc.2377 のソリューションを基にして、SystemD/Linux Mint で HDD をシャットダウンすることができました。

[Unit]
Description="Put woken HDD back to sleep and tell it to go to sleep after 2 min of not being used."
After=systemd-suspend.service systemd-hybrid-sleep.service systemd-hibernate.service systemd-suspend-then-hibernate.service

[Service]
Type=simple
ExecStart=/usr/sbin/hdparm -q -S 24 -q -Y /dev/disk/by-id/MYDISK

[Install]
WantedBy=sleep.target

MYDISKを 内の実際のデバイス ファイル名に置き換え/dev/disk/by-id、 として保存します/etc/systemd/system/wake_hdd-stop.service

次に実行してsystemctl daemon-reloadアクティブ化します。


ディスクを再度停止する (GNU/Linux)

通常の GNU/Linux システムでは、pm-utilsに以下を入力するだけです/etc/pm/sleep.d/99_hdd-stop

#! /bin/sh
case "$1" in
  resume|thaw)
    /usr/sbin/hdparm -q -S 24 -q -Y /dev/disk/by-id/MYDISK
    ;;
esac

MYDISKもちろん、を置き換えます。
次に、ファイルを実行可能にします。chmod +x /etc/pm/sleep.d/99_hdd-stop


注記

いずれにしても、コマンドはできるだけ遅く実行する必要があります。そうしないと、何らかの初期化プロセスがディスクにアクセスしたために、ディスクが再び回転してしまう可能性があります。

また、私のディスクはコマンドを完全に無視しているようです-S。したがって.desktop、結果は状況によって異なります。(上記のスクリプトを実行するファイルを作成し、デスクトップ環境のグローバル キーボード ショートカット設定を使用して、そのファイルにショートカットをマップしました。そのため、いつでも即座に停止できます。)


答え3

それは不可能だと思います。ドライブはカーネルだけでなく、起動時に BIOS / UEFI によっても検査されます。

私がやっているのは、システムの起動直後にドライブをスリープモードにするようにシステムに指示することです。https://wiki.archlinux.org/index.php/Hdparm#起動後直接ドライブをスリープ状態にする

私の場合は次のとおりです。

/usr/local/lib/systemd/system/rsleephdd.service

[Unit]
Description="Ranolfi's script to sleep hard drives on boot"

[Service]
Type=oneshot
ExecStart=/usr/bin/hdparm -q -S 120 -Y /dev/sdc

[Install]
WantedBy=multi-user.target

ドライブまたはそのパーティションが fstab (または crypttab) によってマウントされているかどうかは関係ありません。

(編集):厳密に言えば、パッチを当てることでカーネルにディスクを無視させることは可能のようだただし、これによってドライブの起動が妨げられることはありません。むしろ、私がリンクしたパッチによってドライブにアクセスできなくなり、散発的にファイルにアクセスすることも、ドライブをスリープ状態にすることもできなくなります。

関連情報