web-dev-qa-db-ja.com

外付けUSBハードドライブ、WD Elements、それ自体の電源をオフにしない

過去4〜5年間、Seagate Free Agent外付けハードドライブを所有しています。プラグインしてファイル転送を完了したら、「安全に削除」メニューをクリックします。その後、正常にシャットダウンし、内部のディスクの回転を停止します。触ると感じることができます。また、電源ランプも消灯します。

最近、新しい外付けハードディスクWD Elementsを購入しました。このハードドライブに対して「安全な取り外し」を発行すると、マウントが解除されますが、それ自体の電源はオフにならず、ディスクも回転し続け、触ると感じることができます。また、Ubuntuに付属の「ディスク」アプリケーションの「ドライブの電源を切る」ボタンを試しました。また、マウント解除されるだけです。

手動でプラグを抜く前に、WD Elementsのハードドライブが正常にシャットダウンするのを見たいです。デバイスが停止する前にデバイスを強制的に取り外すと、寿命が短くなる可能性があります。

それを行うのに役立つ他のコマンドやプログラムはありますか?

2
Junaid

次のシェルスクリプトは私のために仕事をします。

#!/bin/sh

DEVICE=$(udisksctl status | grep -i "WD Elements" | xargs echo | cut -d' ' -f6)

udisks --unmount /dev/$(echo $DEVICE)1
Sudo udisksctl power-off --block-device /dev/$DEVICE

実際には、@ Sergと@Fabbyの両方の投稿からのアイデアの組み合わせです。

0
Junaid

WDはすぐにLinuxをサポートしないため、実際にWDの電源をオフにするユーティリティを含む追加パッケージが必要です。

Sudo apt-get install usdisks2
Sudo udisksctl power-off --block-device /dev/XdY

ここで、XおよびYは、ディスクに対応する文字です。

1
Fabby

これまでのところ、ファイルマネージャで「安全にイジェクト」する簡単な代替手段を見つけていないので、ここでコマンドラインを使用するのが正当な理由です。

まず、外部ハードドライブのデバイスIDまたはブロックIDを見つける必要があります。次に、udisksまたはudisksctlのいずれかを使用して、デバイスをアンマウントし、実際に電源をオフにします。私は 関連する質問 少し前に、ubuntuで始めたばかりに答えたので、それも参照することをお勧めします。基本的に、私はudisks --unmount /dev/sdb1 && udisks --detach /dev/sdbを使用します。sdb1はマウントポイントで、sdbは実際のディスクです。

lsblkを使用して、マウントポイントとサイズで識別できます。一方、udisksctl statusを使用できます。たとえば、私は今、Sandisk Cruiser USBドライブを接続しています。コマンドの出力は次のとおりです。 enter image description here

両方のレポートを見るとわかるように、USBドライブは/ dev/sdcとして識別されています。 USBデバイスを操作するたびに、sdb、sdc、sdfなどの異なる文字で識別されますが、sdaは常にハードドライブです。

そのため、私の場合は、udisks --unmount /dev/sdc1 && udisks --detach /dev/sdcでusbをイジェクトするか、Fabbyが提案した方法でusbをイジェクトします。私が使用しているワンライナーでは、デバイスIDが保持されていることに気付きました。つまり、usdを取り出して再接続すると、デバイスsdc名が引き続き与えられます。

ヒント:udisksctl status | grep -i wdを使用して、外付けハードドライブの情報のみを表示できます。

さて、ここで私は純粋に楽しみのためにやったことがありますが、あなたはそれを便利であなた自身のニーズに適応させることができます。安全なイジェクトを行うスクリプトを作成できたらどうでしょうか?

外部のhddまたはusbのブロックIDをシェルに知らせる必要があります。このコマンドの出力は次のようになります:udisksctl status | grep -i sandisk | xargs echoSanDisk Cruzer Glide 1.27 2005425573077FA0AA67 sdd、つまり、スペースで区切られたusbに関する情報で、デバイスIDは最後の引数、または6番目の引数です。ここで、次のようにcutコマンドを使用して抽出できます:udisksctl status | grep -i sandisk | xargs echo | cut -d' ' -f6

もちろん、あなたはudisksctl status | grep -i wd | xargs echoを使用し、ブロックIDがどの要素であるかをカウントし、cut -d' ' -fxで適切な番号を使用する必要があります

次に、スクリプトremove-usb.shをまとめました。ここにあります:

#!/bin/sh

DEVICE=$( udisksctl status | grep -i sandisk | xargs echo | cut -d' ' -f6 )


udisks --unmount /dev/$(echo $DEVICE)1 && udisks --detach /dev/$DEVICE

次に、/ home/user/binフォルダー、chmod + x /home/user/bin/remove-usb.shに配置します。 binフォルダーを your path に追加することを忘れないでください。 . デスクトップファイル または ファイルマネージャーでスクリプトを実行可能にする も作成できるようになりました

そして、ここに実行中のスクリプトがあります enter image description here

1