Удаленное управление питанием внешнего жесткого диска
Может быть вам нужно удаленно управлять питанием внешнего кармана с жестким диском, например, для бекапов с NAS? У вас есть полуумный дом?
В моей локальной сети работает сетевое хранилище Synology, а для сохранения бекапов использую внешний карман с eSATA.
Управление питанием этого кармана довольно быстро прошло эволюционный путь, как говорил Остап Ибрагимович Бендер
Согласитесь, довольно архаично…
Специально обученный человек освобожден, и ты сам себе сисадмин — включаешь удаленно карман, бекапишь, выключаешь карман. Казалось бы, живи и радуйся.
Но, при всех усилиях команды Яндекса, эта розетка-реле слегка глючная. Нечасто, но все же она становилась недоступной для управления, и помогала только ее физическая перезагрузка (и да, приходилось звонить тому самому спецобученному человеку).
Ладно, заменил ее на встраиваемое реле Sonoff Basic R4mini с Matter. Стало надежней и веселей. Но тут прилетел другой лебедь (хорошо, что не черный) — мощность встроенного в карман БП оказалась впритык для запуска HDD и изредка он отказывался стартовать. Да и лениво мне стало играть в сисадмина. Руки зачесались сделать что-то иное.
Да будет
В Home Assistant у меня проброшено с десяток реле и сенсоров на базе ESP8266 и ESP32, самодельных и перешитых фабричных. В большинстве своем эти устройства находятся вне локальной сети. Это очень незамысловатые штуки, которые замечательно работают через протокол MQTT на прошивке Tasmota.
Наша идея проста, берем «кубики» и складываем из них «домик»:
— двухканальное реле
— плата для разработчика ESP32C3
— понижающий модуль 12В -> 5В (при наличии блока питания +5/+12 можно было бы обойтись без него)
— токоограничивающий резистор 220 Ом
— светодиод для моргания (а как же без него).

Установка и настройка микропрограммы Tasmota на ESP32C3:
Эта статья не про умные дома, но все же скажу пару слов про настройку Tasmota
1. Идем прямиком на их сайт и загружаем файлы tasmota32.factory.bin и tasmota32c3.bin
2. Подключаем ESP32C3 к компьютеру, запускаем webinstaller
3. Сначала заливаем файл tasmota32.factory.bin. После успешной прошивки ESP создаст wifi точку доступа без пароля с именем вида Tasmota-##########. Нужно к ней подключиться, выбрать в интерфейсе свою домашнюю сеть WiFi и ввести пароль. После этого ESP будет доступна в домашней сети по IP адресу. Запомните адрес, это потребуется для дальнейшей настройки
4. Заходим по уже известному нам IP в интерфейс Tasmota, и обновляем прошивку файлом tasmota32c3.bin
5. Устанавливаем часовой пояс устройства командой в Tools->Console. Команду можно взять тут
6. Настраиваем конфигурацию модуля (Configuration->Module) и MQTT (Configuration->MQTT) и другие (Configuration->Other).

Дорабатываем реле:
1. Удаляем желтую перемычку, и аккуратно выпаиваем контактные клеммы возле реле
2. Запаиваем понижающий модуль (разумеется, заранее установив потенциометром на выходе +5В). Тут же изображено, как мы питаем модуль от источника 12В и куда подключаем питание HDD.
3. На нижней стороне платы разводим питание с понижайки на модуль реле
Дорабатываем модуль ESP32C3:
1. Запаиваем гребенку-мама, предварительно удалив из нее два контакта на пинах 0 и 3
2. Запаиваем резистор 220 Ом на пин 6, и два проводочка на светодиод.
3. Нахлобучиваем ESP32C3 на контакты модуля реле.

Мои хотелки и их реализация
Раз уж взяли в работу могучую ESP32C3, то почему бы не добавить немного перца. Вот таким был список пожеланий:
— при включении реле сначала подать на HDD напряжение 5В, а через 0,5-1 сек подать 12В
— при выключении реле сначала снять с HDD 12В, а через 0,5-1 сек снять 5В
— Для исключения повреждения диска при случайной подаче команды выключения питания, сделать защитный интервал 30 сек между обработкой команд на включение и выключение реле
— При выключенном реле светодиод отображает статус подключения к Wi-Fi (мигает редко при подключении, светится постоянно когда подключен к сети)
— при включенном реле светодиод моргает часто, показывая состояние записи на диск
Интересно, что для воплощения подобных извращений в Tasmota имеется система команд Berry scripting. При этом готовый скрипт можно поставить в автозагрузку, записав файл autoexec.be в Tools->Manage File System->Uplоad.
Я совсем не программист, и без ChatGPT эту задачу не решил бы. Да и с ним не сразу получилось, но мы все же смогли.
Чтобы вся логика заработала в Home Assistant, добавляем там немного кода в configuration.yaml. После этого можно добавить новую карточку (выключатель) в ваше пространство.
Теперь давайте проверим, как работает этот колхоз Имени 50-летия без урожая.
Для этого в Планировщике задач создана задача с запуском еженедельно. Она запускает довольно большой скрипт (низкий поклон ChatGPT).
В нескольких словах схема такая — Планировщик включает реле через Home Assistant, ожидает появление нового подключенного тома, запускает нужную задачу в Hyper Backup (там стоит галочка размонтировать том после выполнения), проверяет наличие подключенного тома каждые 30сек, при пропадании тома выключает реле.
Вроде бы и несложно, но пришлось решать некоторые неочевидные задачи, например, запуск конкретной задачи Hyper Backup из скрипта.
2. Не стоит умалять достоинств реле. Знаю, как можно управлять нагрузкой с помощью мосфетов. Главный недостаток реле становится достоинством, так как большое время срабатывания реле позволяет избежать коротких импульсов тока в цепях питания HDD при переходных процессах при запуске ESP. К тому же реле мало нагружено, обгорание контактов маловероятно. Скорее всего, короткие выбросы тока при использовании мосфет как переключателя — решаемая проблема, но для данной реализации был выбран самый простой путь.
3. На GPIO9 можно поставить нормально разомкнутую кнопку на землю, она будет работать идентично выключателю в Home Assistant. В моем случае она не востребована.
4. Штатными средствами Tasmota можно легко подключить датчик температуры (например, DS18B20), но считаю это избыточным для HDD, который включается на 15 минут в неделю.
5. Не забывайте делать бекапы всего и вся. Возможно, когда-то это сохранит вам нервы и время.
В моей локальной сети работает сетевое хранилище Synology, а для сохранения бекапов использую внешний карман с eSATA.
Управление питанием этого кармана довольно быстро прошло эволюционный путь, как говорил Остап Ибрагимович Бендер
от крестьянской лошадки до железного коняВозможно, вы найдете здесь что-то полезное для себя.
Сначала была клавиша
Это была обычная клавиша выключения блока питания на корпусе кармана. Держать постоянно включенным шумный и прожорливый жесткий диск — затея непродуктивная, поэтому специально обученный человек по моему звонку делал ВКЛ, а после завершения бекапа по моей команде делал ВЫКЛ.Согласитесь, довольно архаично…
Потом был Matter
Нужно пояснить, что на моем НАС крутится Home Assistant OS, имеющая интеграции со множеством протоколов. Под рукой оказалось готовое внешнее реле «Умная розетка Яндекс с Matter». Все очень просто, поставил его в разрыв питания кармана, добавил интеграцию в Home Assistant, настроил карточку устройства, и все.Специально обученный человек освобожден, и ты сам себе сисадмин — включаешь удаленно карман, бекапишь, выключаешь карман. Казалось бы, живи и радуйся.
Но, при всех усилиях команды Яндекса, эта розетка-реле слегка глючная. Нечасто, но все же она становилась недоступной для управления, и помогала только ее физическая перезагрузка (и да, приходилось звонить тому самому спецобученному человеку).
Ладно, заменил ее на встраиваемое реле Sonoff Basic R4mini с Matter. Стало надежней и веселей. Но тут прилетел другой лебедь (хорошо, что не черный) — мощность встроенного в карман БП оказалась впритык для запуска HDD и изредка он отказывался стартовать. Да и лениво мне стало играть в сисадмина. Руки зачесались сделать что-то иное.
Да будет свет Tasmota
В Home Assistant у меня проброшено с десяток реле и сенсоров на базе ESP8266 и ESP32, самодельных и перешитых фабричных. В большинстве своем эти устройства находятся вне локальной сети. Это очень незамысловатые штуки, которые замечательно работают через протокол MQTT на прошивке Tasmota.Наша идея проста, берем «кубики» и складываем из них «домик»:
— двухканальное реле
— плата для разработчика ESP32C3
— понижающий модуль 12В -> 5В (при наличии блока питания +5/+12 можно было бы обойтись без него)
— токоограничивающий резистор 220 Ом
— светодиод для моргания (а как же без него).

Установка и настройка микропрограммы Tasmota на ESP32C3:
Эта статья не про умные дома, но все же скажу пару слов про настройку Tasmota
1. Идем прямиком на их сайт и загружаем файлы tasmota32.factory.bin и tasmota32c3.bin
2. Подключаем ESP32C3 к компьютеру, запускаем webinstaller
3. Сначала заливаем файл tasmota32.factory.bin. После успешной прошивки ESP создаст wifi точку доступа без пароля с именем вида Tasmota-##########. Нужно к ней подключиться, выбрать в интерфейсе свою домашнюю сеть WiFi и ввести пароль. После этого ESP будет доступна в домашней сети по IP адресу. Запомните адрес, это потребуется для дальнейшей настройки
4. Заходим по уже известному нам IP в интерфейс Tasmota, и обновляем прошивку файлом tasmota32c3.bin
5. Устанавливаем часовой пояс устройства командой в Tools->Console. Команду можно взять тут
6. Настраиваем конфигурацию модуля (Configuration->Module) и MQTT (Configuration->MQTT) и другие (Configuration->Other).
Настройки Tasmota в картинках

Дорабатываем реле:
1. Удаляем желтую перемычку, и аккуратно выпаиваем контактные клеммы возле реле
2. Запаиваем понижающий модуль (разумеется, заранее установив потенциометром на выходе +5В). Тут же изображено, как мы питаем модуль от источника 12В и куда подключаем питание HDD.
3. На нижней стороне платы разводим питание с понижайки на модуль реле
Дорабатываем модуль ESP32C3:1. Запаиваем гребенку-мама, предварительно удалив из нее два контакта на пинах 0 и 3
2. Запаиваем резистор 220 Ом на пин 6, и два проводочка на светодиод.
3. Нахлобучиваем ESP32C3 на контакты модуля реле.

Мои хотелки и их реализация
Раз уж взяли в работу могучую ESP32C3, то почему бы не добавить немного перца. Вот таким был список пожеланий:
— при включении реле сначала подать на HDD напряжение 5В, а через 0,5-1 сек подать 12В
— при выключении реле сначала снять с HDD 12В, а через 0,5-1 сек снять 5В
— Для исключения повреждения диска при случайной подаче команды выключения питания, сделать защитный интервал 30 сек между обработкой команд на включение и выключение реле
— При выключенном реле светодиод отображает статус подключения к Wi-Fi (мигает редко при подключении, светится постоянно когда подключен к сети)
— при включенном реле светодиод моргает часто, показывая состояние записи на диск
Интересно, что для воплощения подобных извращений в Tasmota имеется система команд Berry scripting. При этом готовый скрипт можно поставить в автозагрузку, записав файл autoexec.be в Tools->Manage File System->Uplоad.
Я совсем не программист, и без ChatGPT эту задачу не решил бы. Да и с ним не сразу получилось, но мы все же смогли.
Содержимое autoexec.be
import mqtt
import string
import gpio
# Глобальная ссылка на экземпляр для колбэков
var g_HDD = nil
class HDDCtrl
# --- поля ---
var TOPIC
var REL1_IDX
var REL2_IDX
var BLOCK_MS
var DELAY_MS
var WAVE_PIN
var HIGH_MS
var LOW_MS
var blocked
var wave_active
var wave_level
var ledlink_taken
var log_level
# публикация/кэш
var _last_payload # последний УСПЕШНО опубликованный payload
var _pending_payload # то, что нужно доставить при первой возможности
# цикл стартовой/отложенной синхронизации MQTT
var SYNC_PERIOD_MS
var SYNC_MAX_TRIES
var _sync_active
var _sync_tries
def init()
# --- настройки ---
self.TOPIC = "hdd_switch"
self.REL1_IDX = 0
self.REL2_IDX = 1
self.BLOCK_MS = 30000 # Задержка между переключением статуса реле (мс)
self.DELAY_MS = 1000 # Задержка между подачей и снятием 5В и 12В (мс)
self.WAVE_PIN = 6 # Пин для индикации
self.HIGH_MS = 250 # Период вкл индикатора при записи (мс)
self.LOW_MS = 250 # Период выкл индикатора при записи (мс)
self.blocked = false
self.wave_active = false
self.wave_level = 0
self.ledlink_taken = false
self.log_level = 0
self._last_payload = ""
self._pending_payload = ""
self.SYNC_PERIOD_MS = 2000 # раз в 2 секунды
self.SYNC_MAX_TRIES = 15 # до 30 сек макс
self._sync_active = false
self._sync_tries = 0
tasmota.add_driver(self)
g_HDD = self
# безопасный старт реле
tasmota.cmd("PowerOnState 0", true)
self.set_power_safe(self.REL1_IDX, false)
self.set_power_safe(self.REL2_IDX, false)
# вернуть GPIO6 системе (LedLink_i)
tasmota.cmd("LedLink 1")
# Команда HDD и подписки MQTT
tasmota.remove_cmd("HDD")
tasmota.add_cmd("HDD", /cmd, idx, payload -> g_HDD.cmd_hdd(cmd, idx, payload))
mqtt.subscribe("cmnd/"+self.TOPIC+"/POWER1",
/topic, idx, data, databytes -> g_HDD.on_cmnd_p1(topic, idx, data, databytes))
mqtt.subscribe("cmnd/"+self.TOPIC+"/POWER2",
/topic, idx, data, databytes -> g_HDD.on_cmnd_p2(topic, idx, data, databytes))
# --- НОВОЕ: стартовая синхронизация до успешной публикации ---
self.request_state_delivery(self.build_state_payload())
end
# ===== утилиты =====
def log(msg, lvl)
if self.log_level >= lvl tasmota.log(msg, lvl) end
end
def set_power_safe(idx, on)
var s = tasmota.get_power()
if s[idx] != on tasmota.set_power(idx, on) end
end
def build_state_payload()
var p = tasmota.get_power()
var overall = p[self.REL1_IDX] && p[self.REL2_IDX]
return "{\"state\":\"" + (overall ? "ON" : "OFF") +
"\",\"r1\":" + (p[self.REL1_IDX] ? "true":"false") +
",\"r2\":" + (p[self.REL2_IDX] ? "true":"false") +
",\"blocked\":" + (self.blocked ? "true":"false") + "}"
end
# ===== надёжная доставка состояния =====
def try_publish(payload)
# Пытаемся отправить. Возвращает true при успехе.
return mqtt.publish("stat/"+self.TOPIC+"/HDDSTATE", payload, true)
end
def request_state_delivery(payload)
# Если новое состояние такое же, как уже успешно опубликованное — ничего не делаем
if payload == self._last_payload
return
end
# Сразу пробуем отправить
if self.try_publish(payload)
self._last_payload = payload
self._pending_payload = ""
self._sync_active = false
self._sync_tries = 0
self.log("HDDCtrl: state published immediately", 4)
else
# MQTT не готов → запомним и запустим цикл синхронизации
self._pending_payload = payload
if !self._sync_active
self._sync_active = true
self._sync_tries = 0
tasmota.set_timer(self.SYNC_PERIOD_MS, /-> g_HDD.sync_tick())
end
end
end
def sync_tick()
if !self._sync_active return end
# Нечего отправлять — выключаемся
if self._pending_payload == ""
self._sync_active = false
self._sync_tries = 0
return
end
# Пытаемся ещё раз
var ok = self.try_publish(self._pending_payload)
if ok
self._last_payload = self._pending_payload
self._pending_payload = ""
self._sync_active = false
self._sync_tries = 0
self.log("HDDCtrl: state published after wait", 2)
else
self._sync_tries += 1
if self._sync_tries < self.SYNC_MAX_TRIES
tasmota.set_timer(self.SYNC_PERIOD_MS, /-> g_HDD.sync_tick())
else
# Дальше не мучаем устройство, но цикл можно будет перезапустить новой request_state_delivery()
self._sync_active = false
self.log("HDDCtrl: giving up MQTT sync for now", 2)
end
end
end
# Публичные интерфейсы публикации
def publish_state_if_changed()
self.request_state_delivery(self.build_state_payload())
end
def publish_state_force()
# Принудительно шлём вне зависимости от кэша
var payload = self.build_state_payload()
# Сбрасываем кэш, чтобы гарантированно ушло при первой возможности
self._last_payload = ""
self.request_state_delivery(payload)
end
def publish_state()
self.publish_state_if_changed()
end
# ===== блокировка =====
def block_start()
self.blocked = true
self.publish_state_if_changed()
tasmota.set_timer(self.BLOCK_MS, /-> g_HDD.block_end())
end
def block_end()
self.blocked = false
self.publish_state_if_changed()
end
# ===== программный меандр на GPIO6 =====
def wave_tick()
if !self.wave_active return end
self.wave_level = 1 - self.wave_level
gpio.digital_write(self.WAVE_PIN, self.wave_level)
self.log(string.format("HDDCtrl: GPIO%d=%d", self.WAVE_PIN, self.wave_level), 4)
var next_ms = (self.wave_level == 1) ? self.HIGH_MS : self.LOW_MS
tasmota.set_timer(next_ms, /-> g_HDD.wave_tick())
end
def ledlink_take()
if !self.ledlink_taken
tasmota.cmd("LedLink 0")
self.ledlink_taken = true
end
end
def ledlink_release()
if self.ledlink_taken
tasmota.cmd("LedLink 1")
self.ledlink_taken = false
end
end
def wave_start()
if self.wave_active return end
self.wave_active = true
self.ledlink_take()
gpio.pin_mode(self.WAVE_PIN, gpio.OUTPUT)
self.wave_level = 0
gpio.digital_write(self.WAVE_PIN, 0)
self.log(string.format("HDDCtrl: start blink 1Hz on GPIO%d", self.WAVE_PIN), 2)
self.wave_tick()
end
def wave_stop()
if !self.wave_active
self.ledlink_release()
return
end
self.wave_active = false
self.wave_level = 0
gpio.digital_write(self.WAVE_PIN, 0)
self.ledlink_release()
self.log(string.format("HDDCtrl: stop blink on GPIO%d", self.WAVE_PIN), 2)
end
# ===== последовательности HDD =====
def start_on_seq()
if self.blocked return end
self.set_power_safe(self.REL1_IDX, true)
self.wave_start()
self.block_start()
tasmota.set_timer(self.DELAY_MS, /-> g_HDD.set_power_safe(self.REL2_IDX, true))
self.publish_state_if_changed()
end
def start_off_seq()
if self.blocked return end
self.set_power_safe(self.REL2_IDX, false)
self.block_start()
tasmota.set_timer(self.DELAY_MS, /-> g_HDD.finish_off_seq())
self.publish_state_if_changed()
end
def finish_off_seq()
self.set_power_safe(self.REL1_IDX, false)
self.wave_stop()
self.publish_state_if_changed()
end
# ===== команда HDD =====
def cmd_hdd(cmd, idx, payload)
var p = payload
if p == nil p = "" end
if self.blocked
self.publish_state_if_changed()
tasmota.resp_cmnd_error()
return
end
if p == "ON" || p == "1" || p == "on"
self.start_on_seq()
tasmota.resp_cmnd_done()
elif p == "OFF" || p == "0" || p == "off"
self.start_off_seq()
tasmota.resp_cmnd_done()
elif p == "TOGGLE" || p == "toggle"
var s = tasmota.get_power()
if !s[self.REL1_IDX] && !s[self.REL2_IDX] self.start_on_seq() else self.start_off_seq() end
tasmota.resp_cmnd_done()
else
tasmota.resp_cmnd_error()
end
end
# ===== перехваты POWER1/2 =====
def on_cmnd_p1(topic, idx, data, databytes)
if self.blocked return true end
var p = (data == nil) ? "" : data
if p == "ON" || p == "1" || p == "on" || p == "TOGGLE" || p == "toggle"
self.start_on_seq()
elif p == "OFF" || p == "0" || p == "off"
self.start_off_seq()
end
return true
end
def on_cmnd_p2(topic, idx, data, databytes)
if self.blocked return true end
var p = (data == nil) ? "" : data
if p == "OFF" || p == "0" || p == "off" || p == "TOGGLE" || p == "toggle"
self.start_off_seq()
end
return true
end
# ===== кнопка =====
def any_key(cmd, idx)
var state = (idx >> 8) & 0xFF # 10 = SINGLE (SetOption73 1)
var device = idx & 0xFF # 1 = Button1
if device == 1 && state == 10
if self.blocked return true end
var s = tasmota.get_power()
if !s[self.REL1_IDX] && !s[self.REL2_IDX] self.start_on_seq() else self.start_off_seq() end
return true
end
return nil
end
# ===== синхронизация питания (внешние изменения) =====
def set_power_handler(cmd, idx)
self.publish_state_if_changed()
var p = tasmota.get_power()
if p[self.REL1_IDX] self.wave_start() else self.wave_stop() end
return nil
end
end
HDDCtrl()
Чтобы вся логика заработала в Home Assistant, добавляем там немного кода в configuration.yaml. После этого можно добавить новую карточку (выключатель) в ваше пространство.
configuration.yaml
mqtt:
switch:
- name: "HDD Switch"
unique_id: hdd_switch_main
command_topic: "cmnd/hdd_switch/HDD"
state_topic: "stat/hdd_switch/HDDSTATE"
value_template: "{{ value_json.state }}"
payload_on: "ON"
payload_off: "OFF"
availability_topic: "tele/hdd_switch/LWT"
payload_available: "Online"
payload_not_available: "Offline"
qos: 1
retain: false
optimistic: false
icon: mdi:harddisk
device:
identifiers: ["hdd_switch_device"] # общий ID устройства
name: "HDD Switch Controller"
manufacturer: "Tasmota"
model: "ESP32-C3 (Tasmota 15.01)"
# suggested_area: "Название вашей области" # опционально
binary_sensor:
- name: "HDD Switch Locked"
unique_id: hdd_switch_locked
state_topic: "stat/hdd_switch/HDDSTATE"
value_template: "{{ 'ON' if value_json.blocked else 'OFF' }}"
device_class: lock
device:
identifiers: ["hdd_switch_device"] # тот же идентификатор
Теперь давайте проверим, как работает этот колхоз Имени 50-летия без урожая.
Доказательство работоспособности
До чего дошёл прогресс — труд физический исчез,
Да и умственный заменит механический процесс.
Позабыты хлопоты, остановлен бег,
Вкалывают роботы, а не человек.
Что осталось недосказанным
Все знают, что является двигателем прогресса. Поэтому приложив еще немного усилий, задачу бекапов удалось полностью автоматизировать.Для этого в Планировщике задач создана задача с запуском еженедельно. Она запускает довольно большой скрипт (низкий поклон ChatGPT).
В нескольких словах схема такая — Планировщик включает реле через Home Assistant, ожидает появление нового подключенного тома, запускает нужную задачу в Hyper Backup (там стоит галочка размонтировать том после выполнения), проверяет наличие подключенного тома каждые 30сек, при пропадании тома выключает реле.
Вроде бы и несложно, но пришлось решать некоторые неочевидные задачи, например, запуск конкретной задачи Hyper Backup из скрипта.
Постскриптум.
1. Электрических схем нет, потому что тут и изображать нечего. Основная задача — показать конструкцию как реализацию концепции.2. Не стоит умалять достоинств реле. Знаю, как можно управлять нагрузкой с помощью мосфетов. Главный недостаток реле становится достоинством, так как большое время срабатывания реле позволяет избежать коротких импульсов тока в цепях питания HDD при переходных процессах при запуске ESP. К тому же реле мало нагружено, обгорание контактов маловероятно. Скорее всего, короткие выбросы тока при использовании мосфет как переключателя — решаемая проблема, но для данной реализации был выбран самый простой путь.
3. На GPIO9 можно поставить нормально разомкнутую кнопку на землю, она будет работать идентично выключателю в Home Assistant. В моем случае она не востребована.
4. Штатными средствами Tasmota можно легко подключить датчик температуры (например, DS18B20), но считаю это избыточным для HDD, который включается на 15 минут в неделю.
5. Не забывайте делать бекапы всего и вся. Возможно, когда-то это сохранит вам нервы и время.
Самые обсуждаемые обзоры
| +32 |
2195
42
|
— при выключении реле сначала снять с HDD 12В, а через 0,5-1 сек снять 5В
а эта самодеятельность зачем?
1) Последовательность подачи питания допускается любая, это прямо в стандарте оговорено
2) А вот подавать только часть напряжений, необходимых для работы, не допускается.
Я у себя в насе городил управление дисками через GPIO, чтобы отключать их совсем, когда они не востребованы, и для простоты рубил только 5В. Так вот мне подсказали, что по стандарту такое делать нельзя
Вот например про это:
ask.adaptec.com/app/answers/detail/a_id/17175/~/principles-for-using-hot-swap-with-sas%2Fsata-systems:
Странно, но точно помню где-то читал, что контакты данных ещё короче, чем питание 5 и 12, а по факту вижу, что они одинаковые.
Подсказка: стоимость нового диска обычно превышает стоимость сэкономленной электроэнергии. А вот при периодическом старте/стопе диски дохнут вполне бодро.
Это про сохранность данных.
Обычно smart тесты запускают, верификацию данных периодическую.
А другие сов. компьютеры на Кр580вм80 три питания -5, +5 +12, причем в определенной последовательности подавать и отключать :).
да и тут про контроль наличия ничего не сказано, только про дополнительную задержку.
2) это убивает бэкап по расписанию
Засыпать диски в вашей вселенной всё еще не научились?
standby immediately или sleep immediately. Разумеется, лишь после того, как отмонтируете тома, сделаете sync и сбросите кэши. А то у Вас
«при пропадании тома выключает реле. „
Но это лишь уровень SMB (если у Вас не экспорт iSCSI) на устройстве-клиенте, внутри NAS эти разделы смонтированы и то, что клиент отключил сетевой том, никак на сервер не влияет. Вы вообще это как-то учитываете?
Напоминает мне одну историю из 90ых. В одном серьёзном бюджетном учреждении федерального уровня в СПб уволили сисадмина. У них был сервер с Sun Unix (да-да!), но на ночь все электроприборы отключались. И сервер тоже. Т. к. никто не умел его отключать правильно (даже зайти root-ом и сделать shutdown было некому), то его просто “рубали», а утром кто-то (по графику) приходил на 40 минут раньше и включал его. И он 40 минут «чекал» файловую систему… И так это работало многие месяцы (пока не накрылось совсем).
Что тут неправильно?
Если все ресурсы на диске отмонтированы (а при этом делается sync), то да, это безопасно для данных.
Конечно, если засыпать раз в 2 минуты и так дёргать постоянно — хорошего мало. Если же диск нужен лишь эпизодически, то разумнее его держать с остановленным шпинделем.
вопли про парковки в массе своей основывались исключительно на значениях счетчиков. цифирек люди пугались.
p.s. у меня тут тревелстар 7k500 с десятилетней наработкой умудрился за ~год набрать 60+ тыщ старт-стопов (не парковок). засыпал и кто-то его будил. и хуже ему от этого не стало.
Кстати, автор явным образом обозначил цель — «Держать постоянно включенным шумный и прожорливый жесткий диск — затея непродуктивная». Решение ей полностью соответствует.
Ну, значит я, как всегда, прав :)
1. слишком дорого, вплоть до «катастрофа всему» => полноценный 321 по всем правилам «хорошего тона» (с учетом стоимости простоя и тп)
2. дорого-печально переживем/восстановим => на что выделен бюджет, учитывая «правила хорошего тона»
3. неприятно, да и фиг с ним => «ну может кто и займется»
Причина потери данных в контексте резервного копирования «в общем» не имеет значения… разве что во втором случае таки придется оценивать вероятность сценариев для правильного выбора «на какие пункты бест практис» обязательно тратить деньги и силы, а какие можно и подвинуть в сторону.
Впрочем… в своей зоне ответственности Вы, несомненно, имеете право на собственное мнение, возможно кардинально отличающееся от моего.
Соотношение риски/стоимость, кстати, оценивается вообще всегда, даже если исполнитель понятия не имеет о самой концепции. Даже если цена потери — «катастрофа всему» — у катастрофы тоже есть цена.
А ещё на практике бывают всякие дивные ситуации, которые «цивилизованными» рекомендациями не покрываются. К примеру, когда самый надёжный вариант пароля — длинная последовательность на бумажке, приклеенной на монитор. Ну просто потому что у нас там физический фактор прикрыт напрочь — снаружи два периметра с охраной и если что не так — налажавшего сотрудника могут и в лес вывезти, а вот хакнуть лист бумаги не выйдет никак. На мониторе — потому что сотрудники меняются, не всегда предсказуемо (картина утрированная и упрощённая, но срисована с реальности).
Да, но нет.
(да, бывает… более чем часто. нет, покрываются… но есть нюансы)
Покрывается всё — но если идти с начала — от анализа угроз, рисков и стоимости. Но вот решения иногда получаются вообще не «классическое 321». Особенно по нынешним временам, когда здоровый человек скидывает всё, что можно, на облака или ещё как-то аутсорсит.
но вообще -«облакоподомное» прямо «на ура» укладывается в классическую 321
Спасибо
Что-что…
колбасу_с_бутербродом… электроэнергиюИли устанавливать ось из дистрибутива с названием типа ОЛОЛО-САМАЯ-ЛУЧШАЯ-СБОРКА-WIN11.
Может быть имелся в виду шум от вентилятора? Например, у WD Elements Desktop вентилятор довольно шумный.Хотел было найти информацию об установленном вентиляторе в WD Elements Desktop, но в отзывах пишут, что в нём нет вентилятора. Я был на 200%, что в моём диске шумит вентилятор, т.к. рядом ещё лежит два внешних диска и мини-пк, но слышно только WD Elements Desktop.
возможно другие 5krpm — они потише. 2.5" тоже тише.
Сам NAS хоть и чертовски хорош, но не идеален. Не хочется так думать, но что произойдет с ценными данными в случае его поломки, или при неблагоприятном сценарии с электропитанием?
На NASе настроены и бекапы внутри между томами. Но для меня внешний диск — это «холодный» резерв, которым рискую 15 минут в неделю.
Теперь его питание может быть дёрнуто программно в любой момент 24 * 7.
Я так понимаю, что Вы на внешнем hdd храните свою черную бухгалтерию на неприметной съемной квартире на окраине города?! Иначе смысла в таких извращениях нет
Когда начался кошмаринг с шифровальщиками, я бекапы делал следующим образом:
1. Отключаем основной сервер от интернета и LAN,
2. Проверяем основной сервер антивирусом
3. Включаем и проверяем бекап сервер антивирусом
4. Подаём питание на Switch, который поднимает LAN между основным сервером и бекап сервером.
5. Делаем бекап.
6. Выключаем бекап сервер.
7. Вводим в работу основной сервер.
У меня на NAS куча веб сервисов, которыми я пользуюсь постоянно. Я не хочу отказываться от них, или подменять сторонними облачными услугами
4 таких отдельных НАСА, точно надежнее включения/отключения питания дисков постоянно.
У меня так один из бакап-серверов доступен для разных задач либо по SMB, либо по iSCSI. А при желании можно и других сервисов поднять.
Для моей задачи вполне достаточно диска через eSATA.
Типа железка на даче, HA на квартире? Ну, свяжу локалки туннелем. Или сделаю шлюз через телегу
В ESPHome тут будет пара десятка строчек легко читаемой конфигурации.
Например, меандр для индикации выглядел бы во так:
Все основные настройки у Тасмоты делаются в вебинтерфейсе (в статье это есть), они покрывают нужды большинства мамкиных домашних автоматизаторов. А то, что запускается через autoexec.be, это уже для специфических потребностей. И для меня это стало маленьким приятным сюрпризом.
А ловко вы это сделали, как бы предложили сравнить
мягкое с теплым10кб неплохо комментироанного многофункционального мусорного кода от ChatGPT c примером простой мигалки в ESPHome.— после вкл или выкл реле на 30 сек блокируется управление (чтобы шпиндель успел полностью разогнаться или остановиться) и через HA и через кнопку
— если после после включения реле по какой то причине происходит перезагрузка еспкшки, реле загружается в ссостоянии выкл, но статус в НА остается вкл. Для решения этой проблемы скрипт после загрузки в коротком цикле посылает в HA топик, что реле все же выключено.
— при включении реле скрипт перехватывает у Тасмота управление светодиодом для отображения режима записи на диск, при выключении — возвращает управление
Нужно чтоб на HA была статика IP
Или впном сети обьеденнить
По моему так себе занятие…
При ресурсе полных старт/стоп циклов 600тыс у Exos, я его замучаю через… э-э-э-э… минуточку…
600'000 / 60 (число запусков в год) = 10'000 лет.
Да катись все к чертям, живем один раз! Буду включать его каждый день
Насчет поставить его в NAS — не просто неоптимальная, а плохая идея. Он там уже был, это шумно и некомфортно для проживания. Притом, что сам NAS стоит далеко от жилых комнат.
sudo umount — l /dev/sdb
sudo hdparm -S 1 /dev/sdb
Абсолютно с тем же результатом. А вы паяете релюшки и занимаетесь, извините, дичью.
Рискну предположить что вы в его качестве взяли какую-то недокоробку от дилинька с крохотной оглушительной турбиной. Я себе собрал на X86 в корпусе под miniITX, он у меня стоит в спальне и натурально не мешает спать, хотя у жены очень чуткий сон. И да, там стоят энтерпрайзные диски на много блинов, просто ночью зарезаю скорость на трансмиссии и оно еле шуршит.
Насчет дичи извиняю, я и сам написал про извращения. Но нравиться, чтож поделать.
По поводу шумности, коробка без пропеллеров, от какого-то старого внешнего CD/DVD рекордера. Шумит сам диск, мне это не нравится, да и никому рядом тоже.
У меня Сино, а не мини пк, там нет возможности зарезать скорости. Но внутренние медленные Seagate очень деликатны, и желания убаюкивать их нет никакого.
Опять же, акцентирую внимание на резиновом подвесе диска. 8 голов будут долдонить, от этого не деться, но если разорвать жёсткую механическую связь с корпусом — вибрации не будут уходить на столешницу и диск станет в разы тише. Колхозный способ — вывесить винт на банковских резинках в 5.25-дюймовом слоте, в качественных же корпусах изначально идут либо резиновые такие ушастые шайбы, на которых крепится диск, либо на резине вывешиваются полозья. А если ещё и корпус изнутри шумкой проклеить, чтоб резонировал поменьше — вообще будет кайф. Хотя проще взять сразу хороший корпус, в них обычно инженеры уделяют внимание шумоизоляции.
И, кстати, резинки существенно лучше штатных шайб и подобного (но места занимает больше). Проверял.
The drive withstands a minimum of 50,000 start/stop cycles in a 40 C environment and a minimum of 10,000
start/stop cycles in extreme temperature or humidity within the operating range.»
никакого разделения на «нормальные» и какие-то другие тут не наблюдается.
(hc550)
По поводу рекомендации купить несколько жигулей вместо одного мерседеса. А что делать, если мерседес уже стоял в гараже? Проблема…
Удобно какие-нибудь устройства типа кофемашин запускать или другие, которые просто при подаче питания от умной розетки не входят в рабочий режим
1 жрут диски копейки
2 надёжность ухудшается, тк они дольше проживут, если не дергать питание…
говна на вентиляторв топку обсуждений.Физическое отключение HDD для бэкапов Synology