Top.Mail.Ru
Домашний NAS на Debian: S3-хранилище и DLNA-сервер своими руками | Блог Serverflow Скачать
прайс-лист
Бесплатная
доставка по РФ
Скидка
за отзыв!
Из-за нестабильности цен RAM фактическая стоимость может отличаться. Цена подтверждается после оформления заказа, работаем над обновлением цен!
Distribution of
Server Components
8 (800) 222-70-01 Консультация IT-специалиста Сравнение

Домашний NAS на Debian: S3-хранилище и DLNA-сервер своими руками

~ 15 мин
1893
Средний
Гайды
Домашний NAS на Debian: S3-хранилище и DLNA-сервер своими руками

Введение

Если кто-то не знает, то NAS (Network Attached Storage) — это сетевое хранилище, ваш личный файловый сервер, доступный на всех устройствах в вашей локальной домашней сети. Сейчас на рынке можно найти множество готовых NAS-решений от известных брендов, а также целую россыпь специальных дистрибутивов для быстрого развертывания хранилища. Однако все эти подходы развертывания NAS имеют ряд не самых приятных нюансов: в первом случае мы покупаем “коробку”, и не всегда понятно, что у нее внутри и какие есть ограничения, а во втором случае дистрибутив часто бывает перегружен функциями, которые вам могут никогда не понадобиться: вам ведь нужно NAS-хранилище, а не жнец, чтец, и на дуде игрец? Так или иначе, все эти решения объединяет одно: под капотом у них в большинстве случаев — Linux. Так почему бы нам не взять чистый дистрибутив Debian и не построить на его основе свое собственное хранилище. Команда ServerFlow считает, что так может сделать каждый, поэтому в этой статье мы расскажем вам, как развернуть домашнее NAS-хранилище и правильно настроить его, чтобы злобные корпорации никогда не добрались до ваших личных данных.

План

Сегодня мы не будем вдаваться в подробности о том, что такое NAS, какие NAS бывают и какие файловые системы существуют — об этом мы рассказывали в отдельной статье. Наша задача — объяснить вам все тонкости развертывания NAS, и мы приступаем к ней незамедлительно. Вот какой фронт настроек нам предстоит проделать для достижения цифрового суверенитета:
  • SMB-сервер — для удобного доступа к файлам с Windows и macOS.
  • S3-хранилище (MinIO) — современное объектное хранилище.
  • Zeroconfig (Avahi) — для автоматического обнаружения нашего сервера в сети.
  • Торрент-клиент (Transmission) — здесь объяснения не нужны.
  • DLNA-сервер (MiniDLNA) — для просмотра медиаконтента на телевизоре и других устройствах.
  • Уведомления в Telegram — для получения данных о состоянии дисков.

Шаг 1: Подготовка и установка системы

Переходим от слов к действию и начинаем разбор первого шага — подготовки аппаратного обеспечения и установки Debian.

В нашем случае будет использоваться плата материнская плата Supermicro X10SDV. Почему наш острый глаз пал именно на нее? Все дело в наличии двух 10-гигабитных сетевых портов Ethernet — для коммерческого NAS этого может быть маловато, но под домашнее хранилище хватит с лихвой. Кроме того, эта плата также поддерживает интеграцию модулей оперативной памяти с ECC, что критически важно, если вы не хотите потерять все свои фотографии из папки “Геленджик 2007” из-за системного сбоя. 

Материнская плата Supermicro X10SDV
Материнская плата Supermicro X10SDV для развертывания NAS-хранилища.

В нашем хранилище установлено 64 ГБ RAM ECC, чего более чем достаточно для домашнего NAS. Об установки Debian говорить не будем — гайдов на эту тему в сети пруд пруди. После установки зайдите на сервер по SSH, узнайте IP-адрес, полученный по DHCP, через команду ip a, повысьте привилегии до суперпользователя через su -l, обновите список пакетов вводом apt update и, наконец, установите все необходимые нам пакеты командой apt install mdadm samba avahi-daemon transmission-daemon smartmontools minidlna.

Оперативная память с поддержкой ECC
Модули оперативной памяти с емкостью 32 ГБ и поддержкой ECC.

Шаг 2: Настройка дискового пространства (RAID 5)

NAS-хранилище с дисками RAID-уровней — это кружка с дыркой, поэтому следующим шагом станет настройка дискового пространства и создание RAID-массива. В нашей системе используется 4 диска, из которых мы соберем программный RAID 5 с помощью утилиты mdadm. Почему именно программный, а не аппаратный RAID? Так проще, надежнее и дешевле. Для начала проверим, видит ли система наши диски командой lsblk. В нашем случае используются диски с именами sdb, sdc, sdd и sde.

Перед созданием массива нужно удалить с дисков старую информацию о других RAID, если таковая имеется. Это делается следующей командой:

mdadm --zero-superblock --force /dev/sd{b,c,d,e}

Удалили? Отлично! Ой, забыли вас предупредить: эта команда полностью стирает все данные с дисковых накопителей! Убедитесь, что используете правильные имена дисков, чтобы не удалить важные файлы.

Если все указано верно, можно приступать к созданию RAID-массива. Введите эту команду:

mdadm --create --verbose /dev/md0 --level=5 --raid-devices=4 /dev/sd{b,c,d,e}

Затем система запросит подтверждение — нужно согласиться. Процесс создания (ресинхронизации) массива может занять весьма продолжительное время, но работать с ним можно уже сейчас. Помните, что во время перестройки массива диски могут сильно нагреться — заранее подготовьте жидкий азот или хотя бы проверьте работу системы охлаждения. 

Переходим к очень важному шагу: сохраняем конфигурацию массива, чтобы система автоматически собирала его после перезагрузки. Для этого создайте файл конфигурации и запишите в него информацию о нашем массиве:

echo "DEVICE partitions" > /etc/mdadm/mdadm.conf
mdadm --detail --scan --verbose | awk '/ARRAY/ {print}' >> /etc/mdadm/mdadm.conf

Процесс создания RAID-массива
Создание RAID-5 массива в системе на базе 4 дисков.

Отлично, с RAID закончили, поэтому переходим к развертыванию файловой системы. Мы будем использовать проверенную временем систему ext4, которая широко известна своей отказоустойчивостью. Введите команду mkfs.ext4 /dev/md0, чтобы создать ext4. Теперь настроим автоматическое монтирование нашего раздела при загрузке системы. Для этого создаем директорию для монтирования командой mkdir /mnt/storage. Затем узнаем UUID нашего нового раздела (использовать UUID корректнее, чем имена /dev/md0) командой blkid, скопируйте его и откройте файл /etc/fstab командой nano /etc/fstab. Добавьте в конец файла следующую строку, подставив свой UUID:

UUID="ffa7c082-7613-4dbc-ae62-3f5508652cf6" /mnt/storage ext4 defaults 0 0

Сохраните файл ( CTRL+O ) и выйдите ( CTRL+X ). Осталось только примонтировать все разделы, указанные в fstab, используя команду mount -a, и в конце проверить свободное место на дисках командой df -h. Если вы видите примонтированный раздел со свободным местом (в нашем случае 10 ТБ), значит, все сделано корректно.

Выполнение монтирования разделов файловой системы
Монтирование разделов файловой системы.

Шаг 3: Настройка файлового сервера (Samba)

Надеюсь, вы еще не сдались, ведь основной процесс только начинается — теперь займемся настройкой файлового сервера. Для этого будем использовать самое популярное ПО для обращения к файлам под названием Samba. Сначала создадим директории для наших сетевых папок командами:

mkdir /mnt/storage/smbshare
mkdir /mnt/storage/downloads
mkdir /mnt/storage/media

Теперь откроем конфигурационный файл Samba с помощью команды nano /etc/samba/smb.conf. Там вы увидите секцию [global], параметры которой должны выглядеть именно так:

workgroup = WORKGROUP
server role = standalone server
unix password sync = yes

В самый конец файла добавьте описание ваших общих папок. У нас это выглядит так: 

Папка [smbshare]:

path = /mnt/storage/smbshare
guest ok = no
writable = yes
browsable = yes

Папка [downloads]:

path = /mnt/storage/downloads
guest ok = no
writable = yes
browsable = yes

Папка [media]:

path = /mnt/storage/media
guest ok = no
writable = yes
browsable = yes

Настройка секции global
Настройка секции global в конфигурационном файле сервиса Samba.

Следующий шаг — создать пользователя для доступа. Важно учесть, что пользователя сначала нужно создать в самой файловой системе, и только потом задать ему пароль для Samba. Пользователь и пароль создаются так:

useradd ИМЯ ПОЛЬЗОВАТЕЛЯ -m -s /bin/bash
passwd ВАШ ПАРОЛЬ

После этого задайте Samba-пароль для созданного пользователя такой командой:

smbpasswd -a ИМЯ ПОЛЬЗОВАТЕЛЯ

Перезапускаем сервис Samba командой systemctl restart smbd и вуа-ля, все готово!

Теперь вы можете зайти с другого компьютера в вашей сети и увидите новые общие папки.

Общая папка файлового сервера
Общая папка, созданная с помощью сервиса Samba.

Шаг 4: Настройка S3-хранилища (MinIO)

Почти половина пути пройдена, но еще осталось несколько преград, одной из которых является настройка S3-хранилища, для чего мы рекомендуем использовать MinIO. MinIO — это популярный сервис объектного хранилища, совместимый с Amazon S3 API. Он идеально подходит для хранения бэкапов, медиафайлов и статики для веб-приложений. По сути, это ваше личное, безопасное и, что не менее важно, бесплатное облако для хранения данных. Приступаем к развертыванию: качаем актуальную версию пакета MinIO на официальном сайте проекта. Затем устанавливаем ее командой:

dpkg -i minio_20250907161309.0.0_amd64.deb

Для обеспечения безопасности запустите MinIO от имени специального пользователя: 

groupadd -r minio-user
useradd -M -r -g minio-user minio-user

Команда для скачивания MinIO на Debian
Команда для скачивания MinIO на Debian с официального сайта проекта. Источник: Min.io.

Теперь создадим директорию для данных S3 и дадим нашему пользователю права на нее через команды:

mkdir /mnt/storage/s3
chown -R minio-user:minio-user /mnt/storage/s3

Отлично, подготовка S3-хранилища завершена, но теперь нужно настроить его. Откройте параметры хранилища с помощью команды nano /etc/default/minio и приведите его к следующему виду, задав логин, пароль и путь к данным:

MINIO_VOLUMES="/mnt/storage/s3"
MINIO_OPTS="--console-address :9001"
MINIO_ROOT_USER="anton"
MINIO_ROOT_PASSWORD="mypasswd"

Затем запустите и добавьте сервис в автозагрузку командами:

systemctl start minio
systemctl enable minio

Теперь откройте браузер и зайдите по адресу http://<IP-адрес-сервера>:9001. Если все настроено верно, вы увидите веб-панель MinIO.

Панель управления MinIO
Панель управления хранилищем MinIO.

Шаг 5: Настройка торрент-клиента (Transmission)

Торрент-клиент очень удобно использовать для создания домашнего NAS, и у этого есть ряд весомых причин:
  • Автоматическое добавление торрент-файлов — клиент сканирует папку для скачивания и импортирует файлы с расширением .torrent напрямую
  • Настройка времени общего пользования — можно указать, сколько часов после завершения скачивания файл будет доступен для отдачи.
  • Можно выбрать ограничение скорости скачивания и выгрузки, а также доступен выбор пула портов bittorrent.
Чтобы настроить торрент-клиент, нужно создать необходимые директории для загрузок через команду:

mkdir -p /mnt/storage/downloads/{completed,incomplete,watch}

Самый важный шаг на этом этапе — выдать права. Сервис Transmission работает от имени пользователя debian-transmission, поэтому для выдачи прав вводим такие команды:

chown -R debian-transmission:debian-transmission /mnt/storage/downloads
chmod -R 777 /mnt/storage/downloads

Теперь отредактируйте файл настроек вводом команд:

systemctl stop transmission-daemon
nano /etc/transmission-daemon/settings.json

Обязательно остановите сервис перед редактированием, иначе ваши изменения будут перезаписаны!

После этого найдите и измените следующие строки:

"download-dir": "/mnt/storage/downloads/completed",
"incomplete-dir": "/mnt/storage/downloads/incomplete",
"incomplete-dir-enabled": true,
"rpc-authentication-required": true,
"rpc-password": "ВАШ_пароль",
"rpc-username": "anton",
"rpc-whitelist-enabled": false,
"watch-dir": "/mnt/storage/downloads/watch",
"watch-dir-enabled": true,

На этом все, сохраняем и запускаем сервис командой:

systemctl start transmission-daemon

Осталось только проверить! Зайдите в браузере по адресу http://<IP-адрес-NAS>:9091. Чтобы проверить автоматическую загрузку, скопируйте .torrent файл в сетевую папку downloads/watch.

Шаг 6: Настройка DLNA-сервера (MiniDLNA)

Мы почти у финиша! Предпоследний шаг — настроить DLNA-сервер, чтобы запускать скачанные кинчики на Smart-TV или смартфоне: 

В первую очередь создадим директории для медиаконтента:

mkdir -p /mnt/storage/media/{video,music,photos}

Затем нужно настроить права доступа. Сервис работает от имени пользователя minidlna, поэтому введите следующие команды:

chown -R minidlna:minidlna /mnt/storage/media
chmod -R 777 /mnt/storage/media

Теперь создайте отдельную папку для базы данных и логов и снова настройте права:

mkdir -p /var/cache/minidlna /var/log/minidlna
chown -R minidlna:minidlna /var/cache/minidlna /var/log/minidlna

Переходим к правке конфигурационного файла. Для этого введите команду nano /etc/minidlna.conf.

Внесите следующие изменения в конфигурацию, внеся комментарии и изменения в следующие строки для указания пути к папкам контента:

media_dir=V,/mnt/storage/media/video
media_dir=A,/mnt/storage/media/music
media_dir=P,/mnt/storage/media/photos

Для создания папки хранения базы данных введите эту команду:

db_dir=/var/cache/minidlna

Нужна еще одна папка для логов:

log_dir=/var/log/minidlna

Теперь установите имя, под которым сервер будет виден в сети:

friendly_name=MyDebianNAS

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

inotify=yes

В конце сохраните файл и перезапустите сервис:

systemctl restart minidlna

Для проверки закиньте пару фильмов в папку media/video. На вашем Smart TV или смартфоне в разделе “Медиасерверы” должен появиться MyDebianNAS.

Шаг 7: Настройка уведомлений о состоянии дисков в Telegram

Чтобы не допустить ситуации, когда ваши диски неожиданно выйдут из строя, стоит подключить Telegram-уведомления о состоянии дисков через бота. Для начала, такого бота нужно создать:
  • Найдите в Telegram бота @BotFather и отправьте ему команду /newbot.
  • Придумайте имя (например, MyNAS Monitor Bot) и юзернейм (например, mynas_alert_bot).
  • BotFather пришлёт вам токен вида 1234567890:ABC....XYZ. Сохраните его.
  • Найдите своего бота в поиске и отправьте ему любое сообщение (например, /start).
  • Чтобы узнать ваш CHAT_ID, откройте в браузере ссылку, подставив свой токен: https://api.telegram.org/bot<ВАШ_ТОКЕН>/getUpdates. В ответе найдите "chat":{"id":<ВАШ_ID>}. Это и есть ваш ID.
Теперь создайте скрипт для отправки уведомлений:

Bash
nano /usr/local/bin/smart-telegram.sh

Вставьте в него следующий код, заменив YOUR_BOT_TOKEN и YOUR_CHAT_ID на ваши данные:

#!/bin/bash
# --- НАСТРОЙКИ ---
TOKEN="YOUR_BOT_TOKEN"
CHAT_ID="YOUR_CHAT_ID"
# -----------------

Затем напишите сообщение для уведомления:

MESSAGE="Внимание! Обнаружена проблема с диском на NAS!

\`\`\`
$(/usr/sbin/smartctl -H $SMARTD_DEVICE)

$SMARTD_MESSAGE
\`\`\`
"

Далее отправляем уведомление через curl:

/usr/bin/curl -s -X POST "https://api.telegram.org/bot$TOKEN/sendMessage" \
-d chat_id="$CHAT_ID" \
-d text="$MESSAGE" \
-d parse_mode="Markdown" > /dev/null

Если уведомление пришло, сохраните скрипт и сделайте его исполняемым командой:

chmod +x /usr/local/bin/smart-telegram.sh

Теперь настройте smartd для вызова скрипта. Для этого откройте файл командой /etc/smartd.conf, найдите строку DEVICESCAN и приведите её к такому виду (или добавьте, если ее нет): DEVICESCAN -a -H -m root -M exec /usr/local/bin/smart-telegram.sh.
  • -a — отслеживать все атрибуты SMART.
  • -H — следить за общим состоянием здоровья диска.
  • -M exec — выполнять внешнюю команду.
В конце перезапускаем сервис smartmontools командой:

systemctl restart smartmontools

На этом все — если с одним из дисков возникнут проблемы, вы получите уведомление в Telegram.

Выводы

Теперь ваш собственный, домашний NAS-сервер полностью готов к эксплуатации. Как вы видите, ничего сложного в этом нет. Преимущество такого подхода заключается в том, что вы можете добавлять на сервер только те сервисы, которые нам действительно нужны, и вы точно будете знать, как он устроен и работает.
Автор: Serverflow Serverflow
Поделиться

Комментарии 1

Написать комментарий
Андрей
Несколько вопросов. 1) Почему не raidZ? 2) Почему не ZFS? 3) Для дома и семьи можно поставить OpenMediaVault, почему вы решили сами собирать?
Serverflow
В целом ZFS была бы в тему, но наш специалист решил остаться на EXT4 для удобства. Причина простая: EXT4 вообще не требует ничего от железа, а вот ZFS требует. Из этого вытекает ответ на первый вопрос: Raid-Z это для ZFS, а не EXT4. Касательно Вашего третьего вопроса: OpenMediaVault противоречит концепции. Мы хотели минималистичный NAS с полной настройкой своими руками. Будут еще вопросы, можете смело писать, постараемся ответить :)
Написать отзыв
До 6 фото, размером до 12Мб каждое
Мы получили ваш отзыв!

Он появится на сайте после модерации.

Написать комментарий

Комментарий появится на сайте после предварительной модерации

До 6 фото, размером до 12Мб каждое
Мы получили ваш отзыв!

Он появится на сайте после модерации.

Мы свяжемся с вами утром

График работы: Пн-Пт 10:00-18:30 (по МСК)

Обработаем вашу заявку
в ближайший рабочий день

График работы: Пн-Пт 10:00-18:30 (по МСК)