суббота, 19 июля 2014 г.

BeagleBone Black, transmission & nfsd

Сегодняшняя статья будет посвящена использованию BealgeBone Black в качестве платформы для круглосуточной скачивания и раздачи торрентов, а также в качестве местного хранилища файлов подключаемого с помощью NFS.




Вместо введения
Т.к. плата длительное время у меня не использовалась, то я решил что лучше всего её использовать для того чтобы она выступала в качестве локальной "файлопомойки" и в нагрузку скачивала и раздавала торренты.

В ходе экспериментов было выяснено следующее:

  1. Торрент клиент должен был быть достаточно лёгким чтобы не нагружать процессор при нулевой активности.
  2. Также данный клиент должен иметь хорошо документированное RPC-API для управления, т.к. плата не имеет настроенного графического окружения пользователя и управляется в основном через сетевые соединения (ssh).
  3. Способ для сетевого доступа к файлам должен быть максимально прозрачным для обоих сторон.
  4. Также данный способ  не должен нагружать процессор как во время простоя, так и во время активного соединения.
Торрент клиент
Изначально применялся Deluge в режиме демона (deluge-daemon). Однако в виду того что он был написан на языке Python и был достаточно тяжеловесным (см. п. 1), а также не имел нормального API для построения надстроек и управления (см. п. 2), то я решил использовать другой клиент.

В ходе поисков а также учитывая предыдущий опыт, выбор пал на Transmission. Этот клиент имеет как графический, так и консольный интерфейс, плюс ко всему существует возможность управления через JSON-RPC на основе которой и построен входящий в базовый комплект web интерфейс управления:

 Итогом тестирования в течении 31 календарного дня полного uptime для клиента (фиксируется внутри клиента) стали следующие данные:
Что говорит о том что вне всякого сомнения можно использовать Transmission в качестве торрент клиента для систем на базе процессоров с архитектурой ARM.

Для удалённого управления с любого устройства необходимо в конфигурационном файле демона (/var/lib/transmission/config/settings.json) изменить строчку "rpc-whitelist-enabled": true, на "rpc-whitelist-enabled": false, и перезапустить сервис, что отменяет фильтрацию для удалённых клиентов.

Внимание, Transmission очень прожорлив в плане памяти, как своей так и сетевыйх кэшей ядра, поэтому внимательно читайте настройки. В частности при количестве пиров больше чем 1024 у меня ядру уже не хватало памяти на все процессы, о чём оно активно сообщало в dmesg:

[50886.087659] kswapd0: page allocation failure: order:0, mode:0x20

или вот:

[46448.787367] swapper/0: page allocation failure: order:1, mode:0x204020

Поэтому настраивайте ваш клиент исходя из имеющихся ресурсов (также следует учитывать сторонние программы и модули запущенные у вас на плате).

Локальное хранилище файлов
С этим подразделом тоже возникли определённые трудности, так например FTP не обеспечивал необходимой гибкости и требовал сложной настройки, SFTP при изначальном отсутствии настроек сильно нагружал процессор и медленно копировал файлы.

Поэтому по совету участников с конференции gentoo.ru, было принято решение использовать NFS. Установка сетевой файловой системы целиком описана в этом топике на gentoo.org. От себя добавлю что будет полезным почитать также следующие ссылки:
Не забываем перезагружать систему после настроек ядра.

Для BeagleBone Black я указал следующие настройки в /etc/exports:

# /etc/exports: NFS file systems being exported.  See exports(5).
/mnt/usb        {{ ip_target_address }}(rw)

Для рабочей машины с которой осуществляется доступ достаточно просто смонтировать нашу FS:

jane ~ # mount {{ ip_host_address}}:/mnt/usb/ /mnt/usb

После монтирования файловая система будет доступна также как обычный каталог:


Тестирование скорости с помщною утилиты dd показало что чтение - запись держаться на уровне 10 - 15 МБ/с для крупных (более 10 МБ) файлов.

На этом всё.

Комментариев нет:

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