Авторизация
Регистрация

Напомнить пароль

Удаленное управление питанием внешнего жесткого диска

Может быть вам нужно удаленно управлять питанием внешнего кармана с жестким диском, например, для бекапов с NAS? У вас есть полуумный дом?
В моей локальной сети работает сетевое хранилище 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. Не забывайте делать бекапы всего и вся. Возможно, когда-то это сохранит вам нервы и время.
Добавить в избранное
+28 +34
свернутьразвернуть
Комментарии (56)
RSS
+
avatar
+10
  • vlo
  • 23 октября 2025, 14:09
— при включении реле сначала подать на HDD напряжение 5В, а через 0,5-1 сек подать 12В
— при выключении реле сначала снять с HDD 12В, а через 0,5-1 сек снять 5В

а эта самодеятельность зачем?
+
avatar
+3
Вероятно, бессмысленная попытка сначала запитать цифровые, затем — силовые цепи.
+
avatar
+3
  • Skylab
  • 23 октября 2025, 14:41
А вообще последовательность имеет значение? Как показала практика использования внешних HDD (док-станций), не имеет. Можно подать вначале +12в, а затем подсоединить USB-кабель. И наоборот…
+
avatar
+3
  • vlo
  • 23 октября 2025, 14:47
у совсем ископаемых вроде бы имела одновременность вплоть до несчастных случаев при подаче чего-то одного. сравнительно современным пофиг, отчего усложнять ради нестандартных и нерегламентированных последовательностей незачем.
+
avatar
0
  • Alpa
  • 23 октября 2025, 18:26
… усложнять ради нестандартных и нерегламентированных последовательностей незачем.
Не как претензия, а мне для саморазвития. Есть ли вообще стандартная или регламентированная последовательность? В каком-то стандарте или спецификации это можно найти?
+
avatar
0
  • SAIRUS
  • 23 октября 2025, 18:41
Встречный вопрос а в какой последовательности появляется питание на ATX БП?
+
avatar
0
  • OlegDDL
  • 23 октября 2025, 18:54
Не знаю как в последних блоках питания, но пару лет тому никакой коммутации подачи каналов питания не было.
+
avatar
0
Ну вот такая у ТС паранойя.
+
avatar
0
  • kven
  • 23 октября 2025, 15:46
усб же не питает док, от 12В через понижайку до 5/3В напряжение идёт на контроллер
+
avatar
0
  • Alpa
  • 23 октября 2025, 18:28
А вообще последовательность имеет значение? Как показала практика использования внешних HDD (док-станций), не имеет. Можно подать вначале +12в, а затем подсоединить USB-кабель. И наоборот…
Вы уверены, что 5 вольт для HDD ваша док-станция берет именно из USB?
+
avatar
+6
Сразу вспомнился ВГ93 от Спектрума! )
+
avatar
0
  • zoog
  • 23 октября 2025, 16:43
Когда-то по слухам диски выходили из строя при пропадании +5, возможно, страховка от этого.
+
avatar
+1
  • vlo
  • 23 октября 2025, 17:54
что-то такое бывало в допотопные времена, не актуально.
да и тут про контроль наличия ничего не сказано, только про дополнительную задержку.
+
avatar
+1
Занятная идея, но я по старинке — после бакапа физически отсоединить и убрать HDD подальше.
+
avatar
0
  • aliex
  • 23 октября 2025, 15:38
1) для этого надо физически быть рядом
2) это убивает бэкап по расписанию
+
avatar
0
Бакапов много не бывает. По расписанию — в другое место.
+
avatar
0
  • aliex
  • 23 октября 2025, 18:21
Именно. Вы говорите о другом кейсе.
+
avatar
+2
  • fps
  • 23 октября 2025, 14:22
Зачем дергать питание?
Засыпать диски в вашей вселенной всё еще не научились?
+
avatar
+2
  • ABATAPA
  • 23 октября 2025, 15:29
Я уж не говорю про WoL…
+
avatar
+1
  • Alpa
  • 23 октября 2025, 15:32
NAS включен постоянно, диски внутри никогда не засыпают. WoL здесь не при делах, нечего будить
+
avatar
0
  • tirarex
  • 23 октября 2025, 16:49
Truenas может отключать диски без всяких реле.
+
avatar
+1
  • ABATAPA
  • 23 октября 2025, 17:16
Так включите idle timeout у дисков, либо штатными средствами NAS, либо сторонними. Или пошлите диску
standby immediately или sleep immediately. Разумеется, лишь после того, как отмонтируете тома, сделаете sync и сбросите кэши. А то у Вас
«при пропадании тома выключает реле. „
Но это лишь уровень SMB (если у Вас не экспорт iSCSI) на устройстве-клиенте, внутри NAS эти разделы смонтированы и то, что клиент отключил сетевой том, никак на сервер не влияет. Вы вообще это как-то учитываете?

Напоминает мне одну историю из 90ых. В одном серьёзном бюджетном учреждении федерального уровня в СПб уволили сисадмина. У них был сервер с Sun Unix (да-да!), но на ночь все электроприборы отключались. И сервер тоже. Т. к. никто не умел его отключать правильно (даже зайти root-ом и сделать shutdown было некому), то его просто “рубали», а утром кто-то (по графику) приходил на 40 минут раньше и включал его. И он 40 минут «чекал» файловую систему… И так это работало многие месяцы (пока не накрылось совсем).
+
avatar
+1
  • Alpa
  • 23 октября 2025, 17:27
Том отключается штатными средствами DSM, встроенным Hyper Backup после завершения задачи резервирования и удаления старых копий, автоматически. Планировщик лишь проверяет, что том отмонтировался, и спустя 15 секунд дает команду на отключение питания.
Что тут неправильно?
+
avatar
0
  • ABATAPA
  • 23 октября 2025, 17:31
Так я и спросил:
Вы вообще это как-то учитываете?
Если все ресурсы на диске отмонтированы (а при этом делается sync), то да, это безопасно для данных.
+
avatar
+1
  • Cregg
  • 23 октября 2025, 16:44
Засыпать диски в вашей вселенной
Не знаю как в Вашей, а в моей вселенной считается хорошим тоном физически отключать носители архивов… (с этой точки зрения решение автора обзора выглядит «несколько» половинчатым… с другой стороны — возможно что данные не настолько ценные и полноценный 3-2-1 ему и не нужен...)
+
avatar
+1
  • aliex
  • 23 октября 2025, 18:30
А в моей вселенной считается хорошим тоном прописывать модель угроз/рисков, а уже исходя из неё выбирать митигейшны. Отключать физически — это, к примеру, от прилетевшей по проводам молнии, а то, что здесь делается — прежде всего минимизация угроз логических повреждений.

Кстати, автор явным образом обозначил цель — «Держать постоянно включенным шумный и прожорливый жесткий диск — затея непродуктивная». Решение ей полностью соответствует.
+
avatar
0
  • Cregg
  • 23 октября 2025, 19:01
Отключать физически — это, к примеру, от прилетевшей по проводам молнии
Это лишь один «вектор», есть и совсем другие причины.
автор явным образом обозначил цель
Ну, значит я, как всегда, прав :)
+
avatar
0
  • aliex
  • 23 октября 2025, 19:04
Вот от причин и пляшем, а не от «считается хорошим тоном».
+
avatar
+1
  • GIPER
  • 23 октября 2025, 14:37
Держать постоянно включенным шумный и прожорливый жесткий диск — затея непродуктивная, поэтому специально обученный человек по моему звонку делал...
Кто-нибудь может мне объяснить, почему у него резервный диск не парковался, а всё время жужжал и жрал… кстати что он жрал?
+
avatar
+1
  • Skylab
  • 23 октября 2025, 14:43
Кто-нибудь может мне объяснить, почему у него резервный диск не парковался
Все современные HDD паркуются, когда к ним нет обращения. Видимо, это старые-престарые диски…
кстати что он жрал?
Что-что… колбасу_с_бутербродом… электроэнергию
+
avatar
0
  • zoog
  • 23 октября 2025, 16:45
Все современные ОС немотивированно дёргают все диски)
+
avatar
0
  • ABATAPA
  • 23 октября 2025, 17:19
С чего бы?
+
avatar
+1
  • vlo
  • 23 октября 2025, 17:55
потому что могут?
+
avatar
0
  • aliex
  • 23 октября 2025, 18:31
Не все, не всегда, конфигурируемо… но у человека Windows, так что делаем поправку.
+
avatar
0
  • SBVF
  • 23 октября 2025, 14:50
Может быть имелся в виду шум от вентилятора? Например, у WD Elements Desktop вентилятор довольно шумный.
Хотел было найти информацию об установленном вентиляторе в WD Elements Desktop, но в отзывах пишут, что в нём нет вентилятора. Я был на 200%, что в моём диске шумит вентилятор, т.к. рядом ещё лежит два внешних диска и мини-пк, но слышно только WD Elements Desktop.
+
avatar
+1
  • Alpa
  • 23 октября 2025, 15:02
Отвечу по поводу парковки внешнего диска при простое. Оно мне не надо, и я даже не проверял, уходит ли он сон.
Сам NAS хоть и чертовски хорош, но не идеален. Не хочется так думать, но что произойдет с ценными данными в случае его поломки, или при неблагоприятном сценарии с электропитанием?
На NASе настроены и бекапы внутри между томами. Но для меня внешний диск — это «холодный» резерв, которым рискую 15 минут в неделю.
+
avatar
+1
  • fps
  • 23 октября 2025, 15:19
резерв, которым рискую 15 минут в неделю.
Теперь нет.
Теперь его питание может быть дёрнуто программно в любой момент 24 * 7.
+
avatar
0
  • Alpa
  • 23 октября 2025, 15:34
Это точно, поэтому «холодный» резерв взято в кавычки
+
avatar
0
  • Siroc-co
  • 23 октября 2025, 15:11
Когда-то делал такое для SATA. В Xpenology было несколько дисков. А в эту локацию я ездил раз в три года… Вот пару дисков держал в резерве, но не в «горячем», а в подключаемом. Две бистабильных релюшки, для линии 5V и 12V.
+
avatar
+1
  • friday
  • 23 октября 2025, 15:26
У tuya есть usb выключатель. У меня одно время вентилятор охлаждал мини ПК с управлением на питоне по температуре.
+
avatar
+1
  • Siroc-co
  • 23 октября 2025, 17:43
У tuya есть usb выключатель.
USB 2.0 выключатель…
+
avatar
0
  • oleg235
  • 23 октября 2025, 18:50
У меня одно время вентилятор охлаждал мини ПК с управлением на питоне по температуре.
Ужас какой.
+
avatar
0
  • Dimonbig
  • 23 октября 2025, 15:34
Бред, конечно, вся идея, но я и призощренней встречал индивидуумов.
Я так понимаю, что Вы на внешнем hdd храните свою черную бухгалтерию на неприметной съемной квартире на окраине города?! Иначе смысла в таких извращениях нет
+
avatar
0
  • Alpa
  • 23 октября 2025, 15:46
Ну, вам виднее, что для вас ценнее, черная бухгалтерия или архив семейных фото
+
avatar
0
  • Siroc-co
  • 23 октября 2025, 17:54
Иначе смысла в таких извращениях нет
Поиск смысла зависит от широты кругозора и опыта, а так же от ценности, которую представляют данные.
Когда начался кошмаринг с шифровальщиками, я бекапы делал следующим образом:
1. Отключаем основной сервер от интернета и LAN,
2. Проверяем основной сервер антивирусом
3. Включаем и проверяем бекап сервер антивирусом
4. Подаём питание на Switch, который поднимает LAN между основным сервером и бекап сервером.
5. Делаем бекап.
6. Выключаем бекап сервер.
7. Вводим в работу основной сервер.
+
avatar
0
  • advik
  • 23 октября 2025, 15:45
Я пошел дальше — т.к. NAS у меня по сути это медиацентр то я управляю питанием всего NAS — выключаю и включаю от умного дома. При этом он вообще в далекую кладовку перекочевал и с кнопки не помню когда включал его. Продаются сейчас и под zigbee и wifi платки на PCI-e что дублируют кнопки вкл/выкл, reset. А ничего в целом не мешает в корпус поставить у умное zigbee реле, да хоть многоканальное и питать его от дежурки того что выполняет роль NAS. Но хватило типового решения.
+
avatar
+1
  • Alpa
  • 23 октября 2025, 15:49
Ваш случай не дальше и не ближе моего, он другой.
У меня на NAS куча веб сервисов, которыми я пользуюсь постоянно. Я не хочу отказываться от них, или подменять сторонними облачными услугами
+
avatar
0
  • advik
  • 23 октября 2025, 16:41
Ну как сказать… Там у заводского решения уже пара контактов сухих. И сам решаешь что ими коммутировать. Можно вместо сброса пк сделать управление питанием порта. Ну или в корпус уже продаются wifi и zigbee реле с низковольтным питанием уже готовых. Ими можно коммутировать различные напряжения питания и даже несколько. Есть сразу коммутаторы usb 5В. Удобно что фактически ничего мудрить и не нужно.
+
avatar
+2
  • Alpa
  • 23 октября 2025, 16:58
Я написал, что готовые рецепты уже попробовал. Захотелось приготовить что-то самому
+
avatar
0
  • 924800
  • 23 октября 2025, 17:21
А чем не устраивает НАС, и сделать копирование тупое по расписанию на диск? Который засыпать умеет. Или сделать в локалке еще один НАС и туда копию? Сейчас НАС запустить — пару часов на слабом пк.
4 таких отдельных НАСА, точно надежнее включения/отключения питания дисков постоянно.
+
avatar
+1
  • Alpa
  • 23 октября 2025, 18:23
Меня не устраивает копирование тупое, мне подавай резервирование инкрементное, с покером и казино
+
avatar
0
ESPhome выглядит как-то попроще. И нативно в HA интегрируется
+
avatar
+1
  • Alpa
  • 23 октября 2025, 17:30
Тасмота простая как солдатский сапог, и тоже нативно интегрируется. А как вы подключаете ESPhome устройства, находящиеся вне локальной сети?
+
avatar
+1
Переменный резистор для выставления 5 вольт лучше заменить на постоянный. Качество этих подстроечников так себе.
+
avatar
0
  • Kooonst
  • 23 октября 2025, 17:56
А мне вот интерестно сколько раз в сутки включается хдд. И непревышаетли потеря моторесурса при вкл/выкл экономию?
По моему так себе занятие…
+
avatar
0
  • Alpa
  • 23 октября 2025, 18:13
У меня он включается раз в неделю, думаю на ресурс моего энтерпрайз диска это не повлияет
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.