Внешний жесткий диск USB 3.0 Вращение и отключение питания при выключении или перезагрузке Raspberry Pi 4B - PullRequest
0 голосов
/ 07 мая 2020

Внешний жесткий диск USB 3.0 Seagate Expantion Drive 1 ТБ подключен к моему Raspberry Pi 4B на Raspbian Buster. Жесткий диск работает редко, поэтому первым делом хотелось бы, чтобы он отключался на время простоя (остановилось вращение). Сразу скажу, что попробовал утилиту "hdparm", но она у меня абсолютно не работает. На моем старом Raspberry Pi 3B + он отлично справлялся со своей работой, но совсем не работает на новом. Я пробовал делать

sudo hdparm -S 10 / dev / sda1

и

sudo hdparm -Y / dev / sda1

Но все, что он выдает, это

/dev/sda:
issuing sleep command
SG_IO: bad / missing sense data, sb []: 70 00 05 00 00 00 00 0a 00 00 00 00 24 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

При этом диск продолжает вращаться и светодиод на корпусе горит, сколько бы я ни ждал, в hdparm.conf тоже пробовал прописать следующие настройки:

/dev/sda1 {
    spindown_time = 20
}

Но это тоже не дало никакого эффекта, диск продолжает вращаться. Также, зная, что udisks2 установлен в raspbian buster, я попытался создать файл конфигурации Seagate_Expansion_NA4B2GTR-0: 0.conf (это именно то, что мне дала команда «udevadm info / dev / sda») в каталоге / etc / udisks2 / с содержимым

[ATA]
StandbyTimeout = 20

Но тоже не получилось.

То, что диск не перестает крутиться - моя первая проблема. Вторая проблема в том, что при выключении или перезапуске Raspberry диск не паркует головки и его питание резко прерывается, что вызывает очень неприятный хрип. Я нашел похожие запросы на Inte rnet, это очень распространенная проблема. Я бы хотел, чтобы во время процедуры выключения ОС диск был правильно размонтирован и его питание отключалось до потери питания на порту USB 3.0. К счастью, мне удалось написать аналогичный сценарий, и он отлично работает:

hddshutdown. sh

sudo umount -f /dev/sda1
sudo udisksclt power-off -b /dev/sda1
sleep 5

Если я запускаю этот сценарий только во время работы ОС, он работает точно. что мне нужно: Диск размонтирован, вращение диска прекращается и светодиод на корпусе гаснет. Однако я не могу заставить этот скрипт работать таким же образом во время процедуры выключения ОС.

Я написал этот модуль для systemd: hddshutdown.service в / usr / lib / systemd / system /

[Unit]
Description=[=======USB-HDD-spindown============]
DefaultDependencies=no
After=umount.target
Before=shutdown.target poweroff.target reboot.target halt.target

[Service]
ExecStart=/bin/sh  /home/pi/hddshutdown.sh
Type=oneshot
RemainAfterExit=yes

[Install]
WantedBy=reboot.target

Я сделал «sudo systemctl enable hddshutdown», попробовал несколько разных параметров конфигурации, поиграл с разными значениями Before, After и WantedBy, но ни один из вариантов не сработал, только один, диск успешно отключен, но питание не работает выключается, привод продолжает вращаться, а светодиод горит до момента выключения Pi. Более того, я точно знаю, что sh -скрипт запускается точно, задержка "сна", которую я установил в конце скрипта, действительно работает.

Не знаю Linux очень хорошо и это был мой первый опыт написания модулей для systemd. Я нашел информацию о том, что udisksctl требует для работы DBus, но он не существует во время выключения, и поэтому питание диска не может отключиться. Я не смог найти способ запустить этот модуль как можно раньше во время процедуры выключения, когда DBus все еще доступен. (Даже не знаю, что это, может я сказал глупость) Помогите, пожалуйста, решить 2 из этих проблем, заранее спасибо.

1 Ответ

1 голос
/ 28 мая 2020

Я сам нашел ответ на свой вопрос. Поскольку я использую диск Seagate Expansion, я использовал программу Seagate Dashboard с официального сайта, чтобы «перепрограммировать» свой жесткий диск. Мне удалось отключить внешний LED-индикатор и установить время выключения вращения на 10 минут, и теперь на любой системе жесткий диск отключается через 10 минут. Использование программ вроде hdparm или udisks больше не требуется!

...