過去4〜5年間、Seagate Free Agent外付けハードドライブを所有しています。プラグインしてファイル転送を完了したら、「安全に削除」メニューをクリックします。その後、正常にシャットダウンし、内部のディスクの回転を停止します。触ると感じることができます。また、電源ランプも消灯します。
最近、新しい外付けハードディスクWD Elementsを購入しました。このハードドライブに対して「安全な取り外し」を発行すると、マウントが解除されますが、それ自体の電源はオフにならず、ディスクも回転し続け、触ると感じることができます。また、Ubuntuに付属の「ディスク」アプリケーションの「ドライブの電源を切る」ボタンを試しました。また、マウント解除されるだけです。
手動でプラグを抜く前に、WD Elementsのハードドライブが正常にシャットダウンするのを見たいです。デバイスが停止する前にデバイスを強制的に取り外すと、寿命が短くなる可能性があります。
それを行うのに役立つ他のコマンドやプログラムはありますか?
次のシェルスクリプトは私のために仕事をします。
#!/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の両方の投稿からのアイデアの組み合わせです。
WDはすぐにLinuxをサポートしないため、実際にWDの電源をオフにするユーティリティを含む追加パッケージが必要です。
Sudo apt-get install usdisks2
Sudo udisksctl power-off --block-device /dev/XdY
ここで、X
およびY
は、ディスクに対応する文字です。
これまでのところ、ファイルマネージャで「安全にイジェクト」する簡単な代替手段を見つけていないので、ここでコマンドラインを使用するのが正当な理由です。
まず、外部ハードドライブのデバイスIDまたはブロックIDを見つける必要があります。次に、udisks
またはudisksctl
のいずれかを使用して、デバイスをアンマウントし、実際に電源をオフにします。私は 関連する質問 少し前に、ubuntuで始めたばかりに答えたので、それも参照することをお勧めします。基本的に、私はudisks --unmount /dev/sdb1 && udisks --detach /dev/sdb
を使用します。sdb1はマウントポイントで、sdbは実際のディスクです。
lsblk
を使用して、マウントポイントとサイズで識別できます。一方、udisksctl status
を使用できます。たとえば、私は今、Sandisk Cruiser USBドライブを接続しています。コマンドの出力は次のとおりです。
両方のレポートを見るとわかるように、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 echo
? SanDisk 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 に追加することを忘れないでください。 . デスクトップファイル または ファイルマネージャーでスクリプトを実行可能にする も作成できるようになりました
そして、ここに実行中のスクリプトがあります