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
- Цена: 22USD за флешку Evtran 64G
- Перейти в магазин
Интересен мой опыт создания торрент-сидбокса/сетевого хранилища на базе 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
Коментарі
Дописати коментар
Олег Мічман в X: «Donations and support for media resources, bloggers, projects, and individuals. https://t.co/HPKsNRd4Uo https://t.co/R6NXVPK62M» / X
https://twitter.com/olukawy/status/1703876551505309973