Вопрос или проблема
Я совершенно новичок в этих средах, но пытаюсь учиться. Я установил Proxmox на один SSD, затем подключил один HDD (/dev/sdb) к системе для хранения медиафайлов. Основная идея заключалась в создании одного контейнера для приложения Plex и одного для приложения rtorrent. Я хотел бы разделить одно и то же пространство (диск) между этими контейнерами.
На хосте я смонтировал /dev/sdb1 в /mnt/mediastorage и создал пользователя под названием “mediastorage” (110:117) и предоставил доступ к этому пространству. Обоим контейнерам я добавил это (/mnt/mediastorage) в точку монтирования /mediastorage. Вот так:
mp0: /mnt/mediastorage/,mp=/mediastorage
После этого я попытался предоставить доступ к этим файлам пользователю plex (107:115) в контейнере “plex”:
lxc.idmap: u 0 100000 107
lxc.idmap: u 107 110 1
lxc.idmap: u 108 100125 64410
lxc.idmap: g 0 100000 115
lxc.idmap: g 115 117 1
lxc.idmap: g 116 100136 64399
На хосте я сделал это:
root@proxmox:~# cat /etc/subuid
root:100000:65536
root:110:1
root@proxmox:~# cat /etc/subgid
root:100000:65536
root:117:1
Позже я создал другой контейнер, где создал пользователя под названием rtorrent (107:115) и сделал ту же настройку, как в контейнере “plex”.
Был момент, когда все казалось в порядке, но после перезагрузки (хоста) произошли непонятные вещи, такие как это: предыдущая тема, где это началось
Замечено, что в контейнере “plex” появилась новая запись в файле /etc/passwd:
mediastorage:x:108:116:...etc
/etc/group:
mediastorage:x:116:
-их там не было раньше, и контейнер был в выключенном состоянии.
root@plex:/# ls -al /home
total 12
drwxr-xr-x 3 root root 4096 Jan 23 20:57 .
drwxr-xr-x 23 root root 4096 Jan 24 22:42 ..
drwxr-xr-x 2 nobody nogroup 4096 Jan 23 20:57 mediastorage
Может кто-нибудь объяснить, что здесь произошло, пожалуйста? Как я могу достичь своей основной идеи? (разделить хранилище между контейнерами) Возможно ли это таким образом?
РЕДАКЦИЯ 1: Переустановил контейнер, сначала смонтировал /mediastorage, затем установил Plex, затем добавил отображение UID в конфигурацию контейнера. (Где-то я читал, что, возможно, это сработает). Теперь хранилище работает, но служба Plex не может запуститься из-за проблем с разрешениями. С хоста — диск lxc контейнера смонтирован как /mnt/lxc102:
/mnt/lxc102/etc/passwd:
plex:x:107:115::/var/lib/plexmediaserver:/bin/bash
/mnt/lxc102/etc/group:
plex:x:115:
ls -al /mnt/lxc102:
drwxr-xr-x 2 100000 100000 4096 Jan 25 23:22 mediastorage
ls -al /mnt/lxc102/var/lib:
drwxr-xr-x 3 100107 100115 4096 Jan 25 23:25 plexmediaserver
В контейнере директория plexmediaserver снова показывается как nobody:nogroup.
Я столкнулся с той же проблемой и решил ее, добавив unprivileged: 0
в файл /etc/pve/lxc/???.conf
(где ??? – это ID вашего lxc контейнера).
Ответ или решение
Для решения проблемы с общим хранилищем и правами доступа в Proxmox LXC среде, важно сначала понять основные принципы работы с контейнерами LXC и правами доступа на сторонах хоста и контейнеров. В данном случае, вы хотите настроить доступ к одному и тому же дисковому пространству для нескольких контейнеров с различными приложениями, такими как Plex и rtorrent. Давайте разберем шаги, которые помогут решить вашу проблему.
Проблемы и причины
-
Проблемы с UID/GID: Контейнеры LXC используют пользователей на хосте (через подмену идентификаторов) для управления безопасностью и правами. Если индексы пользователей (UID) и групп (GID) на хосте и в контейнере не совпадают, это может привести к проблемам с правами доступа.
-
Проблемы с привилегиями: Установка неправильно сконфигурированных привилегий (например, unprivileged 0) может повлиять на монтирование файловой системы и доступ к ней.
-
Автогенерация пользователей: Появление непредвиденных пользователей может быть вызвано некорректной настройкой или конфигурацией маппинга пользователей, что может случиться из-за перезагрузок или изменения конфигураций.
Решение
С учетом приведенных проблем, рассмотрим, как можно решить задачу.
1. Конфигурация маппинга пользователей
Убедитесь, что на стороне хоста и контейнера настроен корректный маппинг пользователей. Пример конфигурации:
lxc.idmap: u 0 100000 107
lxc.idmap: u 107 110 1
lxc.idmap: u 108 100125 64410
lxc.idmap: g 0 100000 115
lxc.idmap: g 115 117 1
lxc.idmap: g 116 100136 64399
Это позволяет пользователям с ID 107 пользоваться директориями, монтированными в контейнере.
2. Редактирование конфигурации контейнера
Прежде всего, добавьте строку unprivileged: 0
в файл конфигурации контейнера /etc/pve/lxc/???.conf
. Это изменяет модель прав доступа, позволяя контейнеру работать с честными привилегиями, приближая работу контейнера к режиму реальных серверов.
3. Проверка прав доступа к диску
Проверьте права и принадлежность директорий, монтируемых в контейнер:
chown -R 110:117 /mnt/mediastorage
chmod -R 755 /mnt/mediastorage
Это гарантирует, что пользователь "mediastorage" имеет нужные права на директории и файлы.
4. Мониторинг и проверка логов
После внесения изменений перезагрузите контейнер и проверьте состояние служб Plex и других приложений. Используйте системные логи (journalctl
, syslog
) для отслеживания возникших проблем.
5. Тестирование и отладка
Регулярно проверяйте конфигурацию и поведение контейнеров после перезагрузок. Это помогает в выявлении причин, связанных с нестабильной конфигурацией.
Таким образом, тщательное планирование маппинга пользователей и правильная настройка прав на уровне хоста помогут обеспечить правильную работу контейнеров с общими ресурсами.