Do-it-yourself NAS network storage with a torrent downloader on Raspberry PI 4 | Сетевое хранилище NAS с торрентокачалкой на Raspberry PI 4 своими руками

Сетевое хранилище NAS с торрентокачалкой на Raspberry PI 4 своими руками

electronus11-15 minutes


avatar

    1. Цена: 22USD за флешку Evtran 64G
    2. Перейти в магазин

    Интересен мой опыт создания торрент-сидбокса/сетевого хранилища на базе Raspberry Pi 4?
    Вам под кат!

    Моя мотивация

    Где-то год назад решил поддержать раздачи
    одного англоязычного приватного книжного трекера небольшим сидбоксом.
    Я искал нечто производительное, малопотребляющее, бесшумное и мой взгляд пал на лежащую на столе плату RPI4. Решил построить сидбокс на ней.
    Мне стало интересно, на сколько тысяч торрентов хватит ресурсов платы и как стабильно это всё будет работать.
    Сидбокс работает успешно уже год, раздает 30+тыс файлов и не требует никакого обслуживания. Я решил повторить постройку ещё раз, задокументировав каждый шаг для вас. На этот раз описанная конструкция успешно поддерживает все раздачи раздела «Художественная литература» на рутрекере.

    Зачем это вам?

    Помимо сидбокса, данная конструкция может работать как торрентокачалка с функцией сетевого файлохранилища. Причем всё очень удобно: забросил по сети торрент-файл — получил в другой папке скачанный материал.

    Необходимые материалы

    1.Плата Raspberry Pi 4 с 2Гб оперативной памяти.
    2.Флешка Evtran 64G или любая аналогичная
    3.5TB USB 3.0 жесткий диск или любой подходящий.
    4.Преобразователь 12V -> 5V 3A.
    5.Кабель USB-A=>Type-C 25см
    6.Microsd карта.
    7.Корпус, небольшой радиатор, винтылатунные стойки.

    Питание платы

    Для питания решил использовать 12В, как штатное напряжение моего сетевого оборудования.
    С Али пришла вот такая симпатичная коробочка преобразователя 12V -> 5V 3А:

    Снизу платы большой полигон:

    Сверху виден чип преобразователя, дроссель, диод и конденсаторы. А так же предохранитель по входу:

    Стабилизатор исправно отработал год, при этом абсолютно без нагрева. Рекомендую.

    На плате RPI4 в цепи питания USB устройств есть защита по току, которая препятствует нормальной работе внешнего жесткого диска, и это нужно обойти. Самый простой путь — закоротить TP3 на пины питания USB:

    Например вот так:

    Чтобы не устроить пожар — следите чтобы у вас был где-то предохранитель по питанию.
    У меня он в преобразователе питания. Я проверил его путём умышленного КЗ USB — надежно сработал.
    По 12В система потребляет 8Вт. Из них 3Вт — плата с microsd c загруженной системой. А остальное — жесткий диск.

    Накопители

    Для системы я использовал карточку Samsung PRO Endurance Micro SD Card 32GB with Adapter MB-MJ32GA. За год система пережила 20+ умышленных срывов питания без завершения работы, но содержимое карты так и не повредилось.
    Для хранения закачанных торрентов я использовал SMR диск Seagate Portable 5TB External Hard Drive HDD – USB 3.0. Выходит дешево и сердито. SMR диски оптимальны для преимущественных чтений — как раз мой случай.
    Так как SMR диски очень не любят фрагментацию, я решил закачивать торренты на внешнюю флешку, а лишь когда они будут готовы — они будут перемещены автоматически на SMR диск. Таким образом будет обеспечиваться практически нулевая фрагментация SMR диска и он будет обеспечивать отличную производительность как на запись, так и на чтение.

    Корпус

    Мне попался новый-старый контроллер WiFi Cisco:

    Потрошки были выброшены, а их место заняла конструкция. Использовал винты и стоечки 2,5мм. Пружиной прижал радиатор на термопасте к процессору:

    Вид сзади:

    Программная часть системы

    Будет в спойлерах!

    Установка и базовая настройка операционной системы

    На странице www.raspberrypi.com/software/ качаю Imager и устанавливаю его.
    Открываю Imager и выбираю:
    *Operating System: RASPBERRY PI OS (32-BIT)
    *Storage: Имя картридера с microSD картой в системе
    Нажимаю WRITE и соглашаюсь, с предупреждением.
    Когда процесс закончился я передергиваю картридер с картой в компьютере и нахожу новый диск с меткой boot размером 256Мб. Это диск e: если у вас диск другой, то внизу исправьте e вашу букву.
    Нажимаю Win+R пишу cmd и Enter.
    В командной строке пишy:
    copy con e:\ssh
    Нажимаем F6 и потом Enter
    Увидел:
    Скопировано файлов: 1.
    когда система загрузится и увидит на карте файл с именем ssh, она автоматически включит SSH сервер, который будет нужен для доступа к системе.

    Безопасно извлек картридер, достал из него карту и вставил в Raspberry Pi4
    Подключил плату к проводной сети и питанию.
    В справке роутера нашел свежевыданный IP-адрес:

    И с помощью Putty по SSH подключился к плате. Логин pi, пароль raspberry

    Первым делом изменяю пароль для пользователя pi с помощью passwd
    Ввожу старый пароль (raspberry) и дважды желаемый новый пароль

    Выключаю графическую оболочку, она мне не нужна, так я экономлю вычислительные ресурсы платы и электричество:
    sudo raspi-config
    Выбираю:1 System Options, потом S5 Boot/Auto Login, потом B1 Console

    Устанавливаю имя системы:
    sudo raspi-config
    1 System Options -> S4 Hostname и устанавливаю hostname rpi4

    После выбираю Finish, система перезагружается, переподключаюсь снова по SSH

    Загружаю и обновляю пакеты
    sudo apt update
    sudo apt upgrade

    Устанавливаю transmission-daemon(торрент клиент) и samba(файловый сервер для Windows):
    sudo apt-get install transmission-daemon
    sudo apt-get install samba samba-common-bin


    Установка и настройка дисков

    Подключаю жесткий диск и флешку к USB 3.0 портам
    Идентифицирую диски:
    sudo parted
    print devices
    /dev/sda (5001GB)
    /dev/sdb (63.9GB)
    /dev/mmcblk0 (32.0GB)
    Выхожу из parted написав quit

    У меня имеется два диска: /dev/sda и /dev/sdb, а также microSD карта /dev/mmcblk0
    Уничтожаю варварским способом файловые системы и партиции на двух целевых дисках:
    sudo dd if=/dev/zero of=/dev/sda bs=4096 count=4096
    sudo dd if=/dev/zero of=/dev/sdb bs=4096 count=4096

    Возвращаюсь в sudo parted
    Выбираю диск: select /dev/sda
    Назначаю метку: mklabel gpt
    Создаю раздел: mkpart primary 0% 100%
    Аналогично для второго диска:
    Выбираю диск: select /dev/sdb
    Назначаю метку: mklabel gpt
    Создаю раздел: mkpart primary 0% 100%
    Выхожу из parted написав quit

    Вывожу список всех дисков и партиций: sudo lsblk

    NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sda           8:0    0  4.5T  0 disk
    └─sda1        8:1    0  4.5T  0 part
    sdb           8:16   1 59.5G  0 disk
    └─sdb1        8:17   1 59.5G  0 part
    mmcblk0     179:0    0 29.8G  0 disk
    ├─mmcblk0p1 179:1    0  256M  0 part /boot
    └─mmcblk0p2 179:2    0 29.6G  0 part /

    Появились две партиции sda1 и sdb1 на моих дисках /dev/sda и /dev/sdb
    Форматирую их:
    sudo mkfs.ext4 /dev/sda1
    sudo mkfs.ext4 /dev/sdb1

    Теперь мне нужно найти идентификаторы партиций:
    sudo blkid

    /dev/mmcblk0p1: LABEL_FATBOOT="boot" LABEL="boot" UUID="E183-6233" BLOCK_SIZE="512" TYPE="vfat" PARTUUID="f9d63b6f-01"
    /dev/mmcblk0p2: LABEL="rootfs" UUID="1232a209-2596-48f0-a078-731d10b918ad" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="f9d63b6f-02"
    /dev/sda1: UUID="cbb00841-3976-4f63-994f-2e8ef826e174" BLOCK_SIZE="4096" TYPE="ext4" PARTLABEL="primary" PARTUUID="9d912a08-841f-4c69-9b09-659b89d99f98"
    /dev/sdb1: UUID="9dec460a-f6d6-48d1-b2c2-af9b99dad5eb" BLOCK_SIZE="4096" TYPE="ext4" PARTLABEL="primary" PARTUUID="4883ca61-03d5-4842-acd0-15929fb837e5"

    В этом выводе мне интересны PARTUUID моих разделов sda1 и sdb1:
    9d912a08-841f-4c69-9b09-659b89d99f98 и 4883ca61-03d5-4842-acd0-15929fb837e5

    Создаю папки, в которые будем монтировать мои диски:
    sudo mkdir /mnt/5t
    sudo mkdir /mnt/64g

    Я хочу, чтобы мои диски монтировались в эти папки при запуске системы, потому изменяю /etc/fstab
    sudo nano /etc/fstab
    И добавляю две строки уже к существующим строкам:
    PARTUUID=9d912a08-841f-4c69-9b09-659b89d99f98 /mnt/5t ext4 defaults 0 2
    PARTUUID=4883ca61-03d5-4842-acd0-15929fb837e5 /mnt/64g ext4 defaults 0 2

    Жму CTRL+O, Enter и CTRL+X

    Перезагружаю плату: sudo reboot и переподключаюсь по SSH заново
    Проверяю накопители: df -h и вижу среди прочих искомые смонтированные разделы:

    Filesystem      Size  Used Avail Use% Mounted on
    /dev/sdb1        59G   24K   56G   1% /mnt/64g
    /dev/sda1       4.6T   28K  4.3T   1% /mnt/5t

    Настройка дисков завершена



    Настройка файлового сервера Samba

    sudo nano /etc/samba/smb.conf
    С помощью CTRL+K удаляю все строки и из буфера копирую:

    [global]
    workgroup=WORKGROUP
    disable netbios=no
    wins support = yes
    log file=/var/log/samba/log.%m
    max log size=1000
    server role=standalone server
    security=user
    map to guest=Bad User
    guest ok=yes
    guest only=yes
    guest account=pi
    directory mask=0777
    force create mode=0777
    force directory mode=0777[5t]
    path=/mnt/5t
    public=yes
    guest ok=yes
    browseable=yes
    writeable=yes[64g]
    path=/mnt/64g
    public=yes
    guest ok=yes
    browseable=yes
    writeable=yes

    Ctrl+o, Enter, Ctrl+x
    sudo systemctl restart smbd

    На виндовс машине жму Win+R, набираю \\rpi4 и Enter

    Файловый сервер для Windows настроен и работает

    Настройка torrent-клиента Transmission

    Мне нужны три папки для работы клиента:
    1.temp — папка где будут храниться данные недокачанных торрентов
    2.torrinbox — папка откуда клиент будет забирать торрент-файлы и начинать их качать
    3.incoming — папка с завершёнными загрузками

    Создаю папки и ставлю разрешения:
    sudo mkdir /mnt/64g/temp
    sudo mkdir /mnt/64g/torrinbox
    sudo mkdir /mnt/5t/incoming
    sudo chmod -R 777 /mnt/5t
    sudo chmod -R 777 /mnt/64g

    Останавливаю клиент:
    sudo service transmission-daemon stop

    Иду в настройки:
    sudo nano /etc/transmission-daemon/settings.json

    изменяю:
    «download-dir»: "/mnt/5t/incoming",
    «incomplete-dir»: "/mnt/64g/temp",
    «incomplete-dir-enabled»: true,
    «rpc-authentication-required»: false,
    «rpc-host-whitelist-enabled»: false,
    «rpc-whitelist-enabled»: false,
    «trash-original-torrent-files»: true,
    «dht-enabled»: false,
    в конце конфига ставлю запятую после последней строки и добавляю:
    «watch-dir»: "/mnt/64g/torrinbox",
    «watch-dir-enabled»: true

    Жму CTRL+O, Enter и CTRL+X

    sudo mkdir /etc/systemd/system/transmission-daemon.service.d/ && sudo nano /etc/systemd/system/transmission-daemon.service.d/override.conf

    [Service]
    Type=simple
    User=debian-transmission
    Group=debian-transmission
    Жму CTRL+O, Enter и CTRL+X

    Если планируется много (10тыс+ раздач), то делаю вот так:
    sudo nano /lib/systemd/system/transmission-daemon.service
    добавляю в секцию [Service]
    LimitNOFILE=200000
    LimitNPROC=200000
    Жму CTRL+O, Enter и CTRL+X

    sudo systemctl daemon-reload && sudo systemctl start transmission-daemon.service

    Как этим пользоваться?

    Всё просто:
    1.В браузере можно открыть веб-интерфейс торрент-клиента и работать в нём:

    2.Или Win+R, набрать \\rpi4 и Enter

    В папку \\rpi4\64g\torrinbox бросить торрент-файл для загрузки и когда он загрузится — забрать информацию из папки \\rpi4\5t\incoming.

    Вместо послесловия

    Плата по SFTP копирует в себя и из себя файлы со скоростью ~30МБайт/с из-за нагрузки на процессор.
    Плата по SMB способна полностью утилизировать 1Гбит/с канал ~110МБайт/с.
    Следует рассчитывать примерно на ~30тыс мелких раздач на одну плату. Памяти более 2ГБайт не нужно, она не будет использована для полезных задач.
    Без радиатора на процессоре — будет плохо.
    Всем добра!

    Планирую купить +107 Добавить в избранное Обзор понравился +184 +316

    Просмотры:

    Коментарі

    Популярні публікації