Cubie: Три года экспериментов

Sergey Kostyuk
Jul 21, 2017 · 6 min read

Что для вас означает 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 ватт. Реальное энергопотребление в различных режимах не измерял.

Дополнительные ссылки:

Выводы

Как бы то ни было, результат работы мне нравится. Помимо самого NAS я получил ряд “плюшек” в виде веб-сервера и медиаплеера. Есть постоянное поле для творчества и экспериментов с ARM-устройствами. Все сервисы работают очень стабильно: от радио и управления по ИК до синхронизации и Phabricator. Пусть и с лагами.

В итоге, получилось очень достойно, как по мне. На старом устройстве. И китайском процессоре из 2013-го года.


Если кого заинтересует более подробная информация (вплоть до установочных скриптов и настроек) — пишите. Также оставляйте свои вопросы и комментарии любым удобным способом.

Спасибо за внимание!

)
Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade