Сегодня я расскажу о том, как обновлял домашний NAS.
Немного предыстории. Лет 5-6 назад я собрал самодельный NAS из обычных «домашних» комплектующих — процессор AMD Athlon 3000G, материнская плата Asrock B450Pro, 8Gb ОЗУ и 3 диска Toshiba P300 по 6Тб каждый, объединенных в единый массив RAIDZ1 (терминология ZFS). На NAS была установлена популярная на тот момент Xigmanas 11й версии. NAS использовался как хранилище для личных фото/видео, как медиатека с фильмами и музыкой с трянсляцией на телевизор, а также для бэкапов моего ноута.
Время шло, худо-бедно хранилище справлялось со своими обязанностями, но, как говорится, пока не попробуешь, не поймешь чего ты хочешь на самом деле.
Первое, что я выяснил — это использование неподходящих дисков. Дело в том, что «домашняя» серия P300 у Toshiba использует т.н. «черепичную запись» (SMR), что потенциально может вызвать проблему при использовании ZFS.
Следующее, что не очень нравилось — ОС Xigmanas. Дело в том, что она основана на ОС FreeBSD, опыта работы с которой у меня очень мало (я большую часть своей жизни работал с Linux и Windows). Еще одна особенность — эта ОС была установлена на флешке. Грубо говоря, на флешке был записал образ системы, которая при запуске копируется в память компьютера. Это не позволяет устанавливать доп. софт, либо необходимо делать дополнительные действия, чтобы это провернуть. Учитывая, что я этим занимаюсь от случая к случаю, то приходится каждый раз все заново изучать.
Пока я использовал Linux или MacOS, проблем с подключением этого хранилища особо не было. Использовал NFS, все работало нормально. Но последней каплей стало, когда я решил обновить ноутбук, на котором была установлена Windows 11. Оказывается последняя ОС от Microsoft перестала поддерживать протоколы SMB, с которыми умеет работать NAS, а значит я не могу использовать свое хранилище «из коробки». Я потыкался, помыкался с настройкой SMB в Windows 11 и решил, что пора обновляться.
К этому времени набрала популярность ОС для хранилищ под названием TrueNas, которая когда то, как и Xigmanas, была отпочкована от FreeNas/Nas4Free. Есть 2 версии этой ОС — Core и Scale. Первая основана все также на FreeBSD, а вторая — на Debian. Разработчики рекомендуют использовать последнюю.
Но апгрейд NAS я не ограничил лишь обновлением ОС. Я решил поменять и саму подсистему хранения, т.е. жесткие диски. Для этого я какое то время начал закупать диски Seagate серии IronWolf, которые вроде как подходят под хранилища, и, что наиболее важно, не имеют черепичную запись, т.е. они сделаны по технологии CMR.
Но и тут не обошлось без ложки дегтя, к сожалению. Диски покупал на авито. По заверениям продавца, а также судя по скриншотам SMART-параметров, диски новые, запечатанные в антистатические пакеты (вскрывались продавцом перед отсылкой, чтобы проверить их работоспособность и чтобы прислать SMART’ы мне), без следов установки и использования. Разница в цене получилась двукратная по сравнению с розничными российскими магазинами типа Ситилинк, ДНС и тд. Это и подкупило.
По факту оказалось, что диски уже работали какое то время, их SMART-атрибуты были сброшены в 0. Только 1 диск из 5 оказался без пробега, у остальных наработка составила в среднем 23 тысячи часов. Не сильно критично, но осадочек, как говорится, остался.
Выяснил я это с помощью опции farm утилиты smartctl — она как раз работает на дисках seagate и показывает истинное положение дел и данные там не затираются при сбрасывании SMART. Я думаю, что диски трудились в майнинге на CHIA-фермах. Радует, что майнинг на дисках не так насилует диски, как майнинг крипты на тех же видеокартах убивает их.
Помимо этих «новых» дисков я решил оставить старые диски в новом хранилище, а также добавить ноутбучные диски, которых за годы накопилось изрядное количество. Для последних у меня в наличии оказался адаптер, который устанавливается в отсек 5.25 и может вместить 4 диска формата 2.5.
По итогу для построения хранилища в моем распоряжении оказалось 14 дисков — 5 по 12 Тб, 3 по 6 Тб, 4 по 1 Тб, 2 по 256 Гб. Но на материнской плате оказалось лишь 6 портов для подключения SATA дисков. Для подключения остальных дисков необходимо использовать дополнительный контроллер. Я выбрал RAID-контроллер от фирмы LSI, которые сейчас продаются совсем недорого на площадках типа Авито или Алиэкспресс. Это бывшие в употреблении контроллеры, которые когда то стояли в серверах, но их производительности стало не достаточно для современных серверов. В таких контроллерах существует 2 режима работы — в виде RAID-контроллера и в виде HBA-адаптера. Ключевое отличие в том, что в случае RAID ОС не видит подключенные к контроллеру диски и организацией структуры дисков занимается сам контроллер, а ОС видит просто как одно единое блочное устройство. В случае HBA контроллер выступает как плата расширения с портами и никак не влияет на диски, отдавая их напрямую в ОС как обычные диски. Этот режим нам и нужен, поскольку в случае поломки RAID для восстановления данных потребовалось бы найти в точности такой же контроллер. А так, в случае смерти HBA диски можно подключить в любой компьютер и спасти данные.
Выбранный контроллер имеет на своем борту 2 SAS-порта для подключения дисков. К каждому порту можно подключить до 4х SATA-дисков. В комплекте к контроллеру шли 2 кабеля SAS->4 SATA. Дополнительной проблемой при использовании HBA стало то, что этот контроллер очень (нет, не так — ОЧЕНЬ) сильно греется. При обычной работе он спокойно разогревается до 70+ градусов и к нему невозможно прикоснуться, даже не смотря на наличие радиатора на чипе. Пришлось колхозить доп охлаждение.
В качестве ОС для хранилища была выбрана TrueNas Scale на Debian. Для бОльшей отказоустойчивости она была установлена на 2 упомянутых диска по 256 Гб в зеркальном RAID1.
После установки необходимо было организовать диски в отдельные RAID-массивы поскольку работать с дисками по отдельности такое себе удовольствие и при таком варианте отсутствует какая-либо отказоустойчивость в случае смерти какого-либо диска. Диски были разбиты по размерам на 3 массива. В качестве топологии была выбрана RAIDZ1 (в терминологии файловой системы ZFS). Если кратко, то любой из массивов переживет смерть ЛЮБОГО из входящего в него диска. Существуют еще RAIDZ2, RAIDZ3, в которых можно потерять одновременно любые 2 и 3 диска, но для меня это избыточно, поскольку теряется полезное пространство. В любом случае я делаю резервные копии важных данных, так что такая организация меня вполне устроит.
Из 5 дисков по 12 Тб я получил 43 Тб полезного пространства (остальное пространство ушло на избыточность данных), из 3х дисков по 6 Тб я получил почти 11 Тб полезного пространства, а из 4х дисков по 1 Тб я получил 2.7 Тб.
Основное хранилище на 43 Тб разбил на отдельные датасеты (терминология ZFS) с разными параметрами под хранимые данные — для фото, для видео, для музыки, для бэкапов, для документов, для софта, для книг и тд. Массив из 10 Тб я решил использовать под торренты, чтобы туда скачивать и оттуда раздавать всякое нужное. А массив на 2.7 Тб решил использовать под разные «лабораторные исследования» — как s3-хранилище для кластера kubernetes, как хранилище для docker-образов для nexus/harbor и еще для чего то.
Данное хранилище подключил к домашнему ноутбуку по протоколу SMB в виде отдельных сетевых дисков. К серверам на Proxmox я подключил хранилище через протокол NFS. Домашняя сеть в 1 Гбит/с вполне спокойно утилизируется в полном объеме, скорость составляет примерно 130 Мб/с. При копировании данных внутри хранилища между разными массивами скорость составляет максимально возможную для дисков 170-200 Мб/с.
Ближайшие планы по хранилищу — расширить память (используемых 16 Гб не хватает для такого объема данных). Планы на перспективу — увеличение сетевой пропускной способности до 2.5 (а возможно и до 10) Гбит/с. Но это совсем на перспективу, т.к. потребителей с такой скоростью в моей домашней сети нет и плюс нужно будет менять сетевые коммутаторы для поддержки большей скорости.