SMB в LXC-контейнере Proxmox: как подключить сетевую папку к Jellyfin

SMB в LXC-контейнере Proxmox — сетевая папка для Jellyfin Proxmox
Пошаговое подключение SMB-папки с NAS, роутера или Windows к Jellyfin в непривилегированном LXC-контейнере Proxmox VE: монтирование на хосте, права, проброс и ошибки.

Реклама. ООО «ТАЙМВЭБ.КЛАУД», ИНН 7810945525.

Timeweb

Подключить сетевую папку SMB в LXC-контейнере Proxmox можно так: шару монтируют на хосте Proxmox, а затем пробрасывают в контейнер точкой монтирования. Так Jellyfin (или Plex, Nextcloud, qBittorrent) получает доступ к фильмам и сериалам на NAS, диске роутера или компьютере с Windows. Главная сложность — права доступа в непривилегированном контейнере: без правильных uid и gid папка внутри будет пустой, принадлежать nobody или открываться только на чтение.

Инструкция проверена на Proxmox VE 8 и 9 с Jellyfin, установленным скриптом community-scripts. Если Proxmox у вас работает на мини-ПК вместе с роутером, пригодится и статья OpenWrt в Proxmox VE. А как поставить на тот же сервер умный дом, рассказано в статье Home Assistant в Proxmox.

Как работает SMB в LXC-контейнере Proxmox

Схема: SMB в LXC-контейнере Proxmox — шара монтируется на хосте и пробрасывается в непривилегированный контейнер с Jellyfin
SMB-папка монтируется на хосте с uid=100000 и gid=110000 и пробрасывается в контейнер
  • Монтировать SMB внутри непривилегированного контейнера нельзя — ядро не разрешает ему монтировать CIFS. Поэтому шару монтирует хост Proxmox, а контейнер получает готовую папку через точку монтирования (bind mount).
  • В непривилегированном контейнере идентификаторы сдвинуты на 100000: root контейнера (UID 0) на хосте — это UID 100000, группа с GID 10000 — это GID 110000 (подробнее в вики Proxmox).
  • Поэтому хост монтирует шару от имени uid=100000 и gid=110000, а в контейнере создаётся группа lxc_shares с GID 10000, куда добавляется пользователь jellyfin. Способ описан в известном руководстве на форуме Proxmox и работает для любого числа контейнеров.

Что понадобится

  • Общая папка SMB на NAS, роутере или компьютере, её адрес, логин и пароль.
  • Доступ к оболочке Proxmox: узел → Оболочка в веб-интерфейсе или SSH.
  • LXC-контейнер с Jellyfin. В примерах его ID — 102, замените на свой.

Если Jellyfin ещё не установлен, проще всего создать контейнер скриптом community-scripts — команду выполните в оболочке Proxmox:

bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/jellyfin.sh)"

Скрипт загружается с GitHub (raw.githubusercontent.com). У части российских провайдеров GitHub открывается с перебоями, и тогда скрипт завершается ошибкой загрузки — в этом случае создайте контейнер Debian или Ubuntu из шаблона Proxmox и установите Jellyfin по официальной инструкции.

Общая папка SMB

Способ зависит от устройства. Главное — чтобы у папки был пользователь с паролем и поддерживался протокол SMB2 или SMB3.

  • Роутер с USB-диском (Keenetic, ASUS, TP-Link и другие): включите файловый сервер или «Общий доступ к файлам» (SMB), создайте пользователя и дайте ему доступ к папке.
  • NAS (Synology, TrueNAS, OpenMediaVault): создайте общую папку, пользователя и включите SMB. Для Jellyfin достаточно прав на чтение, для Nextcloud или торрент-клиента нужна запись.
  • Windows: нажмите правой кнопкой на диск или папку → Свойства → Доступ → Расширенная настройка, отметьте «Открыть общий доступ к этой папке», задайте имя и в разделе Разрешения выдайте права нужному пользователю.
Расширенная настройка общего доступа к USB-диску в Windows
Разрешения общей папки SMB в Windows

Проверьте доступ с компьютера: в Проводнике откройте \\192.168.1.10\Media (подставьте свой IP и имя папки). В Linux и в fstab тот же путь пишется с прямыми слэшами: //192.168.1.10/Media.

Группа lxc_shares в контейнере

Сначала создайте в контейнере группу с GID 10000 и добавьте в неё пользователя jellyfin. Команды выполняются в оболочке хоста Proxmox:

Оболочка узла в веб-интерфейсе Proxmox VE
# на хосте Proxmox; 102 — ID вашего контейнера с Jellyfin (он должен быть запущен)
pct exec 102 -- groupadd -g 10000 lxc_shares
pct exec 102 -- usermod -aG lxc_shares jellyfin
pct shutdown 102

Если к папке нужен доступ другим программам, добавьте в группу и их пользователей: www-data для Nextcloud, debian-transmission для Transmission и т.д.

Монтирование SMB на хосте Proxmox

Установите утилиты CIFS, создайте точку монтирования и файл с логином и паролем:

apt install -y cifs-utils
mkdir -p /mnt/lxc_shares/media
nano /root/.smbcredentials

Содержимое файла /root/.smbcredentials — две строки с вашими логином и паролем от SMB:

username=smb_user
password=smb_password
# domain=WORKGROUP   # только если сервер требует домен

Сохраните файл (Ctrl+O, Enter, Ctrl+X) и закройте его от чужих глаз:

chmod 600 /root/.smbcredentials

Теперь добавьте в конец /etc/fstab (nano /etc/fstab) одну строку — замените адрес и имя папки на свои:

//192.168.1.10/Media /mnt/lxc_shares/media cifs _netdev,x-systemd.automount,nofail,noatime,uid=100000,gid=110000,dir_mode=0770,file_mode=0770,credentials=/root/.smbcredentials,iocharset=utf8 0 0
  • uid=100000,gid=110000 — владельцем файлов на хосте будет root контейнера и группа lxc_shares.
  • dir_mode=0770,file_mode=0770 — полный доступ владельцу и группе, остальным — никакого. Небезопасные 0777 не нужны.
  • _netdev,x-systemd.automount,nofail — шара монтируется при первом обращении и не мешает загрузке Proxmox, если NAS выключен.
  • iocharset=utf8 — корректные русские имена файлов.
  • Версию протокола указывать не обязательно: клиент сам выберет лучшую (обычно SMB 3.1.1). Если сервер старый, добавьте vers=3.0 или vers=2.0.

Примените изменения и проверьте результат:

systemctl daemon-reload
mount /mnt/lxc_shares/media

# владелец должен быть 100000 110000, а не root root
ls -ln /mnt/lxc_shares/media | head

Проброс SMB-папки в LXC-контейнер

Добавьте точку монтирования и запустите контейнер. Команда допишет строку mp0 в /etc/pve/lxc/102.conf, редактировать файл вручную не нужно:

pct set 102 -mp0 /mnt/lxc_shares/media,mp=/mnt/media
pct start 102

Убедитесь, что файлы видны и Jellyfin может писать в папку (он сохраняет туда обложки и NFO, если включить эту опцию):

# файлы видны внутри контейнера
pct exec 102 -- ls -la /mnt/media

# пользователь jellyfin может писать в папку
pct exec 102 -- su -s /bin/sh jellyfin -c 'touch /mnt/media/.test && rm /mnt/media/.test && echo OK'
Содержимое сетевой папки внутри LXC-контейнера Jellyfin

Несколько папок или дисков пробрасываются как mp1, mp2 и т.д. Параметр ro=1 делает папку доступной только для чтения — удобно для музыки или архива:

mp0: /mnt/lxc_shares/media,mp=/mnt/media
mp1: /mnt/lxc_shares/music,mp=/mnt/music,ro=1
Пример конфигурации LXC-контейнера Jellyfin с несколькими точками монтирования

В веб-интерфейсе Proxmox такие точки монтирования создать нельзя — раздел Ресурсы → Добавить → Точка монтирования работает только с томами хранилищ, а папки хоста пробрасываются через pct set или конфиг.

Медиатека в Jellyfin

Откройте веб-интерфейс Jellyfin и перейдите в Панель управления → Медиатеки → Добавить медиатеку. Выберите тип содержимого, нажмите «+» у списка папок и укажите /mnt/media (или вложенную папку, например /mnt/media/Movies).

Выбор папки /mnt при добавлении медиатеки в Jellyfin

Почему не через «Хранилище → SMB/CIFS» в Proxmox

В Proxmox есть встроенный тип хранилища SMB/CIFS (Центр обработки данных → Хранилище → Добавить → SMB/CIFS). Он монтирует шару в /mnt/pve/<имя>, но от имени root хоста. В непривилегированном контейнере такие файлы будут принадлежать nobody и откроются в лучшем случае только на чтение. Это хранилище хорошо подходит для ISO-образов и резервных копий, а для медиатеки в LXC удобнее способ из этой статьи.

Старый вариант — смонтировать шару через fstab и добавить её в Proxmox как хранилище типа «Каталог» с содержимым «Образ диска» и «Контейнер» — лучше не использовать: Proxmox может разместить на сетевой папке диски ВМ, и при отключении NAS они станут недоступны.

Если не работает

  • mount error(13): Permission denied — неверный логин или пароль, у пользователя нет прав на папку, либо сервер требует домен (строка domain= в файле с паролем).
  • mount error(95): Operation not supported — не совпала версия протокола. Добавьте в fstab vers=3.0, затем vers=2.0. Роутеры, которые умеют только SMB1, лучше обновить: этот протокол устарел и небезопасен.
  • mount error(112): Host is down — неверный IP, SMB на сервере выключен или та же проблема с версией протокола.
  • mount error(2): No such file or directory — неверное имя общей папки. Список папок покажет smbclient -L.
  • В контейнере пусто — шара не смонтирована на хосте (findmnt /mnt/lxc_shares/media) или контейнер запустился раньше, чем смонтировалась шара. Перезапустите контейнер. Если это повторяется после каждой перезагрузки, задайте контейнеру задержку запуска в Параметры → Порядок запуска и отключения.
  • Файлы принадлежат nobody или нет записи — не указаны uid=100000,gid=110000, пользователь программы не добавлен в группу lxc_shares или контейнер не перезапускался после этого.
  • Вместо русских букв — знаки вопроса — добавьте iocharset=utf8.
  • Proxmox долго загружается, когда NAS выключен, — в fstab не хватает _netdev,x-systemd.automount,nofail.

Команды для диагностики:

# какие шары отдаёт сервер и подходит ли логин
apt install -y smbclient
smbclient -L //192.168.1.10 -U smb_user

# подробная причина ошибки монтирования
dmesg | grep -i cifs | tail

# смонтирована ли папка на хосте
findmnt /mnt/lxc_shares/media

Если Proxmox доступен из интернета, не забудьте про базовую защиту — пригодится памятка по безопасности сервера. Вопросы и свои варианты пишите в комментариях.

Частые вопросы

Почему папка SMB в LXC-контейнере Proxmox пустая?

Скорее всего, шара не смонтирована на хосте или контейнер запустился раньше неё. Проверьте на хосте findmnt /mnt/lxc_shares/media, выполните mount /mnt/lxc_shares/media и перезапустите контейнер.

Почему файлы в контейнере принадлежат nobody и нет прав на запись?

В непривилегированном контейнере UID и GID сдвинуты на 100000. Смонтируйте шару на хосте с uid=100000,gid=110000, создайте в контейнере группу lxc_shares с GID 10000 и добавьте в неё пользователя программы.

Можно ли смонтировать SMB прямо внутри LXC-контейнера?

В непривилегированном — нет, ядро не разрешает ему монтировать CIFS. В привилегированном можно, но такой контейнер менее безопасен. Надёжнее монтировать шару на хосте и пробрасывать через точку монтирования.

Что написать в файле с паролем для SMB?

Две строки: username=ваш_логин и password=ваш_пароль, при необходимости третья domain=WORKGROUP. Затем выполните chmod 600 для этого файла.

Нужны ли логин и пароль, если у папки гостевой доступ?

Для гостевой папки вместо credentials= укажите в fstab опцию guest. Но лучше завести отдельного пользователя: многие современные серверы и Windows блокируют гостевой доступ по SMB2/SMB3.

Как пробросить в контейнер несколько дисков или папок?

Смонтируйте каждую шару на хосте в свою папку и добавьте точки mp1, mp2 и т.д.: pct set 102 -mp1 /mnt/lxc_shares/music,mp=/mnt/music.

Подойдёт ли способ для Plex, Nextcloud или qBittorrent?

Да. Добавьте в группу lxc_shares пользователя нужной программы — например, www-data для Nextcloud — и перезапустите контейнер.

Почему не использовать хранилище SMB/CIFS в интерфейсе Proxmox?

Оно монтирует шару от имени root хоста, поэтому в непривилегированном контейнере файлы будут принадлежать nobody. Такое хранилище удобно для ISO и резервных копий, а для медиатеки лучше монтирование через fstab с uid и gid.

Рубрики: Proxmox Веб-приложения

Подписаться на новые статьи

Каналы и RSS. Без почты и рассылок.

Оцените статью
Добавить комментарий

  1. Аватар Алексей
    Алексей

    Добрый день. Подскажите, пожалуйста, нужны ли логин и пароль если права доступа к папке 777 и поступить в этом случае?

    Ответить
    1. Аватар kiberlis
      kiberlis автор

      да, обязательно нужны. И права доступа 777 при монтировании также необходимо прописать.

      Ответить
  2. Аватар довс
    довс

    Спасибо, пробросил диск подключённый к роутеру в nextcloud. Только не получается из некста загружать файлы на него. Ругается на доступ. Ошибка модуля контроля доступа.

    Ответить
    1. Аватар kiberlis
      kiberlis автор

      Нужно дописать права доступа для монтируемой директории в файле /etc/fstab

      Добавив file_mode=0777,dir_mode=0777 0 0
      к \\192.168.0.1\Disk1\Movies /media/share cifs credentials=/root/.smb,users,rw,vers=3.0,iocharset=utf8

      Получится так: \\192.168.0.1\Disk1\Movies /media/share cifs credentials=/root/.smb,users,rw,vers=3.0,iocharset=utf8,file_mode=0777,dir_mode=0777 0 0

      Поправил инструкцию.

      Ответить
      1. Аватар Борис
        Борис

        Приветствую, мне кажется тут чего-то не хватает:
        nano ~/.smb
        Отредактируйте и добавьте в файл следующие строки. Измените smb_username и smb_password на имя пользователя и пароль вашего общего ресурса SMB.

        Ответить
        1. Аватар александр
          александр

          Полностью согласен. У меня там тоже пусто

          Ответить
          1. Аватар Дмитрий
            Дмитрий

            Просто добавьте строки в файл:

            username=smb_username
            password=smb_password

            Где smb_username и smb_password ваши имя пользователя и пароль для доступа к шаре.

    2. Аватар kiberlis
      kiberlis автор

      Причина в правах непривилегированного контейнера: шара была смонтирована от root хоста, и Nextcloud (пользователь www-data) видит её как nobody без права записи. Я переписал статью: смонтируйте шару на хосте с опциями uid=100000,gid=110000,dir_mode=0770,file_mode=0770, создайте в контейнере группу lxc_shares с GID 10000, добавьте в неё www-data (usermod -aG lxc_shares www-data) и перезапустите контейнер — после этого запись заработает.

      Ответить
  3. Аватар Борис
    Борис

    Здравствуйте, а можно добавить скрин как должен выглядеть файл .smb?

    Ответить
    1. Аватар kiberlis
      kiberlis автор

      Спасибо за замечание — содержимое файла при переносе статьи потерялось. Исправил инструкцию: файл с паролем (теперь /root/.smbcredentials) содержит две строки — username=ваш_логин и password=ваш_пароль. После сохранения выполните chmod 600 /root/.smbcredentials.

      Ответить
  4. Аватар александр
    александр

    Вообще такие уроки записывают для новичков, но как обычно оно работает но не у всех. Это само бесячее в линукс системах.
    Ты идешь по уроку но потом просто ничего не работает и ты начинаешь курить новый мануал. есть ощущение, что этот конструктор всегда собирается по разному.

    Ответить
    1. Аватар Егор
      Егор

      Файл .smb должен содержать 2 строки следующего характера:
      username=smb_username
      password=smb_password

      Ответить
    2. Аватар kiberlis
      kiberlis автор

      Вы правы: в прошлой версии статьи потерялись содержимое файла с паролем и слэши в пути к шаре, поэтому инструкция работала не у всех. Я полностью её переписал, учёл права в непривилегированном контейнере и добавил раздел «Если не работает» с типичными ошибками и командами для диагностики. Если что-то не получится — напишите, какую ошибку выдаёт mount или что показывает ls -ln /mnt/lxc_shares/media, разберёмся.

      Ответить