Внешний жесткий диск USB, WD Elements, не отключается сам по себе

Внешний жесткий диск USB, WD Elements, не отключается сам по себе

У меня есть внешний жесткий диск Seagate Free Agent в течение последних 4-5 лет. После подключения и завершения передачи файлов я нажимаю меню «Безопасное извлечение». Затем он плавно отключится сам, остановив вращение диска внутри. Я чувствую это, если дотронуться. Кроме того, индикатор питания также не будет работать.

Недавно я купил новый внешний жесткий диск, WD Elements. Если я выдаю команду «Безопасное извлечение» для этого жесткого диска, он просто отмонтируется, но не отключается сам, а диски продолжают вращаться, я чувствую это при прикосновении. Я также попробовал кнопку «Отключить диск» в приложении «Диски», которое идет с Ubuntu. Тогда он также просто отмонтируется.

Я хотел бы, чтобы жесткий диск WD Elements изящно отключился сам, прежде чем я вручную отключу его. Я предполагаю, что принудительное отключение устройства до того, как оно само остановится, может сократить срок его службы.

Есть ли какая-нибудь другая команда или программа, которая поможет мне это сделать?

решение1

Вам понадобится дополнительный пакет, содержащий утилиту для фактического выключения WD, поскольку WD не поддерживает Linux из коробки:

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

где Xи Y— буквы, соответствующие вашему диску.

решение2

До сих пор я не нашел простой альтернативы «безопасному извлечению» в файловом менеджере, поэтому это мое оправдание использования командной строки здесь.

Сначала вам нужно узнать идентификатор устройства или идентификатор блока вашего внешнего жесткого диска. Затем вы можете использовать или udisksдля udisksctlразмонтирования и фактического выключения устройства. Я ответилсвязанный вопроснекоторое время назад, когда только начал работать с ubuntu, поэтому я предлагаю вам обратиться к нему. В основном, я использую, udisks --unmount /dev/sdb1 && udisks --detach /dev/sdbгде sdb1 — это точка монтирования, а sdb — это фактический диск.

Вы можете использовать lsblkи идентифицировать его по точке монтирования и размеру; с другой стороны, вы можете использовать udisksctl status. Например, у меня сейчас подключен USB-накопитель Sandisk Cruiser. Вывод команд следующий: введите описание изображения здесь

Как вы можете видеть, оба сообщают, что мой usb-накопитель идентифицирован как /dev/sdc. Каждый раз, когда вы подключаете usb-устройство, оно будет идентифицировано разными буквами, sdb, sdc, sdf и так далее, в то время как sda всегда будет вашим жестким диском.

Так что в моем случае я бы извлек usb с помощью udisks --unmount /dev/sdc1 && udisks --detach /dev/sdcили альтернативно с тем, что предложил Fabby. С помощью однострочного метода, который я использую, я заметил, что идентификатор устройства сохраняется, т. е. если я извлекаю usd и снова подключаю его, он все равно выдает имя устройства sdc.

СОВЕТ: можно использовать udisksctl status | grep -i wdдля отображения информации только о внешнем жестком диске.

Теперь, вот что я сделал чисто ради развлечения, но вы можете найти это полезным и адаптировать под свои нужды. Что если бы мы могли написать скрипт, который бы делал безопасное извлечение для нас?

Нам нужно сообщить оболочке идентификатор блока нашего внешнего жесткого диска или usb. Каким будет вывод этой команды: udisksctl status | grep -i sandisk | xargs echo? Это будет: SanDisk Cruzer Glide 1.27 2005425573077FA0AA67 sdd, или, другими словами, информация о usb, разделенная пробелами, с идентификатором устройства в качестве последнего аргумента или 6-го. Здесь мы можем использовать команду cut, чтобы извлечь ее следующим образом:udisksctl status | grep -i sandisk | xargs echo | cut -d' ' -f6

Конечно, вам придется использовать udisksctl status | grep -i wd | xargs echoи подсчитывать, какой элемент соответствует идентификатору вашего блока, а затем использовать соответствующее число для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 втвой путь. Теперь вы также можете создать .файл рабочего столаилисделать скрипт исполняемым в файловом менеджере

А вот и скрипт в действии. введите описание изображения здесь

решение3

Следующий скрипт оболочки сделает всю работу за меня.

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

Связанный контент