/homeでマウントされたUSB SATA2ドライブがUSBに接続されています。コンピュータ/ノートブックの電源を切ると、ディスクがまだ回転していて電源を切ってもヘッドが停止しないように、ディスク上で少し高い音がします。
パーティションをアンマウントして手動でディスクにスリープ信号を送信すると、次の音は出ません。
hdparm -Y /dev/sdb
ただし、これを行うには、ディスク上のパーティションの1つがfstabを介して/ homeとしてマウントされているため、/ homeをアンマウントする必要があります。
UUID=[long number] /home ext4 defaults 1 2
したがって、ディスクは常に使用中であるため、取り外すことはできません。現時点では、ランレベル1に移動して削除し、スリープ信号を送信できます。
systemctl isolate runlevel1.target
umount /home
umount /dev/sdb*
hdparm -Y /dev/sdb
(unplug the drive without the drive giving any sounds)
systemctl poweroff
コンピュータ/ノートブックを終了したいたびにやるべきことが少し多いので、rc0にスクリプトを追加してみました。
/etc/init.dには次のファイルがあります。
-rwxr-xr-x 1 root root 547 Mar 3 07:57 sleep.usb
含む:
#! /bin/bash
#
# network Bring up/down networking
#
# chkconfig: - 10 1
# description: Unmount /home/harm/ssd, /home and send sleep signal
#
# See how we were called.
case "$1" in
start)
;;
stop)
somevar="$(mount|grep /home)";
if [ "$somevar" != "" ]; then
umount /home
fi
umount /dev/sdb*
hdparm -Y /dev/sdb
;;
*)
echo $"Usage: $0 {start|stop|status|restart|reload|force-reload}"
exit 2
esac
exit 0
インストールしてください:
chkconfig --add sleep.usb
正しいディレクトリに表示されます。
lrwxrwxrwx 1 root root 19 Mar 3 08:00 K01sleep.usb -> ../init.d/sleep.usb
ただし、コンピュータ/ノートブックの電源を切ってもハードドライブから音が鳴り、手を握ると、電源が切れるまでディスクが回転することを感じることができます。
ベストアンサー1
初期ソリューション
したがってsystemd
、この場合、最初に少なくとも独自のコードで互換性レイヤーを使用するのではなく、代わりにsystemdのデフォルトツールを使用することをお勧めします。ここで最良のオプションは、/usr/lib/systemd/system-shutdown
終了ロジックの一部としてランダムファイルを実行するsystemdの機能を使用することです。
見積もりシャットダウン(8):
実際のシステム quit/poweroff/reboot/kexec を実行する前に、systemd-shutdown は /usr/lib/systemd/system-shutdown/ にあるすべての実行可能ファイルを実行し、「halt」、「poweroff」、「reboot」という引数を渡します。または、選択した操作に応じて「kexec」です。
したがって、スクリプトを配置して実行できます。ただhdparm -Y
このディレクトリを入力すると、システムが停止する前に実行されます。ありますので参考にしてくださいとても遅く閉鎖しました。:すべてが削除されたか、読み取り専用で再インストールされ、プロセスが終了し、ネットワークが終了しました。したがって、現在スクリプト内の補助ロジックは必要ありません。
修正する
あなたが言ったように、ディスクをスリープモードにするだけでは役に立ちません。スクリプトが完了した後に再び起きるからです。systemd-shutdown
シャットダウンを実行するための最終準備やその他の理由によって発生する可能性があります。
したがって、省電力モードに移行したら、システムからデバイスを取り外す必要があります。あなたのドライブはUSB大容量記憶装置であると仮定します。以下の内容はすべて、そのドライブにのみ適用されます。
DRIVE=sdb # replace with whatever is needed
echo 1 > $(realpath /sys/block/$DRIVE/device)/../../../../remove
何が起こっているのかを理解するには、(Linux固有)sysfs階層の知識が必要です。
/sys/block/sdX
(仮想)ブロックデバイスを表すディレクトリです。device
物理SCSIデバイスを表すディレクトリへのシンボリックリンク(Linuxでは、USB大容量記憶装置はSCSIディスクとして表示されます)。- まず、
..
SCSIターゲットを表す親ディレクトリに移動します。 - 2番目は、
..
SCSIホストを表す親ディレクトリに移動します。 - 3つ目は、
..
USB「インターフェース」を表す親ディレクトリに移動します。 - 4番目は、
..
USB「デバイス」を表す親ディレクトリに移動します。これが私たちにとって必要なものです。
1
最後に、そのディレクトリremove
のファイルに書き込みます。これは、USBドライバにデバイスを無効にし、システムから削除するように指示します。
これがうまくいくことを願っています。