Коллеги давно просили меня описать процесс сборки и настройки своего NAS-сервера. Этим постом я искупаю свою вину. К тому же тема действительно актуальная и, мне кажется, многим будет интересно с какими проблемами я столкнулся, какое железо и софт использовал.
NAS у меня исполняет несколько обязанностей:
- файловое хранилище “жирного” контента (фильмы, etc);
- сервер для Apple TimeMachine (бекапы);
- качает и раздает торренты;
- “самопальный” мониторинг сетевой активности с использованием rrdtool;
- локальный git-репозиторий.
Мой опыт использования NAS начался с QNAP TS-109 PRO II.
Довольно удачная однодисковая железка, которая прослужила мне верой и правдой более года. У нее несколько минусов:
- собственно всего один диск;
- нестандартный встроенный linux;
- ARM-based процессор.
Один диск меня не устраивал по причине отсутствия резервирования. Второй и третий пункт меня напрягали, так как сам я довольно уверенно пользуюсь linux и embedded версия ОС предлагаемая QNAP вкупе с ARM процессором не устраивала меня по ряду причин: сборки не для всех пакетов есть под ARM, а те которые есть, редко обновляются и иногда содержат странные баги (у меня появился довольно изрядный опыт “войны” с rtorrent’ом). Конечно, можно было бы собирать софт из исходников, но это осложнено следующими факторами:
- установка компилятора и development библиотек тоже довольно нетривиальна (видимо проблема курицы и яйца);
- будучи программистом с серьезным отношением к тестированию я отношусь к той категории людей которые считают, что если ты сам компилируешь пакет, ты должен его сам и тестировать. А мне этого совсем не хотелось.
Таким, довольно эволюционным путем, примерно через полтора года я пришел к мысли что пора менять storage. На этот момент на рынке было несколько device’ов, которые привлекли мое внимание:
Моя вера в x86 на этом поприще росла с каждой новостью связанной с Intel Atom. Поэтому два первых девайса, опять таки построенные на базе ARM процессора, отсеялись сами собой. Два последних представляют уже больший интерес, но анализируя их спецификации я пришел к мысли что я бы мог сам собрать более подходящую мне железку.
Hardware Link to heading
Я начал подискивать подходящий miniITX корпус. Мягко говоря это не просто, особенно во Владивостоке. Большинство корпусов в этом форм факторе нацелены на создание nettop’ов: имеют максимум 2 корзины под HDD, кучу лишних фентифлюшек вроде headphones output на фасаде и т.д. Мне же хотелось собрать железку не имеющую ничего лишнего и при этом “на вырост”, чтобы через пару лет не пришлось менять снова.
В конце концов я нашел корпус, который меня полностью удовлетворил — Chenbro ES3469.
Этот корпус специально создавался под NAS, поэтому обладает довольно характерными особенностями:
- четыре корзины для 3.5" HDD с поддержкой горячей замены и индивидуальной индикацией питания и data activity;
- один внутренний слот для 2.5" HDD (очень удобно так как все четыре жестких можно отдать под хранение данных, а ОС поставить на отдельный пятый жесткий);
- внешний блок питания, что позволяет сэкономить место внутри и избавится от одного лишнего вентилятора (внешний БП без активного охлаждения);
- довольно “богатая” индикация на передней панели.
Сам корпус сделан довольно качественно, внутри разделен на два отсека. В одном отсеке находятся жесткие диски с двумя вентиляторами работающими на выдув, во втором материнская плата и вся коммутация.
Немного огорчило меня то, что одна из корзин сразу не заработала. Сначала я грешил на backplane, но слава богу дело было в неисправном SATA кабеле, который легко поддается замене. Замена правда осуществляется не самым простым образом, — для того чтобы добраться до отсека с корзинами и до backplane’ов, надо буквально говоря разобрать весь корпус, что не очень удобно. Что уж тут поделать, издержки форм фактора.
Следующим шагом стал выбор материнской платы. С ней тоже все оказалось не просто. Надо было найти Atom-based miniITX материнскую плату с полностью пассивным охлаждением и минимум 5 SATA портами! Немного странные требования для форм фактора miniTX, не находите? Такая все же нашлась — Supermicro X7SPA-H:
- двухядерник Intel Atom D510 1.6Ghz с поддержкой HT;
- 6 SATA портов;
- два SO-DIMM DDR2 667MHz модуля, максимум 4Gb.
- две гигабитные сетевые карты;
- полностью пассивное охлаждение;
- довольно простая видеокарта Intel GMA3150, что в моем случае является плюсом, будет меньше кушать и греться;
- поддержка power on after failure, что для девайсов такого класса очень полезно.
Вобщем, эта материнская плата подошла в моем случае просто идеально. Причем, материнская плата и корпус, что называется, соответствуют друг другу. Например, у обоих есть поддержка индикации power fail и chassis intrusion.
Правда, тут произошел казус. Сразу материнка не завелась: питание есть, вентилятор на корпусе вращается, а power LED не горит и стандартного писка о прохождении POST check’а нету. Отключил всю периферию, проверил что нигде ничего не замыкает, проверил память, — один черт, не заводится. Сбросил CMOS, — не заводится. Причем, если достать RAM, то матерится о ее отсутствии на всю квартиру. В конце концов, на третий день, когда вера в то что материнка жива окончательно иссякла, она при самых странных обстоятельствах (во время очередной операции “выткни-воткни оперативку”) завелась. То ли чудо, то ли фокус… То ли я два или три десятка раз подряд неверно вставлял оперативную память.
Дальше стало проще. В качестве жестких я выбрал Western Digital линейки Caviar Green, так как они хорошо себя зарекомендовали еще со времен моего первого NAS’а — тихие и холодные. Сейчас у меня стоят два: WD10EADS
и WD10EARS
. Насколько я понимаю, отличаются они только объемом кеша 32/64Mb.
Так как я старался собрать максимально тихий device, один из вентиляторов в отсеке с жесткими я отключил, а на второй поставил zalman’овский регулятор скорости вращения. Эмпирическим путем была подобрана скорость, которая дает тихую работу. Температура при этом держится в районе 40-42 градусов, что меня вполне устраивает.
Software Link to heading
Теперь немного об используемом программном обеспечении. Я “на короткой ноге” с Ubuntu, поэтому я выбрал именно этот дистрибутив. Так же, наслушавшись страшных историй о том как восстанавливают данные с RAID-зеркал, я сразу принял решение использовать файловую систему с поддержкой избыточности вместо аппаратного RAID’а.
Собственно, сейчас таких файловых системы две: BTRFS и ZFS. Первая находится на стадии беты и не предназначена для production использования. Вторая довольно стабильная и широко используемая, но в linux реализована в рамках проекта FUSE из-за лицензионных ограничений (изначально ее разработала Sun для ОС Solaris). По совокупности факторов я решил использовать ZFS.
ZFS вещь довольно интересная. Она позволяет собрать из списка блочных девайсов виртуальный том с заданными настройками избыточности. У нее есть ряд преимуществ перед аппаратным RAID’ом:
- в зеркале могут участвовать абсолютно разные жесткие (разного размера);
- выход из строя блочного девайса не запрещает клиентам читать и писать на том, до тех пор пока есть хотя бы одна живая реплика;
- rebuild тома (scrub в терминах ZFS) тоже не блокирует клиентов, они по прежнему могут читать и писать;
- настройки избыточности можно задавать отдельно для директорий. То есть вы можете хранить все в двух копиях, а особо важные для вас папки в трех (для этого том должен состоять как минимум из трех физических дисков). Все фичи кроме последней я вынуждено “протестировал” в ходе эксплуатации. Так что, да, это действительно работает. Для проверки последней у меня просто не было мотивации, у меня нет настолько важных данных.
Создание ZFS тома делается очень просто:
$ zpool create tank raidz1 /dev/sda /dev/sdb
После создания, том будет автоматически примонтирован в /tank
. Теперь можно заливать на него информацию. Просмотр статуса по виртуальным томам делается следующими командами:
$ zpool status
$ zpool iostat -v
Перебалансировка и починка тома осуществляется при помощи команды:
$ zpool scrub tank
В интернете есть множество информации о ZFS. Если хотите использовать ZFS, советую обратится обратится к официальному мануалу.
Надо понимать что такая гибкость не дается бесплатно. ZFS прожорлив по памяти, поэтому советую оснастить машину гигабайтом, а лучше двумя гигабайтами оперативной памяти. Я так и сделал, благо она дешевая.
С ZFS у меня произошел только один негатвиный инцедент. Во время начальной заливки данных на том, oomkiller’у не понравилось что драйвер ZFS ест много памяти, и он его убил :). Это издержки того что ZFS работает в user space. После reboot’а все стало нормально, ничего чинить не пришлось. Больше такого у меня не повторялось.
Так же, я использую NAS как сервер для Apple Time Machine, поэтому мне надо было настроить его так, чтобы мой mac mini воспринимал его как AFP сервер. В интернете есть полно мануалов, одним из которых я и пользовался.
Вот пожалуй и все что касается софта.
В итоге Link to heading
Atom все же поменял мое представление о том, какой должен быть домашний файловый сервер. На базе атома вполне можно собрать тихий и холодный storage, и спихнуть на него “домашнюю работу”. При этом это все это будет работать под управлением стандартного дистрибутива вашей любимой ОС (хоть windows). А сама железка мне обошлась даже немого дешевле чем Acer easyStore H340.