Cubie: Три года экспериментов
Что для вас означает NAS? Для кого-то это небольшая коробочка с дисками и файлами. Для кого-то — компьютер, включенный круглосуточно. Для кого-то — роутер, который раздает музыку и видео на домашние устройства.
В этот раз я хочу рассказать о не совсем обычном NAS. Он не похож на магазинные варианты и не является привычным нам компьютером. Он похож на… Пластиковый контейнер для еды с электроникой внутри. И как бы это не было удивительно, этот контейнер вполне себе работает. И более того, уже не раз меня выручал.
Встречайте. Кубик. Домашний сервер, NAS и тестовый полигон в одном лице. Ему и посвящена эта статья.

Как я дошел до жизни такой
Это отдельная история, которая коротко описывается фразой “дело было вечером, делать было нечего”.
Все ссылки будут приведены в конце этой статьи
Шел 2013-й год…
Все началось с глупой идеи: сделать медиаплеер в корпусе от PlayStation 2. С Kodi (XBMC), эмуляторами старых консолей, поддержкой джойстиков и стриминга игр с компьютера. Дополнительное требование: минимальные модификации корпуса и максимальное использование оригинальных портов. В общем, вся эта затея спокойно выплывает в отдельную историю и статью на каком-то Hackaday или Geektimes.
К “мозгу” всего устройства были сформированы следующие требования:
- наличие HDMI;
- наличие порта SATA;
- вменяемая производительность;
- доступность образов Linux;
- малый размер, чтобы влезть в корпус все той же PlayStation 2 Slim.
Как результат, выбор остановился на Cubieboard. Одноплатном компьютере на ядре ARM. У него было все: два порта USB, HDMI, неплохой процессор (Allwinner A10, одно ядро на частоте 1 ГГц), один гигабайт ОЗУ, порты SATA 2 и Fast Ethernet (т.е. 100 Мбит/с).

Заказал, распаковал, включил, потыкал родную прошивку и заверте…
Продолжение истории
Затем начался долгий период экспериментов, которые длятся до сих пор. За это время сменилось три дистрибутива Linux, три жестких диска, три корпуса и огромное количество конфигураций и прикладного ПО. Попытки запустить медиаплеер были заброшены из-за проблем с драйверами (обладатели смартфонов меня поймут, а embedded-разработчики в очередной раз выругаются). А сама машинка прижилась в виде скромного домашнего сервера. Неумолимого труженика и незаменимого помощника.
Сейчас устройство стоит на полке в пластиковом корпусе. К нему подключен музыкальный центр, принтер. И жесткий диск WesternDigital линейки RED на 1 Тб: WD10JFCX.
Конфигурация устройства
На данный момент устройство выполняет три основные функции:
- работа с файлами: синхронизация, загрузка из интернета, хранение и обеспечение доступа из сети;
- медиа: музыкальный плеер-колонка (спасибо джеку 3.5 мм) и DLNA-сервер;
- сервер и тестовый полигон: хостинг для Phabricator (этакая система управления задачами и кодом), хостинг для тестовых веб-проектов, платформа для экспериментов в IoT.
А теперь — по-порядку. Постараюсь не вдаваться в детали: каждый отдельный пункт может потянуть на отдельную статью.
Файлы
Я уже рассказывал про свой подход к хранению данных и модель использования различных хранилищ. Невостребованные, но важные файлы загружаются вручную, в облако или на NAS. Результаты текущей работы (код, эта статья, различные заметки) синхронизируются между ноутбуком и NAS (а до недавнего времени — еще и с телефоном). Особо важные файлы дублируются на NAS и Dropbox. Ну и в дополнение, регулярное резервное копирование домашней папки ноутбука и базы данных веб-сервера. Как-то так.
В результате, получается действительно удобная система. Ситуации типа “ой, нужный файл остался дома на ноутбуке” остались в прошлом. Все последние изменения подтягиваются на NAS и обратно, а начатую работу можно продолжать с любого устройства. Дополнительный плюс: экономия места на смартфоне. На нем не приходится хранить весь архив документов. А если что-то и понадобится — это что-то всегда можно загрузить удаленно. Был бы только интернет.
Единственный момент: в моей конфигурации для каждого пользователя создается отдельный аккаунт на сервере. Настроены общие, приватные директории и права доступа к ним. Вручную, из консоли. Захочет ли кто-то другой этим заморачиваться? Не знаю. Альтернатива — использовать OwnCloud и подобные решения. Там все настраивается через веб-интерфейс.
Если же нужно загрузить какой-то большой файл (а интернет у меня не быстрый) — NAS этим занимается в фоне. Нужно только скормить ему torrent-файл или ссылку для скачивания.
Ах да. Список ПО:
- Synching (синхронизация папок между устройствами)
- vstfpd (доступ к файлам по FTP и FTPS)
- OpenSSH (SSH и доступ к файлам по SFTP)
- Samba (SMB, общие папки в сети Windows-компьютеров)
- Monsta FTP (доступ к файлам через браузер)
- rTorrent + ruTorrent (торрент-клиент)
- Wget + Wget GUI Light (менеджер закачек по HTTP/HTTPS)
Медиа
Кубик используется как клиент интернет-радио и некоторый аналог Chromecast Audio. Интернет-радио “ловит” MPD, управляется пультом от аудиосистемы. Для передачи звука с телефона и ноутбука используется связка из MPD и upmpdcli. При желании можно настроить поддержку первой версии AirPlay через Shairport.
В качестве DLNA-сервера выбрал Plex. Как не удивительно, с ним мороки было меньше всего. Установил, добавил нужные папки, отсканировал коллекцию. Все метаданные (актеры, год выпуска, описания, обложки) подтягиваются автоматом. Мелочь, а приятно. Просматривать содержимое коллекции можно как из браузера, так и со всяких телевизоров и плеера типа Kodi).
Проблемы только две:
- процессора Allwinner A10 (и не только его) ну никак не хватает для потоковой конвертации видео;
- после последнего обновления Plex Media Server мой телевизор перестал показывать содержимое коллекции; а вот в Kodi все доступно и открывается на ура; почему — не понятно.
Первая проблема отчасти решается одной галочкой в настройках Plex. Вторую проблему пока так и не решил, перешел на Kodi.
Сервер
Nginx, MySQL, php-fpm, python. Как я уже говорил, все это счастье используется для хостинга временных, тестовых страниц и приложений. А также для хостинга внутренних веб-приложений (Phabricator, ruTorrent и так далее).
Насколько хорошо это все работает? Статика отдается моментально (спасибо Nginx), а вот динамика подтормаживает. Подробнее — ниже.
Система
ArchLinux ARM с самыми свежими ядрами, pacman и AUR. Просто восхитительный набор доступных пакетов. И даже Plex для ARM ставится в пару команд. Ну а если готовый пакет еще не собрали — можно собрать свой. Быстро и просто.
Дополнительные функции
OpenSSH позволяет поднять прокси и/или удаленно подключиться к домашней сети. Подробнее: https://www.digitalocean.com/community/tutorials/how-to-route-web-traffic-securely-without-a-vpn-using-a-socks-tunnel.
О характеристиках
Производительности ЦП явно не хватает. Synching долго запускается и синхронизирует с небольшим лагом из-за шифрования и алгоритмов поблочной синхронизации. OwnCloud нещадно тормозит (и я от него в итоге отказался вовсе). Phabricator работает относительно не плохо (возможно, кеширование помогает). Принт-сервер долго обрабатывает страницы и печатает с серьезной задержкой. Во все эти моменты загрузка ЦП подскакивает до 100% и держится секунд до 10. А то и больше, в зависимости от нагрузки. Одно ядро, 1 ГГц и ARM — этого все-таки маловато для хорошего домашнего сервера.
У медиасервера свои тараканы. Самый большой из них — транскодинг. Он все-таки нужен по нескольким причинам:
- плееры поддерживают ограниченный набор форматов (особенно этим страдают SmartTV);
- субтитры и аудио.
Некотрые плееры не поддерживают смену аудиодорожек (sick!). Некоторые видео идут без встроенных субтиров. В итоге приходится модифицировать файлы вручную. Или выполнять перекодирование на лету. Plex умеет. Только NAS не может. Банально не хватает мощности.
И последнее. Обычные одноплатники плохо подходят в роли полноценных NAS. Причин несколько:
- порт SATA на них отсутствует вообще, или подключен на шину USB (sick!);
- порт SATA обычно только один (никаких RAID, привет);
- порты USB 3.0 — это редкость;
- скорость сетевого порта ограничена планкой в 100 Мбит/с.
Да, для всех пунктов есть исключения. RAID можно собрать на основе USB-дисков. Хорошие одноплатники с USB 3.0 и Gigabit Ethernet существуют. Есть одноплатники на Intel Atom и Celeron. Просто обращайте на это все внимание при покупке.
Насчет шума: шуметь в этой конструкции может только жесткий диск. В фоновом режиме, без нагрузки он очень тихий. Просто тихое монотонное шуршание мотора. Под нагрузкой “просыпаются” головки диска. Начинают активно перемещаться и издавать звук. Засыпать под него неприятно, поэтому приходится либо останавливать всю активную деятельность на ночь (например, останавливать фоновые загрузки), либо ставить всю конструкцию в шкаф.
Максимальное расчетное энергопотребление: 10 ватт (ток в 2 ампера с напряжением 5 вольт). С учетом эффективности внешнего блока питания (76.5%) получим пиковое энергопотребление в районе 13 ватт. Реальное энергопотребление в различных режимах не измерял.
Дополнительные ссылки:
- Характеристики Cubieboard A10: http://linux-sunxi.org/Cubieboard
- Характеристики жесткого диска: http://www.storagereview.com/wd_red_25_1tb_hdd_review_wd10jfcx
- Вики по SoC от Allwinner: http://linux-sunxi.org
- Основная ОС, ArchLinux ARM: https://archlinuxarm.org/
- Полный с список ПО со ссылками: https://gist.github.com/s-kostyuk/9e666dadd967ac9f2bb9ea6887f85064
- Файлы конфигураций: по запросу
Выводы
Как бы то ни было, результат работы мне нравится. Помимо самого NAS я получил ряд “плюшек” в виде веб-сервера и медиаплеера. Есть постоянное поле для творчества и экспериментов с ARM-устройствами. Все сервисы работают очень стабильно: от радио и управления по ИК до синхронизации и Phabricator. Пусть и с лагами.
В итоге, получилось очень достойно, как по мне. На старом устройстве. И китайском процессоре из 2013-го года.
Если кого заинтересует более подробная информация (вплоть до установочных скриптов и настроек) — пишите. Также оставляйте свои вопросы и комментарии любым удобным способом.
Спасибо за внимание!
