Мой сервер бэкапов

Дошли наконец-то руки сделать персональный сервер бэкапов, который будет стоять не у меня дома. С этой мыслью я уже несколько лет хожу, делал несколько подходов, но вот наконец-то звёзды сошлись — у меня и железка под него образовалась, и дисков в достаточном количестве, и ОС наконец-то более-менее подобрал.

В качестве железа выбрал старенький HP Microserver Gen7. Продавать большого смысла не видел, куда-то в продакшн ставить тоже — он почти на любой чих под 100% загружается, если какие-то сервисы вешать или просто в несколько потоков файлы по гигабитной сети копировать. А вот с простым хранением файлов он ещё справится.

3ed037f5eb6e731d7e4acf7ce281f00b.jpeg

Это не пошаговая инструкция, это больше небольшой отчёт на тему «как можно сделать», может кто для себя идеи почерпнёт.


Если же закрыть глаза на процессор, то в остальном из микросервера получается вполне достойный NAS — четыре-пять слотов под 3.5″ диски, плюс можно внутри корпуса кинуть SSD, благо имеется пять SATA-портов и внешний e-SATA, который я завёл внутрь.

701ab91227ebd26c268f84f4b6ab0c16.jpeg

Первый раз я более-менее серьёзно пытался подойти к задаче в начале года, поставил было на него TrueNAS Scale. Но, но по дискам у меня была сборная солянка от 3 до 6 терабайт, да ещё с самые большие диски были SMR. А truenas — это zfs. А zfs — это враг черепичных дисков (ну или черепичные диски — враг smr). Плюс, даже если считать, что диски все CMR, собирать массивы на zfs их разных дисков нерационально. Либо большие потери, либо придётся кроить и попадать на потерю ёмкости или головную боль при возможной замене дисков.

Потому TrueNAS снёс, сервер отложил. В начале лета снова вернулся, решив поставить на него Open Media Vault 7.

dd13d5ebf389b5ceea9750b119cef53a.png

Объединил диски при помощи mergerfs, а избыточность захотел получить при помощи snapraid. Некоторое время поигрался со всем этим и понял, что сегодняшний OMV мне сегодня нравится ещё меньше, чем TrueNAS. От системы плагинов уже почти ушли, а к нормальной поддержке докера всё ещё не пришли. Да и веб-интерфейс его мне никогда особо не нравился. Хотя чего у OMV не отнять — это того, что он на любой табуретке запускается, к ресурсам совершенно не требователен. Но в остальном у меня создаётся ощущение, что разработчики сам пока не знают, что хотят получить в итоге. Потому для меня OMV — это дистрибутив для простейшей файлопомойки на слабом железе для тех случаев, когда хочется иметь хоть какой-то веб-интерфейс и не хочется использовать zfs. Если же железо позволяет — лучше смотреть на другие варианты.

Но тут у меня наконец-то образовалась пачка одинаковых по объёму дисков, да ещё и не черепичных. Потому решил дать TrueNAS второй шанс. Тем более, что в свежей бете (Electric Eel) они наконец-то прикрутили более-менее нормальную поддержку докера, переходя на него c kubrnetes.
Что совпало со смертью каталога приложений TrueCharts, который до этого был основным источником контейнеров для TrueNAS Scale.

Но для меня, как человека, который и с докером-то пару-тройку лет назад только общаться начал, а про kubernetes слышал только что «это какие-то контейнеры для энтерпрайза», такое стечение обстоятельство только на пользу.

Так что в итоге железо у меня получилось такое:

HP Microserver Gen7, с процессором AMD Turion II Neo N40L — 1,5GHz, 2 ядра (по производительности это примерно Rasperry Pi4).
16 GB оперативной памяти (обычной, не ECC)
4 диска по 6TB, один диск на 4TB и SSD на 500GB.
Дополнительно поставил USB-контроллер и вторую сетевую карту (пока гигабит, потом на 2.5 заменю).

ОС — TrueNAS SCALE 24.10

799230670aea809a1020281db60007c2.jpeg

Про установку писать не буду, там всё несложно — загрузился с CD, поставил ОС, зашел через веб-интерфейс — пользуешься.
Разве что по мелочи:

1. Загрузочным диском я выбрал USB-флэшку Sandisk Extreme на 32 гигабайта. Вообще, это не особо приветствуется, как я понял, но Sandisk Extreme — это очень выносливые флэшки, в отличие от всяких там Ultra. А флэшку на 32 гигабайта мне использовать особо некуда было, объём маловат. Так что пригодилась. Благо у сервера есть внутренний USB-разъём.

2. Когда установщик спрашивал про EFI, я решил было, что у меня система старая и пусть лучше Legacy-загрузчик сделает. Как выяснилось, это было ошибкой — установка прерывалась с сообщением «не могу найти sda3». Некоторое время повозился с конфигами (ошибка не особо редкая, рекомендовали вставить в скрипт установки sleep 20), но в итоге всё решилось просто ответом «Да» на вопрос про EFI.

3. Изначально я ставил стабильную версию, 24.04. После установки как раз и узнал про то, что каталог приложений TrueCharts помер, а сам TrueNAS Scale движется в сторону докера. Потому просто обновил систему через встроенный апдейтер до 24.10, даже переустанавливать не пришлось.

Диски

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

SSD планирую использовать для установки приложений.

А оставшийся диск на 4ТБ — под что-то типа архива и бэкапов бэкапов. Да, он будет работать без резервирования, но даже если помрёт, то на нём будут только копии копий находиться и вообще не особо важные данные вида «не хочется потерять, но не настолько важные, чтобы пихать их на основной массив».

Задачи сервера

Основная — оффсайтовый бэкап для домашнего сервера. Не всего подряд, само собой — дома у меня занято 30 терабайт, но того, что действительно жалко потерять, там порядка 3–4 терабайт. Пока эти бэкапы делаются в вандрайв (с шифрованием), но там подписка через год заканчивается и особого желания её продлять у меня нет — терабайтных облачных хранилищ у меня и так достаточно, офис 2010 или 2013, на которые у меня есть лицензии, для моих нужд ничем не хуже, чем офис365.

Вторичная — резервный сервер для некоторых сервисов, которые крутятся на домашнем сервере. К примеру, бывает полезно иметь второй инстанс сервиса, если к основному нет доступа. Пусть даже и БД этого инстанса не очень актуальна. Примеры — RSS-читалка (freshrss), vaultwarden (менеджер паролей), мониторинг аптайма (uptime kuma) и прочие мелочи, которые не требуют много процессорной мощности.

Установка приложений

Поскольку версия truenas пока ещё в бете, библиотека приложений тут достаточно ограничена, хотя и пополняется потихоньку — несколько дней назад было 96 приложений в каталоге, сейчас уже 102. А свои приложения так сразу непонятно, как добавлять. Раньше была кнопка «добавить контейнер», сегодня же её не видно. Конечно, можно зайти в консоль и оттуда вводить команды докера, но не затем я уходил с OMV, чтобы с консолью возиться.

3976f0a57a192910c6f7093697a05439.jpeg

В репозитории имеются portainer и dockge. Portainer лично мне кажется слишком уж замороченным для простой задачи «поставить контейнер». Он слишком много умеет и глаза от этого разбегаются. Потому я его максимум ставил для того, чтобы мониторить работу контейнеров. А конфиги писал и ставил всё из консоли.

А вот dockge прост и лаконичен, если речь идёт просто об запуске контейнера. Вставляешь в поле текст yml-файла, запускаешь.
Либо скармливаешь ему команду вида docker run — он её преобразует в конфиг, читаешь — редактируешь по потребности — запускаешь.

92a91aa7499fcef03c3d67270bd4d33a.jpeg

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

При этом dockge видит «чужие» контейнеры (которые truenas ставил), но рулит только своими. Это мне кажется удобным компромиссом — что можно ставишь из админки truenas, что нельзя — через dockge. Когда это что-то добавится в truenas — ну или когда там вернут полноценную работу с контейнерами — можно будет аккуратно мигрировать.

Доступ к серверу «из мира»

Я не стал выставлять сервер в мир, он смотрит только в провайдерскую сеть и имеет приватный IP, что в данном случае меня вполне устраивает — дома есть подключение к тому же провайдеру, потому можно не задумываться о пробросах портов и т.п.

С другой стороны — к некоторым сервисам хочется иметь доступ извне, если уж делать тут резервный инстанс. Можно было бы сделать проброс портов с моего vps, допустим, но в данном случае мне проще было воспользоваться туннелями Cloudflare (cloudflared). Да, это опять привязка к третьей стороне, от которой я как бы ухожу, но, в данном случае, она не критичная. Если вдруг cloudflare отвалится, никто не мешает вернуться к вариантам с VPN, пробросом портов или просто купить реальный IP.

Технически это всё выглядит следующим способом:

В админке Cloudflare в разделе zero tier создаёте туннель, он вам говорит ID туннеля.

На своём сервере (или вообще на любом компьютере) ставите демон cloudflared и в настройках ему указываете ID туннеля. 
И дальше со стороны сервера указываете поддомен, к которому хотите обращаться к сервису и локальный порт этого сервиса.
Единственное ограничение — доменом должен рулить cloudflare. Не обязательно его там покупать (хотя я купил специально под это дело отдельный домен), но DNS должен быть прописан тамошний.

Тут два туннеля — на админку и на контейнер с librespeed.

de1be70c25194aec213a8623808159f5.jpeg

Скорость, по ощущениям, режется втрое, но тут мне сложно сказать, кто виноват — туннель такой медленный или микросервер не тянет.
Впрочем, на меня одного для доступам к мелким сервисами типа пинговалки или vaultwarden«a такого туннеля вполне хватит.

Если измерять скорость через вышеупомянутый librespeed, то при прямом подключении — практически заявленные 100 мегабит.

c70771dcbb94212515bbb33da8c439d9.jpeg

А вот через туннель 40 мегабит — это максимум, который удалось получить. Чаще же в районе 25–30 болтается. Впрочем, это терпимо, если не качать большие объёмы данных.

b69cb3bbbdb9a5e6853cff764e09872c.jpeg

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

Бэкап как таковой

Можно пользоваться чем нравится, я пока что прикрутил остановился на двух способах.

Cамое большое и важное, что у меня надо сохранять — это фотографии за много лет, которых уже порядка двух с половиной терабайт. Раньше они у меня через syncthing копировались на домашний сервер, а оттуда при помощи duplicati заливались в onedrive. Так что просто добавить ещё один инстанс syncthing«a смотрелось вполне логично. Ну и дальнейшую работу, наверное, большей частью буду в рамках syncthing«a организовывать. Хотя можно и любые другие протоколы использовать при необходимости.

Syncthing есть в каталоге приложений, ставится без вопросов. Само собой, надо в контейнер папку подмонтировать, куда бэкапы складывать. Сперва я посмотрел, как оно работает через глобальное обнаружение и посредников — вышло не очень. Максимум видел порядка 50 мегабит скорость, а так вообще колебалась в районе 10–20 мегабит. Два-три терабайта так качать совсем не хотелось.

b0b54ba230429fd2ef084d317a63e92d.jpeg

Потому настроил прямое подключение с домашним компьютером, выставив наружу порт syncthing«a на домашнем роутере. Так добился полной скорости — 100 мегабит, больше провайдер не предоставляет. Загрузка процессора при синхронизации колеблется в районе 70%.

Второй способ — копирование данных с линуксовых серверов через rsync. Тут всё просто, был бы доступ к серверу по ssh. В настройках TrueNAS есть rsync tasks, просто добавляешь туда что откуда копировать, настраиваешь расписание — и вперёд.

07dee92913213c6446df8df872b7fe2e.jpeg

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

Планы на будущее

Из аппаратного:
Постараюсь заменить память на ECC, после приколов с домашним сервером я стал к этому более серьёзно относиться. Но новую память по 7000 за модуль брать жаба не даёт, а али завалено регистровой памятью, которую микросервер не понимает. Так что придётся искать на барахолках, что дело не быстрое.

Заменю гигабитную сетевушку на 2.5 гигабита. Это для «внутренней» связи — на работе кроме микросервера у меня стоит небольшой вебсервер, который я перепрофилирую в ноду proxmox — с него тоже надо будет делать бэкапы, так что пусть они делаются на большей скорости. Ну и свой рабочий компьютер тоже добавлю сетевушку на 2.5 и воткну в тот же свитч.

Может быть, сниму контроллер usb-3 и поставлю вместо него переходник на nvme-диск — под кэш для массива.

По самому микросерверу — я не могу его рекомендовать, если вы собираете сервер совсем с нуля. В gen7 из полезного — только корпус на 4–5 дисков. Но нормально он себя ведёт только в связке с родной материнкой, если же её захочется обновить — то усилий по допиливанию корпуса под miniITX будет затрачено довольно много. По мне так проще потратиться на какой-нибудь китайский корпус, типа jonsbo и там уже собрать систему на нормальном железе. Я же микросервером воспользовался просто по той причине, что он у меня имелся и по производительности более-менее устраивал. Иначе бы взял Jonsbo N2, очень симпатичный корпус, хоть и не очень бюджетный. Или N1.

Из программного:
Дождусь релиза TrueNAS 24.10.

Прикручу бэкапы со своих облаков (вандрайв, мэйл, яндекс).

Настрою бэкап почты с тех же gmail«ов и яндексов.

В остальном я не вижу каких-то серьёзных путей для развития. Основное всё сделано, а дальше уже только использование по назначению остаётся. Все эксперименты и тяжелые задачу пойдут на второй сервер (который с proxmox«ом). Но это отдельная история, отдельной статьи не заслуживающая, материалов на тему «как я поставил proxmox» от людей, которые в этом разбираются больше меня, в сети навалом в любых видах.

© Habrahabr.ru