web-dev-qa-db-fra.com

Le disque dur USB externe, WD Elements, ne s'éteint pas tout seul

Je possède un disque dur externe Seagate Free Agent depuis 4-5 ans. Après avoir branché et terminé les transferts de fichiers, je clique sur le menu "Supprimer en toute sécurité". Ensuite, il s’arrêtera gracieusement, arrêtant de tourner le disque à l’intérieur. Je peux le sentir si je suis touché. En outre, le voyant d'alimentation sera également éteint.

Récemment, j'ai acheté un nouveau disque dur externe, WD Elements. Si je lance "Retirer en toute sécurité" pour ce disque dur, il se démonte, mais ne s'éteint pas tout seul, les disques continuent de tourner, je peux le sentir au contact. J'ai également essayé le bouton "Éteindre le lecteur" dans l'application "Disks" fourni avec Ubuntu. Ensuite, il ne reste plus qu’à démonter.

Je souhaite que le disque dur WD Elements s’éteigne gracieusement avant de le débrancher manuellement. Je suppose que débrancher l'appareil avec force avant de s'arrêter peut raccourcir sa durée de vie.

Y a-t-il une autre commande ou programme qui m'aidera à le faire?

2
Junaid

Suivre le script Shell fait le travail pour moi.

#!/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

C’est en fait une combinaison d’idées tirées des publications de @Serg et de @Fabby.

0
Junaid

Vous avez besoin d'un paquet supplémentaire contenant un utilitaire pour mettre le WD hors tension, car ce dernier ne prend pas en charge Linux immédiatement:

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

X et Y sont les lettres correspondant à votre disque.

1
Fabby

Jusqu'ici, je n'ai pas trouvé d'alternative simple à "éjecter en toute sécurité" dans le gestionnaire de fichiers, c'est donc ma justification pour utiliser la ligne de commande ici.

Tout d'abord, vous devez connaître l'identifiant de votre périphérique de disque dur externe ou votre identifiant de bloc. Ensuite, vous pouvez utiliser udisks ou udisksctl pour démonter et mettre le périphérique hors tension. J'ai répondu à question connexe il y a quelque temps, alors que nous venions tout juste de commencer avec ubuntu, je vous suggère donc de vous y reporter également. Fondamentalement, j'utilise udisks --unmount /dev/sdb1 && udisks --detach /dev/sdb où sdb1 est le point de montage et sdb est le disque réel.

Vous pouvez utiliser lsblk et l'identifier par le point de montage et la taille; Par contre, vous pouvez utiliser udisksctl status. Par exemple, j'ai un lecteur USB Sandisk Cruiser connecté en ce moment. La sortie des commandes est la suivante: enter image description here

Comme vous pouvez le constater, les deux rapportent que mon lecteur USB est identifié comme/dev/sdc. Chaque fois que vous utilisez un périphérique USB, il est identifié par différentes lettres, sdb, sdc, sdf, etc., tandis que sda ​​est toujours votre disque dur.

Donc dans mon cas, je voudrais éjecter le port USB avec udisks --unmount /dev/sdc1 && udisks --detach /dev/sdc ou alternativement avec ce que Fabby a suggéré. Avec le one-liner que j’utilise, j’ai remarqué que l’identifiant de l’appareil est conservé, c’est-à-dire que si j’éjecte et me reconnecte, il donne toujours le nom de l’appareil sdc.

CONSEIL: vous pouvez utiliser udisksctl status | grep -i wd pour afficher uniquement les informations du disque dur externe.

Maintenant, voici quelque chose que j'ai fait uniquement pour le plaisir, mais vous pourriez le trouver utile et l'adapter à vos propres besoins. Et si nous pouvions écrire un script pour faire l'éjection en toute sécurité pour nous?

Nous devons faire savoir à Shell l’identifiant du bloc du disque dur externe ou de l’usb. Quel serait le résultat de cette commande: udisksctl status | grep -i sandisk | xargs echo? Ce serait ceci: SanDisk Cruzer Glide 1.27 2005425573077FA0AA67 sdd, ou en d’autres termes, des informations sur le port USB, délimitées par des espaces, l’identifiant de périphérique étant le dernier argument, ou le 6ème. Ici, nous pouvons utiliser la commande cut pour l'extraire comme suit: udisksctl status | grep -i sandisk | xargs echo | cut -d' ' -f6

Bien sûr, pour vous, vous devriez utiliser udisksctl status | grep -i wd | xargs echo et compter quel élément est votre identifiant de bloc, puis utiliser le nombre approprié sur cut -d' ' -fx

Ensuite, j'ai mis en place le script remove-usb.sh. C'est ici:

#!/bin/sh

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


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

Ensuite, placez-le dans mon dossier/home/user/bin, chmod + x /home/user/bin/remove-usb.sh. N'oubliez pas que ce dossier bin doit être ajouté à votre chemin . Maintenant, vous pouvez également créer un . fichier du burea ou rendre le script exécutable dans le gestionnaire de fichiers

Et voici le script en action enter image description here

1