От переводчика: это перевод первой части статьи George Georgovassilis Building the perfect, cheap DIY NAS
про его опыт самостоятельной постройки сетевого накопителя. Статья глубоко техническая, но даёт представление о процессе, даже если вы не понимаете всех деталей.


Этот пост активно обсуждался на Hacker News.

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

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

Накопитель по большей части хранит файлы (документы и медиа) в программном RAID6 массиве, и раздаёт их через сетевые диски Windows по локальной сети. Я остерегаюсь проприетарных вариантов NAS потому, что при отказе оборудования для восстановления данных потребуется точно такое же устройство. Каждый компонент, от жёстких дисков до материнской платы, в этом накопителе уже был заменен, иногда более одного раза в течение этого десятилетия, так что акцент на модульности окупился сполна. Также целостность данных и надёжность — это один из главных моментов, поэтому NAS должен использовать RAID с избыточностью.

В этой части:

Цели

Цель Описание Решение
Функция NAS используется как подключённая по сети файловая система для домашнего пользования, работает несколько часов в день, в остальное время — в режиме ожидания или отключён. Типовые детали, программное обеспечение с открытым исходным кодом, модульность, «не усложняй»
Совместимость Популярные компьютерные платформы должны иметь доступ к файлам на накопителе. Типовые устройства должны иметь возможность подключаться к накопителю. Samba (сетевые диски Windows) на Ubuntu, USB, SATA. Подключение сетевым кабелем к роутеру с Wi-fi, DNS и сервер времени. Подключение и управление через SSH.
Модульность Аппаратные и программные компоненты должны быть взаимозаменяемыми без необходимости переделывать всю систему. x86 PC, Linux, Docker
Контроль Я хочу управлять тем, какие именно программы установлены на NAS и что они делают Ubuntu 18.04 LTS
Целостность данных Файлы произвольного размера (в разумных пределах) должны храниться на накопителе и не гнить или терять целостность со временем RAID 6 с 4 жёсткими жисками, ext4fs с контрольной суммой, чисткой (checksumming, scrubbing), вручную собранный RAID массив, ECC RAM. Архивы подписываются par2.
Шум Уровень шума должен быть низким Жёсткие диски в режиме ожидания, SSD как основной диск для операционной системы, приоритет записи, много оперативной памяти, пассивное охлаждение
Цена Использовать типовые аппаратные компоненты и программы с открытым кодом Поддержанное «железо», жёсткие диски вместо SSD
Простое обслуживание Избежать длительного простоя Файрвол ufw настроенный на подключения только по локальной сети, никаких авто-апдейтов, ограниченный набор программ, Docker, сервер не доступен из интернета.
Безопасность данных В случае потери или кражи оборудования посторонние люди не должны получить доступ к данным dmcrypt с ключом на внешнем устройстве
Низкое энергопотребление Энергопотребление должно соответствовать основной функции сервера Компоненты в режиме ожидания большую часть времени, SSD, RAID в режиме write-mostly
Компактность Физические размеры NAS должны быть маленькими, не занимать лишнего места Подержанный HP Proliant Microsever gen8

Не-цели

  • Типичные задачи медиа-сервера: стриминг, кодирование, транскодирование и т.д.
  • Майнинг Биткоина
  • Торренты
  • Всё остальное 🙂

Добываем железо

Достать правильное железо — самое сложное, ведь оно станет платформой для модульности, определит стоимость, энергопотребление, размер и многие другие моменты, в которых я заинтересован. На рынке полно подержанных недорогих NAS-серверов, но мне не нравится идея закрытых аппаратных и программных систем. Например, если аппаратный RAID-контроллер хранит данные в проприетарном формате на жёстких дисках, мне нужен будет точно такой же контроллер для восстановления данных в случае, если этот контроллер выйдет из строя.

Размер также играет значение, т.к. сервер должен быть компактным, позволяя при этом запустить на нём Линукс. Такое найти довольно сложно, из-за того, что большая часть компактных накопителей — это проприетарные системы, которые не позволяют ставить сторонние операционные системы. Ещё есть много подержанных компьютеров и серверов на базе x86, но они обычно слишком велики или не имеют достаточного количества дисковых слотов или портов SATA. Подключать диски через USB — не вариант из-за низкой скорости, большего энергопотребления и ограничений по размерам. Первые несколько вариантов моего накопителя около 2010 г. использовали компактный корпус barebone, а позже — mini tower, в котором было 3-4 слота для дисков, но сейчас такие корпуса сложно найти. Это большая удача, если удаётся найти такой по нормальной цене!

В какой-то момент я натолкнулся на HP proliant microserver gen8 и с тех пор не жалел о своём выборе. Базовая модель поставлялась с 2GB ECC оперативки, 2-х ядерным процессором Celeron и без жёстких дисков по цене примерно в 100€. Есть отличный обзор этого сервера на Louwrentius. Сервер очень мал (примерно 26см по каждой стороне), довольно тих в режиме ожидания (хотя и не бесшумный), имеет пассивное охлаждение процессора, два гигабитных Ethernet порта, четыре слота под жёсткие диски 3,5″. Также в нём есть неочевидный пятый проприетарный слот под низкопрофильный диск 2,5″, который я использую для SSD. Слоты под жёсткие диски принимают диски напрямую, тогда как пятый слот требует 4-пиновый FDD кабель папа-к-SATA и SATA-кабель, которым SSD подключается к материнской плате. Бонусом от HP идёт технология ILO, которая позволяет удалённо подключаться к серверу через веб-браузер — не нужна дополнительная клавиатура или экран!

Надо признаться, что сервер не состоит на 100% из типовых компонентов — например, при отказе материнки или процессора, надо будет заказывать точно такие же (что, наверно, будет дорого) или придётся строить новый сервер на новой платформе. Тем не менее, оперативная память, сетевая карта и жёсткие диски — стандартные, и я использую Ubuntu, поэтому преимущества, приведённые ранее перевешивают этот риск. Уже шесть лет сервер работает без происшествий. Даже с учётом ошибки выжившего, я считаю, что этот подход сработал.

Когда я купил сервер, на нём была прошивка от 2014, и HP начал недавно выпускать бесплатные обновления, последнее из которых вышло в 2019. Я его установил и получил современную админ-панель на HTML5.

Сервер получил несколько апгрейдов за эти годы. От массива из трёх дисков по 2Тб в RAID5 к теперешнему варианту из трёх 6Тб + 1 8Тб + SSD на 512MB. Также был обновлён процессор на Xeon и оперативка до 16Гб ECC. Для SSD я использую внешние жёсткие диски — открываю, достаю сам диск, говорю гарантии «Пока!» — они дешевле, чем обычные внутренние SSD. Вначале это казалось удивительным, учитывая дополнительные компоненты, которые идут в комплекте (корпус, адаптер USB-SATA, кабеля, блок питания). Однако, гарантия и технические характеристики у них значительно ниже, чем у стандартных внутренних дисков, что и объясняет разницу в цене. Так как сервер использует RAID 6 (основная цель которого — пережить отказ дисков), то я думаю, что это допустимый риск.

Накопитель подключен через кабель к домашнему Wi-Fi роутеру. Скорость сети близка к 100Мбит/с, порты USB3 выдают около 40Мбит/с.

Установка

ILO  позволяет очень легко настроить сервер без клавиатуры и экрана. Вначале я поставил Ubuntu server LTS 14.04, потом обновился до 16.04 и сейчас использую 18.04. Апгрейды работающей системы не работали, каждый раз это была свежая установка.

Я рекомендую ставить виртуальную машину (например, VirtualBox) на основном компьютере, запускать Ubuntu Server 18.04 из образа и устанавливать её на один из жёстких дисков для NAS (потом ставить этот диск в накопитель). У меня не получилось настроить запуск через UEFI на микросервере Proliant, поэтому пришлось ставить через обычный загрузчик BIOS.

Четыре жёстких диска разбиты согласно схеме, приведённой ниже: 1Мб раздел в начале для GRUB, 50Гб для Ubuntu и 5,5Тб для RAID.

1MB bios_grub
50GB Ubuntu ext4
RAID 1
5.5TB Data
RAID 6

Перед этим я использовал другой установщик Ubuntu Server 18.04 для того, чтобы настроить разделы для Ubuntu как RAID 1 (который повторяет этот раздел на всех дисках). Установщик позволяет поставить Линукс в этот раздел для RAID 1, а GRUB может загрузиться с него. В случае отказа одного из жёстких дисков, достаточно просто извлечь его, и тогда сервер снова сможет запуститься.

Чтобы установщик заработал в RAID-массиве должно быть хотя бы два диска. Больше дисков можно добавить позже. Достаточно поставить GRUB на все диски так:
grub-install /dev/sdX

В моих первых экспериментах Ubuntu запускалась нормально, но не работали сетевые карты. Чтобы это исправить, надо немного поковыряться с netplan:

/etc/netplan/01-netcfg.yaml

1
2
3
4
5
6
7
8
9
10
11
network:
  version: 2
  ethernets:
    eno1:
      dhcp4: true
      dhcp6: true
      optional: true
    eno2:
      dhcp4: true
      dhcp6: true
      optional: true

От переводчика: это конец первой части. В конце недели выйдет вторая часть. Вторая часть.
Подписывайтесь, чтобы быть в курсе!

Опубликовано Алекс Бузник

Веб-программист и компьютерный энтузиаст со стажем. Интересуюсь и пишу про сетевые накопители.

Вливайтесь в общение

1 комментарий

Оставьте комментарий

Добавить комментарий

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: