Модераторы, помогите пожалуйста исправить разметку, не срабатывает: [code][/code].
Даже не знаю о чем конкретно вопрос, но все по порядку… Я дитя Windows, с недавних пор осваивающий Proxmox и мир Linux. Организовал домашний сервер на базе Proxmox, создаю виртуальные машины по необходимости с различными сервисами и столкнулся со следующей проблемой. Я не знаю как правильно распределять ресурсы между виртуальными машинами.
Идея заключается в том, чтобы на виртуальных машинах с небольшими виртуальными же дисками в 32Гб были установлены такие сервера как: Seafile, Nextcloud, Filebrowser, различные медиасервера. Но данные хранились в едином пространстве на дисках TrueNAS. На одной из виртуальных машин крутится TrueNAS, которой отдан контроллер SATA, к нему подключены диски и объединены в raidz2. В будущем аналогично будет создана VM для видеосервера, хранящего видео с IP-камер. В этой парадигме клиентской программе не важно где хранятся ее данные. Немного смущает такая вещь как backup, ведь если его делать отдельно для данных и базы данных, они могут оказаться несогласованными. Но это уже совсем другая история. Зато, я могу перенести данные с одного Dataset на другой и расшарить NFS или Samba, ничего не меняя в программах, ведь точка монтирования останется без изменений.
Еще раз, для новой программы (сервиса) я создаю VM, в ней docker compose (можно и без докера). Создаю одного пользователя без прав sudo: immich, seafile, nextcloud и т.д. От админа монтирую NFS, устанавливаю необходимые библиотеки. Далее, файл compose.yaml редактирую уже от имени локального пользователя и от него же запускаю docker compose.
В VM монтирую NFS, а в контейнерах встраиваю сетевой диск средствами Proxmox, что наверное почти тоже самое. С некоторыми программами это прекрасно работает, с теми, что не создают файлы от root. Но тут пошла череда программ, Nextcloud, Seafile и др., где все работает иначе. Программы создают рутовые файлы и вся идеология рушится. Подозреваю, что корень кроется в непонимании идеологии Linux, организации прав и особенностях монтирования файловой системы NFS.
Вот пример структуры файлов программы Immich: [code]immich@immich:~/Immich-app/library$ ls -al итого 100 drwxrwxrwx 8 3003 3003 8 янв 19 02:58 ./ drwxr-xr-x 4 immich immich 4096 янв 18 21:36 ../ drwxrwxrwx 2 immich immich 17 апр 21 02:00 backups/ drwxrwxrwx 4 immich immich 5 мар 16 13:49 encoded-video/ drwxrwxrwx 2 immich immich 3 янв 19 17:23 library/ drwxrwxrwx 2 immich immich 3 янв 19 17:23 profile/ drwxrwxrwx 6 immich immich 7 мар 16 13:49 thumbs/ drwxrwxrwx 6 immich immich 7 мар 16 13:49 upload/[/code]
Тут каталог ~/Immich-app/library смонтировался с каким-то непонятным uid=guid=3003, но это не мешает программе работать. Все файлы создаются от имени пользователя. Возможно, это происходит потому, что программа установлена в домашнем директории. Другие же программы, такие как seafile, nextcloud, и пр. я начал устанавливать в каталог /opt, но от имени владельца в виде одноименного с программой пользователя, т.е. по сути тоже самое. Просто в некоторых статьях пишут, что монтирование с домашний каталог имеет какие-то нюансы, и я решил изменить путь установки.
В случае VM с Seafile структура системы в целом, выглядит следующим образом:
- Proxmox
- VM «TrueNAS»
- NFS: /mnt/fastData/SeaFile_storage/data
- /etc/exports:
[code]«/mnt/fastData/SeaFile_storage/data»
*(sec=sys,rw,no_subtree_check,no_all_squash,no_root_squash,anonuid=0,anongid=0)[/code]
- VM «Seafile» (seafile in docker compose)
- /etc/fstab [code]192.168.8.100:/mnt/fastData/SeaFile_storage/data /mnt/seafile_data nfs defaults 0 0[/code]
- VM «TrueNAS»
Пробовал монтировать NFS в папку установки, указывать в compose.yaml путь хранения файлов в /mnt/… Сейчас остановился на варианте монтирования NFS в /mnt/…, а уже в папке программы вместо папки с данными создавать символическую ссылку на смонтированную.
Заметил, что до монтирования я могу папке /mnt/seafile_data на клиенте задать любые свойства (владелец, права доступа), после монтирования владелец устанавливается по непонятным мне правилам и изменить его не может даже root. Также, я не могу изменить на клиенте и права доступа к вложенным файлам и папкам. Например, на виртуальной машине Seafile в папке mnt: [code]vadmin@seafile:~$ ls -al /mnt итого 13 drwxr-xr-x 4 root root 4096 мар 30 21:15 ./ drwxr-xr-x 19 root root 4096 янв 18 02:26 ../ drwxrwxrwx 2 3010 3010 2 апр 20 15:10 seafile_data/[/code]
Пользователя и группы с такими ID нет ни на сервере, ни на клиенте.
При манипулировании опциями монтирования на клиенте в файле /etc/fstab (uid,guid), папка перестает монтироваться. При изменении опций на стороне truenas в файле: /etc/exports что-то меняется, но полностью не решает проблему:
[code]«/mnt/fastData/SeaFile_storage/data»
*(sec=sys,rw,no_subtree_check,anonuid=3010,anongid=3010)[/code]
Это привело лишь к тому, что папка смонтировалась от рута, а внутри все файлы: nobody:nogroup и изменить это не получается.
Как я понял, и на клиенте и на сервере работают только uid и gid, с сервера на клиентскую машину NFS передается только uid и gid. При создании файла с некими параметрами на клиенте, этот файл с этими же идентификаторами и правами создается на сервере. И если номера сильно не совпадают и иногда пересекаются, возникают разные нежелательные ситуации. Например, при создании на клиенте файла с uid=0 и gid=0, на сервере тоже будет файл с рутовыми правами. Но ведь можно же сделать транслируемый сетевой путь как «корень» и тогда даже с рутовыми правами подняться выше этого пути не выйдет. В моем случае папка: /mnt/fastData/SeaFile_storage/data на сервере станет корнем для клиента. На данном этапе, я согласен, чтобы на клиенте создавались файлы root:root и с теми же uid:gid на сервере truenas, хрен с ней, с безопасностью. Но добиться этого у меня не получается.
В статье «Setup Seafile cluster with NFS» (https://manual.seafile.com/11.0/deploy_pro/setup_seafile_clu…) сказано, что всего-то надо переместить файлы на новое место и создать символические ссылки. Но я не могу этого сделать. Проблема в том, что при переносе файлов seafile_data, которые имеют права root:root в папке /mnt/seafile_data они становятся nobody:nogroup и копирование прекращается, т.к. нет прав. Изменить права или владельцев файлов внутри /mnt/seafile_data я не могу. Даже из под рута, я не могу в этой папке создать файл с рутовыми правами. Они пишут, что нюансы монтирования выходят за рамки данной статьи. Но в том то и дело, что это оказалось основным камнем преткновения.