В чём разница между привязкой/отвязкой USB-порта и автоматической приостановкой?

Вопрос или проблема

У меня есть маленький сервер с ОС Ubuntu, работающий круглосуточно, с скриптом, который запускается только раз в день для извлечения данных из Интернета и копирования их на внешний USB жесткий диск. Это копирование данных управляется через bash скрипт. Примерно, копирование данных начинается в 00:00 и заканчивается в 5:00.

Поскольку внешний USB HDD простаивает длительное время, я хотел бы включать его лишь за несколько минут до начала копирования данных и выключать за несколько минут после копирования данных, непосредственно через мой bash скрипт.

Я изучил вопрос и в основном выделил 2 решения, которые не могу различить.

1. Использование bind/unbind.

echo '1-2.2:1.0' > /sys/bus/usb/drivers/r8712u/bind   # включить
echo '1-2.2:1.0' > /sys/bus/usb/drivers/r8712u/unbind # выключить

2. Использование autosuspend, из этого вопроса на SO.

echo "0" > "/sys/bus/usb/devices/usbX/power/autosuspend_delay_ms"
echo "auto" > "/sys/bus/usb/devices/usbX/power/control"

Пожалуйста, в чем разница и какой вариант будет наиболее подходящим для моего случая?

Большое спасибо за вашу помощь. Хорошего вам дня, всего наилучшего.

Ваш второй вариант “autosuspend” позволяет системе управления питанием операционной системы решать, отключать ли устройство, с некоторыми правилами о конкретном тайм-ауте или автоматизме. Он все еще будет держать ваш диск доступным для других программ.

В вашем первом варианте “unbind” аналогичен выдергиванию USB-кабеля. Это приведет к проблемам, если другой скрипт, помимо вашего, использует диск. На мой взгляд, комбинация “unbind/bind” будет более подходящей в виде жесткого сброса, когда какое-то USB-устройство перестает реагировать по каким-то причинам, например, потому что оно само по себе отключилось.

Таким образом, второй вариант звучит более подходящим для вашего случая.

Ответ или решение

Конечно, давайте рассмотрим различия между подходами bind/unbind и autosuspend в управлении состоянием питания USB-устройств, таких как внешний жесткий диск, в контексте описанной вами задачи.

Теоретическая часть

Bind/Unbind:

  1. Теория: Подход bind/unbind в контексте USB-устройств на Linux позволяет управлять подключением и отключением устройства от USB-драйвера. Когда вы используете команду unbind, девайс фактически "отключается" от драйвера системы, что можно сравнить с физическим отключением устройства. Команда bind возвращает устройство к работе, подключая его обратно к драйверу.

  2. Пример: Например, если у вас есть устройство, вы можете "развязывать" его от драйвера при помощи команды:

    echo '1-2.2:1.0' > /sys/bus/usb/drivers/r8712u/unbind 

    И "связывать" обратно с драйвером при помощи:

    echo '1-2.2:1.0' > /sys/bus/usb/drivers/r8712u/bind
  3. Причины использования: Этот метод полезен, когда необходимо "перезагрузить" устройство, либо его драйвер, в случае сбоев. Однако, он не является энергосберегающим решением.

Autosuspend:

  1. Теория: Автосуспенд (autosuspend) – это функция управления энергопотреблением в Linux, которая позволяет системе автоматически переводить устройство в режим пониженного энергопотребления (или спящий режим), если оно не используется в течение определенного времени. Это помогает экономить энергию и потенциально продлить срок службы устройства.

  2. Пример: Для активации автосуспенд можно использовать следующие команды:

    echo "0" > "/sys/bus/usb/devices/usbX/power/autosuspend_delay_ms"
    echo "auto" > "/sys/bus/usb/devices/usbX/power/control"
  3. Причины использования: Данный метод позволяет системе автоматически управлять энергосбережением, сохраняя при этом доступность устройства для других программ и процессов. Оно менее инвазивно и более безопасно, так как устройство может выйти из спящего режима при необходимости без явного вмешательства пользователя.

Применение

Учитывая ваш сценарий, где сервер работает круглосуточно без остановки с периодической задачей записи данных на внешний жесткий диск, автосуспенд, кажется, является более подходящим решением. Это позволяет устройству автоматически входить в спящий режим, когда оно не используется, тем самым экономя энергию и снижая износ, без ручных операций подключения/отключения от драйвера.

Кроме того, подход с автосуспендом обеспечивает более плавную интеграцию с остальной системой. Это уменьшает риск возникновения проблем, связанных с внезапной потерей доступа к устройству для других процессов и сценариев. В вашем случае, вы можете настроить автосуспенд так, чтобы диск автоматически "просыпался" за несколько минут до начала копирования данных и возвращался в спящий режим после завершения операции, если другого доступа к диску в это время не предполагается.

Заключение

Равномерное и автоматизированное управление энергопотреблением, которое обеспечивается автосуспендом, представляет собой более современный и безопасный подход к управлению внешними USB-устройствами в сценарии с непрерывно работающим сервером. Bind/unbind может использоваться для решения проблем с устройством, однако в качестве постоянного метода его применения нужно учитывать возможность конфликтов с параллельно запущенными процессами. Ваша стратегическая задача – обеспечить стабильную работу с сохранением ресурсов, и в этом контексте автосуспенд предоставляет все необходимые преимущества.

Оцените материал
Добавить комментарий

Капча загружается...