← все системы
05 · своё железо · 2026

NAS

домашнее хранилище, которое само за собой следит

Папки в сети, бакеты с входом S3, медиатека с телефонов и из iCloud, здоровье дисков и третье место для бэкапов наших проектов — на одном ящике дома, рядом с TrueNAS. Две недели от первого выпуска до ежедневной работы.

14дней от первого выпуска74выпуска за эти дни95 203файла из iCloud — без единой записи в iCloud
ZFSS3медиатекабэкапы проектовздоровье дисков
движок
Rust
сервер
PythonFastAPI
данные
PostgreSQL
интерфейс
ReactFlutter
инфраструктура
nginxDocker
ещё
ZFSTrueNAS
01 Задача

Дома — ящик с шестью дисками и TrueNAS. Он хранит, но ничего не рассказывает: что с дисками, куда ушло место, дошли ли копии. Фото живут в iCloud, старые архивы — по флешкам, бэкапы наших проектов — только у облачных провайдеров. Нужна была одна панель, которая хранит всё это и сама говорит, когда что-то не так.

02 Фундамент

NAS вырос из ядра нашей платформы: та же панель, роли, пуши, бэкапы, мониторинг. Своё — поверх: пул ZFS, бакеты, медиатека. Ставится рядом с TrueNAS и ничего у него не отнимает — всё своё лежит в одном наборе данных, а сам пул отпирает и монтирует TrueNAS.

03 Бакеты с входом S3

Хранилище объектов, совместимое с S3: файл на диске и строка в базе. Совместимость проверяем настоящими клиентами — boto3, aws cli, rclone, подпись сверена с эталонами AWS. Ключи — с правами на бакет и префикс, права меняются без перевыпуска, неизменяемые бакеты не дают переписать выложенное.

Панель NAS, «Бакеты»: ключи доступа S3 — у каждого устройства и сервера свой
Ключи S3: у каждого устройства и сервера свой
04 Медиатека

Своё приложение на Flutter с ядром на Rust выгружает снимки с iPhone в фоне. Перенос из iCloud забрал 95 203 файла — и не изменил в iCloud ничего: методы записи заглушены, раскладка ключей та же, что у приложения, поэтому дублей нет. Старые фото с камер ложатся импортом: дата из EXIF, дубли — по sha256 во всей медиатеке, RAW и JPEG одного кадра склеиваются в один снимок.

Панель NAS, «Импорт снимков»: отчёт по папке старой камеры — годы, даты, дубли
Импорт старой камеры: годы, даты не из EXIF, дубли

В ленте — лента как на телефоне: Live, правки, удаление в «Недавно удалённые» на 30 дней. Поворот и обрезка с наклоном не трогают оригинал: ящик собирает копию рядом, вернуть исходник — одна кнопка.

Панель NAS, «Фото»: медиатека по дням — Live, ролики, избранное, переход к месяцу
Лента медиатеки: по дням, Live и ролики
Панель NAS: правка снимка — наклон, пропорции, оригинал не меняется
Правка: наклон и пропорции — оригинал цел
05 Диски

Сборщик раз в пять минут снимает пул, SMART и то, что знает TrueNAS. Панель объясняет словами и даёт команду. Ящик помнит историю счётчиков: тревога — не на «36 ошибок за жизнь», а на рост за неделю — растут ошибки кабеля, значит, пора переткнуть кабель. У дисков Seagate сверяет часы SMART с журналом FARM: сброшенный счётчик выдаёт восстановленный диск. Проверка пула — полосой: сколько проверено и когда закончит.

Панель NAS, «Диски»: пул ZFS, идущая проверка пула и тревога по кабелю диска
Диски: идущая проверка пула и тревога по кабелю
06 Третье место для бэкапов

Ящик дома за NAT, и серверы проектов до него не достают. Поэтому туннель открывает сам ящик: на сервере он виден обычным S3-адресом, а ключ ящика там умеет только этот проброс — без входа и команд. Четыре боевых проекта шлют сюда шифрованные копии рядом с облачными. Когда два туннеля вели на один сервер под разными именами, ящик это и показал — до того, как копия понадобилась.

07 Живьём

Процессор, ядра, память, сеть, температуры — по сокету раз в 2–3 секунды, режим Live на любом графике. «Ресурсы» раскладывают процессор, диск и сеть по статьям: перенос из iCloud, импорт, проверка пула, система. Обновление — кнопкой: только выпущенная версия и только вперёд, а в панели видно, что придёт и что стоит.

Панель NAS: температуры процессора, NVMe и дисков за сутки
Температуры за сутки: процессор, NVMe и диски
08 Результат

14 дней от первого выпуска до ящика, на котором живут фото семьи и копии проектов. 74 выпуска, у каждого — проверки на стенде настоящими клиентами. Ящик пережил ребут посреди записи: пул цел, задачи продолжились с того же места, а история SMART показала, какой кабель проверить.

экраны — настоящий интерфейс · данные на них демонстрационные