LINUX.ORG.RU
ФорумAdmin

Какова идеология распределения ресурсов в Linux (в VM, LXC)?

 , , ,


0

2

Модераторы, помогите пожалуйста исправить разметку, не срабатывает: [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]

Пробовал монтировать 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 я не могу. Даже из под рута, я не могу в этой папке создать файл с рутовыми правами. Они пишут, что нюансы монтирования выходят за рамки данной статьи. Но в том то и дело, что это оказалось основным камнем преткновения.



Последнее исправление: Vadim_nsk (всего исправлений: 1)

Highlights in Proxmox VE 8.4: Virtiofs directory passthrough: Version 8.4 offers the functionality to share files and directories directly between a host and the VMs running on that host. This is achieved through the use of virtiofs, which allows VM guests to access host files and directories without the overhead of a network file system. Modern Linux guests support virtiofs out of the box while Windows guests need additional software to use this feature.

anonymous
()

Причем тут распределение (разделение) ресурсов?
Под распределением ресурсов обычно понимают лимиты на disk io, cpu, memory.

У тебя вопрос по сути про настройку NFS сервера и клиента.
См. значения опций no_root_squash, anonuid/anongid и пр. в man exports

MirandaUser2
()