web-dev-qa-db-ja.com

アンマウント時に外部ドライブの電源を自動的に切ることはできますか?

この質問に対する回答が多いのはわかっていますが、これが自動的に行われるような答えは見つかりませんでした。外付けHDDの最後のパーティションをマウント解除すると(複数ある可能性があるため)、電源をオフにしたいと思います(udisksctl power-off)外付けHDDなので、USBケーブルを安全に取り外すことができます。

Bashスクリプトを作成してグローバルパーティションアンマウントイベントにフックできる方法はありますか?そのデバイスにマウントされているパーティションの数を確認でき、そのデバイスが外付けHDDである場合は、電源をオフにするコマンドを発行できます。これはできますか?もしそうなら?ドキュメントへの参照は私を助けるかもしれません。

これはUbuntu 19.04にあります。

3
GAP

これは7年の長い物語です。
この問題は、バージョン1からバージョン2へのアップグレード時にUDiskの内部を変更することで発生します。
LaunchPadに バグ1067876 として記載されています。私は多くの時間を費やして何が悪いのかを判断しようとしましたが、運はありませんでした。

これはあなたの質問に対する部分的な回答ですが、とにかくそれは実用的な解決策です。
私は、ハードディスクとUSBデバイスが回転しているマシンで使用しています。

個人的には、次の2つのソリューションのいずれかを使用します。

  • 一部のデバイスでは、Caja(MATE DEファイルマネージャー、Nautilus 2.3xのフォーク)にまだドライブを安全に削除することがわかります。

    Safely Remove Drive in Caja

    それをクリックすると、ハードディスクがスピンダウンし、USBフラッシュ/ SSDのLEDがオフになります。

  • Cajaに安全に削除が表示されない場合は、GNOMEディスク(gnome-disksコマンド)、必要なドライブを選択し、そのインターフェースでPower Offをクリックします。

    Disks button または Disks menu

    次にHDDがスピンダウンし、LEDが消灯します。

自動スクリプトの作成は少し難しい作業です。また、可能性のある既存の解​​決策を見つけるために、githubまたは他の場所で検索を試みることもできます。

2
N0rbert

また、半分は答えます。

バックアップハードドライブ用にデスクトップスターターを作成しました。

cat bin/Backup-Platte-umount.sh 
#!/bin/bash
#devicenodes finden 
devname=$(findmnt | grep media | awk '{print $2}' | egrep -v 'sda|sdb')  
export dev=$(findmnt | grep media | awk '{print $2}' | egrep -v 'sda|sdb' | sed 's/.$//' | head -n1)
#backup-platte umounten
umount $devname && notify-send 'Backup-Platte raus' &&  udisksctl power-off -b $dev

説明しようと思います。私はそれがあまり得意ではありません。

devname=$(findmnt | grep media | awk '{print $2}' | egrep -v 'sda|sdb') 

メディア内のマウンテットファイルシステムを検索します。私の2つの内蔵ディスクはegrep -v 'sda|sdb'

次の部分は変数をエクスポートします。

export dev=$(findmnt | grep media | awk '{print $2}' | egrep -v 'sda|sdb' | sed 's/.$//' | head -n1

Gives me the pur harddrive node for udisksctl power-off 

findmnt | grep media | awk '{print $2}' | egrep -v 'sda|sdb' | sed 's/.$//' | head -n1
/dev/sdc

そしてそれは動作します。

bash -x bin/Backup-Platte-umount.sh 
++ findmnt
++ grep media
++ awk '{print $2}'
++ egrep -v 'sda|sdb'
+ devname='/dev/sdc1
/dev/sdc3
/dev/sdc2'
++ findmnt
++ grep media
++ awk '{print $2}'
++ egrep -v 'sda|sdb'
++ sed 's/.$//'
++ head -n1
+ export dev=/dev/sdc
+ dev=/dev/sdc
+ umount /dev/sdc1 /dev/sdc3 /dev/sdc2
+ notify-send 'Backup-Platte raus'
+ udisksctl power-off -b /dev/sdc

シェルとしてbashでのみテストすることに注意してください

0
nobody