habrahabr

Собираем бюджетный домашний NAS на 14 ТБ. Часть 2 — софт, железо и всё такое

  • вторник, 22 октября 2024 г. в 00:00:04
https://habr.com/ru/companies/ruvds/articles/848290/


Сборка из статьи «Собираем бюджетный домашний NAS на 14 ТБ» и по сей день работает прекрасно, позволяя взаимодействовать с файлами по сети через SMB шару. Но мои задумки обширнее того, что реализовано сейчас. Об апгрейдах, новых приложениях и разных удобных фишках TrueNAS поведаю далее в статье.

▍ Подключаем UPS


Апгрейды и софт – это хорошо, но надо позаботиться о сохранности данных при внештатных ситуациях, например при отключении света. ИБП у меня уже стоит, но хватает его буквально до получаса, после чего он отрубает выход. Хотелось бы, чтобы сервера заранее выключались без потери данных.

У меня стоит простенький Legrand Keor PDU 800ВА. USB – единственный способ коммуникации, что он поддерживает, поэтому подключаем его кабелем к NAS и идём в сервисы, где нужно активировать UPS.


Настройка была максимально простой. Выбрал свой бесперебойник в драйвере и UHID в порте. UPS без проблем определился и заработал.


В условиях выключения настроил так, что если UPS перешёл на батарею, то сервер ждёт 120 секунд и выключается, если электричество не вернули.


Проверка этой системы прошла успешно. Пару раз свет выключали на несколько секунд, UPS включался, но NAS не выключался. А когда я решил заменить розетку и возился минут 15, NAS спокойно выключился.

▍ Улучшаем охлаждение


При сборке я оставил вентиляторы Sunon. Они достаточно тихие, если сравнивать с ноунейм 80 мм вентиляторами, но все же шумные в постоянной работе, и глубоко ночью (когда муза для статей просыпается) их гул давит на уши. В связи с этим я решил заменить их на что-нибудь потише.

Прошерстив рынок, пришёл к таким вариантам:

Max dB Max Airflow m3/h Max RPM Pressure (mm H2O) Connection Цена (ШТ)
be quiet! PURE WINGS 2 19.2 44.45 1900 1.2 4pin PWM 718 руб.
Noctua NF-A8 PWM 17.7 43.9 2200 2.37 4pin PWM 1800 руб.
ARCTIC P8 PWM PST 22.5 39.76 3000 1.9 3pin DC 650 руб.
Noctua, как всегда, на высоте как в параметрах, так и в цене, да настолько, что отпали сразу. ARCTIC хороши, но шумноваты и только DC подключение, а я бы хотел избавиться от резистора и дать управление материнке по ШИМ. В итоге остались be quiet!.. Их я и купил новые с гарантией на «Озоне».

LNA адаптер от Noctua я убрал и в БИОСе чуть-чуть понизил обороты на Chasis вентиляторы.


Результат просто космический. Ушло шипение подшипников и гул моторов. Теперь из всего сервера услышать можно только шум дисков при активной работе. Судя по отчётам, температура дисков никак не изменилась.


▍ Добавляем оперативную память


Выбранная мною бюджетная платформа имеет много ограничений. Например, всего 4 SATA порта, а это значит, если я поставлю дополнительный SSD, а то и два для приложений, то банально не остаётся портов для SSD, которые я мог бы использовать в качестве кэша к основному пулу. В таком случае есть только один вариант ускорения без замены материнки – увеличить оперативную память, в которой живет ZFS кэш.

Но тут есть свои нюансы, советую изучить пару отличных статей на эту тему: тут и тут.

Если говорить кратко, то ARC кэш, который живёт в оперативке, работает в основном на чтение часто используемых файлов и на очень короткий промежуток времени на запись. То есть если просто копировать большой объём данных на NAS, то смысла в апгрейде памяти почти нет. Но если активно работать с файлами по сети, то они залетят в кэш и за счёт огромной скорости работы оперативки файлы будут доступны без задержек от жёстких дисков. Это как раз мой юзкейс при работе с монтажом видео и обработкой фото.

В оригинальной сборке я поставил 16 ГБ DDR4, что даже с запасом для домашнего хранилища. На кэш выделялось около 12 ГБ, а после установки приложений места стало ещё меньше, поэтому планки было решено продать и взять что-то побольше.

В итоге после поисков и разговоров с продавцами удалось найти комплект Crucial, 2 планки по 32 ГБ 2666 МГц CL19 за 9 тысяч рублей (что больше, чем весь бюджет прошлого сервера...). Но с учётом продажи старой памяти цена такого комплекта становилось уже психологически приемлемой, и я его купил.

Установка банальная, просто меняем старые планки на новые. BIOS даже не ругался на новую память, и система стартанула без проблем. Перед запуском TrueNAS я провёл повторные тесты памяти через Memtest86 и tm5 в Windows, проблем не обнаружено.

Перед апгрейдом дела в системе обстояли так:


При копировании файлов (папка 50 ГБ) первые гигабайты залетали на скорости около 8 Гбит/сек, кэш кончался мгновенно, и остальное копирование шло на скорости 1,3–1,7 Гбит.


Теперь дела обстоят так:


При копировании больших объёмов мелких файлов скорости кардинально выросли. Забавно видеть, как передача файлов завершена, а диски ещё какое-то время трещат, записывая данные из кэша.


Копирование набора больших файлов показало минимальное улучшение, кэш стал быстрее и держаться дольше, но не в 4 раза.


Зато когда файлы в кэше, скорость доступа к ним от 3,8 до 9,8 Гбит/сек, при этом в кэш честно залезло 50 гигабайт данных.

То, что надо для активной работы с фото/видео прямо на NAS, без копирования сырых материалов на основной ПК.


Для интереса прогоним тест CrystalDiskMark и сравним с тестом из прошлой статьи, где стояло всего 16 ГБ памяти.


В итоге получил то, что хотел, но, думаю, пожадничал, 32 ГБ было бы сильно дешевле и хватило бы с небольшими компромиссами.

▍ Делаем бекапы с Proxmox на Truenas


На моём основном сервере стоит Immich, он занимается сбором фотографий с мобильных девайсов, по сути, удобнейший аналог Google Фото. Для сохранности файлов я, конечно же, делаю бэкапы каждую неделю, но хранить несколько бэкапов по 500 гигабайт на быстрых SSD дисках банально дорого. Поэтому бэкапы я решил перенести с основного сервера и его NVME диска на NAS.

Для этого я в рамках основного пула создал ещё один датасет и назвал его NFS Share.


Далее в шарах в NFS добавил свежесозданный датасет и добавил ему юзера Root.



После чего активировал сервис NFS.


В Proxmox всё просто. Идём в Datacenter — Storage, жмём Add — NFS, вводим название шары (любое), IP адрес TrueNAS сервера и выбираем папку экспорта. В контенте можно выбрать то, что должно храниться на нашем сервере. На скриншоте выбраны ISO образы и бэкапы.


Если всё сделано верно, то наша шара появится в списке устройств слева и мы сможем общаться с ней.


Теперь, когда всё работает, можно настроить новую задачу для бэкапов, но уже на NAS. Для этого идём в Datacenter — Backup, жмём ADD и настраиваем новую задачу для бэкапов. В моём случае выбрана VM с фотографиями, TrueNAS хранилище, и бэкапы каждое воскресенье в 3 утра. В Retention я оставил 2 последних бэкапа.


Когда всё настроено, можно произвести тестовый бэкап. Виртуалка с диском объемом 512 ГБ бэкапится 25–35 минут. Средняя скорость была в районе 200 мегабайт/сек, при 10 Гбит соединении между сервером и NAS. Все уперлось в скорость дисков и кэша.


▍ Добавляем шару как диск с буквой


Мелочь, но позволяет программам обращаться с шарой как с обычным диском в системе. Для этого в Windows 11 жмём на три точки и выбираем пункт Map network drive.


В появившемся окне вводим адрес до нашей шары и даём ей букву диска.


После успешной настройки добавленная сетевая папка будет отображаться как диск, а её адрес сменится с сетевого на локальный (прим. O:)


▍ Ставим приложения из магазина на SSD


В TrueNAS SCALE есть собственный магазин приложений. По своей сути это Docker образы, но с удобной установкой в пару кликов и приятным интерфейсом для настройки параметров.
Полный список готовых приложений можно посмотреть тут.

Для этих приложений требуется место, их можно ставить на основной пул с жёсткими дисками, но они очень активно читают и пишут свои временные файлы и конфиги, отчего жёсткие диски в постоянной работе (шум / нагрев / потребление энергии), и в идеале выделить для этих приложений свой отдельный диск, оставив ссылки к основному HDD пулу на общие папки с файлами. Бонусом такой подход позволяет быстро удалять и переустанавливать контейнеры, не теряя контент.

Картина после установки диска и приложений. SDB — это HDD из пула, куда, судя по пикам, что-то скачивал торрент. А SDC — это SSD диск с приложениями, куда постоянно, хоть и по мелочи, обращаются приложения.


Вооружившись этой идеей, я нашёл 1 ТБ SATA SSD в закромах. Это простенький Toshiba Kioxia Exceria на 960 ГБ. В идеале поставить пару таких SSD в зеркало, но данные на нём будут не особо важные, поэтому пока остановился на одном диске без зеркала.

Установка простейшая, поставил диск, где было место, и подключил SATA кабель. В плане было распечатать каретку на 2 диска и закрепить у блока питания, но второго диска пока нет, поэтому диск просто закинут подальше.


В TrueNAS диск определился сразу, раз других нет, то делаю простой пул из одного диска. После создания на нём доступно всего 860 ГБ.


Теперь, если попробовать поставить любое приложение из магазина, нам предложат создать датасет, где можно выбрать наш пул на SSD диске и ставить приложения именно туда.


К слову о докере. На деле под капотом в данный момент стоит не докер, а Kubernetes. Он всем хорош, но даже в простое, даже без контейнеров один только Kubernetes сервис пожирает около 10–20 % производительности процессора (слабенького G4400). В обновлении TrueNAS SCALE 24.10-BETA.1 уже тестируют чистый докер, который значительно снизит нагрузку на систему.

▍ Скачиваем видео с YouTube на NAS в один клик


Для этой задачи я поставлю софт под названием MeTube. При установке откроется страница конфигов, тут можно выбрать папку, куда будет скачиваться контент. Для него я заранее создал папку в SMB шаре. И заодно выделил всего 1 ГБ памяти для данного контейнера, но на практике ему достаточно пары сотен мегабайт для работы.


Чтобы контейнер имел доступ к папке с файлами, я создал ему пользователя AppsWorker и поместил его в группу для SMB шары. ID группы и юзера и контейнера указал при настройке MeTube.


После настроек жмём на Install и ждём, обычно процесс идёт пару минут, но если он занял много времени, то можно зайти в логи контейнера и посмотреть на возможные ошибки.


А если всё встало хорошо, то жмём кнопку WebPortal и смотрим на наше приложение. MeTube оказался простым, но удобным инструментом. Вставляем ссылку на нужное видео или плейлист, выставляем удобные нам параметры и жмём на загрузку.


Загруженные mp3 можно скормить тому же Jellyfin, и в паре с Winamp или другим плеером использовать такую систему как местный Spotify с блэкджеком и любыми треками. Особенно радует возможность загружать джемы из YouTube, так как технически это просто плейлисты.

Кстати, всё это он делает без вашего присмотра, даже если вы закроете веб-страницу.


▍ Ставим своё Docker приложение


С магазином всё просто и понятно, нажал кнопки и работает, а как же дела обстоят с Docker приложениями, которых нет в магазине? На деле всё хорошо!

Жмём Discover apps — Custom APP на странице приложений, и нам откроется окно для установки своего приложения.

Для примера я решил поставить OpenSpeedTest, дабы проверить скорость соединения до NAS.

В инструкции к нему приведён пример запуска контейнера такой командой:

docker run --restart=unless-stopped --name openspeedtest -d -p 3000:3000 -p 3001:3001 openspeedtest/latest

Перенесём её в наш WebGUI в TrueNAS.

В название вводим что угодно, а в репозиторий указываем название пакета.


Для работы приложения требуется прокинуть 2 порта (3000 и 3001), делаем это. Так как TrueNAS не даёт использовать порты ниже 9000, ставим что душе угодно, например 9001 и 9000.


Для удобства можно настроить кнопку веб-портала, если вы не пользуетесь одним из множества дашбордов или закладками в браузере.


После настройки жмём Install и смотрим логи установки. Если всё прошло успешно, то идём в браузер и вводим адрес TrueNAS: выставленный порт и пользуемся приложением.

Пеньку в NAS почти 10 лет, а 10 гигабит для него вполне реальны.


▍ Immich как хранилище фотографа


Я занимаюсь фотографией как для обзоров, так и для души. Фотографий в таком ритме выходит очень много, и весят они много за счёт камеры с сенсором на 24 МП и RAW формата.

В TrueNAS доступно сразу несколько галерей, но с RAW фото могут работать только Immich и PhotoPrism. В итоге я выбрал Immich, так как мне нравится его интерфейс, он прекрасно работает с Sony .ARW файлами, позволяет удобно создавать альбомы с фото и имеет кучу мелких фишек, которых не найти в аналогичном софте.

Но стоит упомянуть, что Immich в очень активной разработке и любое обновление может что-то поломать в конфигах. Правда, у меня ни разу ничего не ломалось.

Перед установкой я подготовил структуру папок на SMB шаре:

  • Uploads – папка, куда заливаются фото после загрузки из веб-интерфейса.
  • Library – папка для хранения фото.
  • Videos – папка для видео.

Если фото много, то есть смысл создать ещё одну папку для превью файлов, дабы не хранить их на SSD.

Перед тем как натравливать Immich на папку со всеми вашими фото, я очень советую потренироваться на пустой структуре с папками, дабы ничего не поломать в пылу настроек!

Теперь идём в установку приложения и настраиваем папки для контента. В конфигах их сильно больше, чем я создал заранее, но я решил хранить на HDD только основные фото и то, что я залью, оставив сервисные файлы и превью на SSD диске.

Для настройки я выбираю HostPath и ищу нужные мне папки на диске в шаре.


Так как у меня уже есть готовая папка со всеми фото с камеры, в самом низу в разделе Additional Storage я добавлю ещё один путь с названием cameraroll и прокину путь до папки с моими фото. Таким образом контейнер сможет брать и видеть мои фото из папки, которую я сам пополняю, но при этом он не будет менять их название и переносить их по своим папкам!


Дополнительно я отключил все AI фишки (силёнок у сервера маловато для этих задач), убавил объём оперативной памяти контейнера до 4 ГБ (это минимум для его работы, контейнер будет падать, если установить меньше) и запустил установку.

После первичной настройки аккаунта мы получаем пустую страницу, даже если в нашей папке море фото. Дабы Immich увидел фото, идём в управление (кнопка справа сверху), на новой странице выбираем пункт «Внешние библиотеки» (на панели слева) и жмём кнопку создания библиотеки. В открывшимся окне выбираем пользователя, которому будет принадлежать эта библиотека, и создаём её.


Теперь, когда библиотека создана, нажимаем на три точки — «Изменить путь импорта», а дальше добавляем новый путь.

Ранее я указал путь /cameraroll, собственно, добавляем его. После добавления жмём три точки и проводим разовое принудительное сканирование пути. Сканирование 7 тысяч файлов заняло пару минут.


Если всё было сделано верно, а в папке есть фото, то мы увидим эти фото на главной странице. Если вместо фото показываются картинки с разорванным листом бумаги, то не стоит волноваться, это нормально, сервер подготавливает превью файлы для фото, и в зависимости от количества фото и мощности железа эта задача может занять значительное время (в моём случае примерно 5 часов).


Спустя примерно месяц пользования сервисом, и апгрейда памяти, я всё же включил AI фишки, выделил контейнеру 8 ГБ оперативной памяти и сделал сканирование. Медленный пенёк обрабатывал 1 ТБ фото в течении 7 часов. Теперь поиск позволяет найти объекты. Мелочь, а удобно.


▍ Качаем торренты прямо на NAS


Ставим QBittorrent с дефолтными настройками и юзером/группой, что создали для приложений. В путях загрузок указываем папку загрузок на шаре, там же можно сделать папку для конфига самого приложения.

QBittorrent, правда, каждые минут 10 дёргает свой конфиг, тем самым будит диски и создаёт периодический шум. В идеале конфиг также располагать на пуле с SSD диском.


Жмём на кнопку, что ведёт на веб-портал, и ловим ошибку — Unauthorized. Если у вас это произошло, то жмём там же на строку с адресом, жмём Enter, после чего откроется WebGUI.
В WebGUI вы, конечно же, не зайдете, ведь не знаете пароль. Чтобы его узнать, идём в логи контейнера и ищем такие строки, которые говорят сами за себя. После успешного ввода пароля надо идти в настройки в веб-морде и сменить его на свой, так как этот временный пароль меняется с каждым запуском контейнера.


Для красоты и удобства выкачиваю VueTorrent и распаковываю последний релиз в папку конфигов qBittorrent, после чего ввожу адрес /config/qBittorrent/vuetorrent в поле для альтернативного веб-интерфейса в настройках торрента.


Теперь можно качать любимые Linux ISO прямо на NAS при помощи самого NAS, да ещё и с красивым/современным интерфейсом!

Качает такая штука очень бодро, маленький пенёк загружен до 60 % при скорости 200–400 мегабит/сек.


Дабы не делать огромную мусорку из файлов, мы можем создать категории и сопоставить их с путями. Например, при загрузке торрента с музыкой мы можем выбрать категорию Music, а эту категорию сканирует тот же Jellyfin и сразу добавляет музыку в плеер.

В папке загрузок создаём папки для каждой категории, мои выглядят так:


Потом идём в настройки qBittorrent на вкладку тегов и категорий и добавляем категории с путями до их папок.


Теперь при добавлении торрента можно выбрать категорию, а она уже сама проставит путь загрузки.


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

▍ Смотрим кино через Jellyfin


Когда торрент настроен и качает всё по нужным папкам, мы можем установить Jellyfin, который будет сканировать эти папки и показывать их контент в удобном виде стримингового сервиса, а также позволит его смотреть через нативные приложения для телевизора и смартфона.

Для этого ставим приложение Jellyfin. Процесс настройки идентичен прошлым приложениям, но в Storage надо примонтировать папку с загрузками.


Также, если есть видеокарта, стоит пробросить её, дабы поддерживалось кодирование за счёт энкодера в видеокарте, а не за счёт медленных ядер процессора.


После установки производим настройку в WebGUI.


Добавляем ссылки на папки с загрузками на этапе добавления медиатек.



Теперь наш кинотеатр выглядит так. Можно зайти в любую категорию и смотреть контент.


Но так как в стандартных источниках данных нет поставщиков на русском языке, страницы контента выглядят очень куцо.

Для решения этой проблемы можно поставить плагин «Кинопоиска».


Идём в «Администрирование» — «плагины» — «репозитории» и добавляем репозиторий с «Гитхаба».


После чего идем в каталог плагинов и ставим его.

В идеале получить свой ключ, но на практике у меня работает публичный.


Стоковый Jellyfin выглядит совсем просто, для красоты я поставлю тему Scyfin. Для этого идём в «Администрирование» — «Общие», ищем поля для кастомного CSS и вставляем туда ссылку на CSS из темы.

<span class="hljs-keyword">import</span> url(<span class="hljs-string">'https://cdn.jsdelivr.net/gh/loof2736/scyfin@latest/CSS/scyfin-theme.css'</span>);

Больше тем можно найти на форуме. Теперь интерфейс выглядит чуть более современно.


Стоит сказать, что работает это всё достаточно хорошо, если никакого кодирования нет. Кино объёмом 90 ГБ стримится без проблем и просадок.


Но если устройство не имеет кодеков или выбрано меньшее разрешение, то кодирование требуется, и двухъядерный процессор с ним справляется туго. Время для апгреда? Ну или время запустить кино и подождать пару минут, дабы сервер перекодировал кино немного наперёд.

▍ Бэкап Google Drive / Dropbox на NAS


Собственно, актуальная инструкция тут:


Идём в Credentials — Backup Credential — Cloud Credentials и добавляем данные для входа в нужный вам сервис. Некоторые сервисы позволяют получить данные в один клик за счёт кнопки входа, другие имеют инструкцию, по которой надо получить данные и внести их вручную.


TrueNAS поддерживает много источников, даже «Яндекс».


Далее идём в Data Protection — Cloud Sync Tasks и добавляем задачу по синхронизации облачного хранилища с папкой на NAS.

При направлении PULL мы бэкапим данные с облака на локальный диск, но если выбрать PUSH, то мы будем бэкапить директорию с NAS на облако.


Когда задача создана, можно запустить её в первый раз вручную для проверки работоспособности.


Теперь, если какие-то великие силы закроют доступ к облакам, у меня останется копия данных, при том очень актуальная.

© 2024 ООО «МТ ФИНАНС»

Telegram-канал со скидками, розыгрышами призов и новостями IT 💻