LVM два пути /var/{lib,log}/foo разделяют один логический том

Вопрос или проблема

У меня есть приложение foo, которое использует два пути в системе, которые могут привести к диск полон:

/var/lib/foo
/var/log/foo

Я хочу, чтобы эти два пути использовали один логический LVM, чтобы когда приложение заполнило диск, мне нужно было увеличить только одно логическое пространство.

Это можно сделать с помощью bind в /etc/fstab, но мне не нравится эта идея.

Это также можно сделать с помощью символьных ссылок, но это тоже немного запутанно:

/app/foo # Точка монтирования LVM для foo
/var/lib/foo -> /app/foo/lib
/var/log/foo -> /app/foo/log

Есть ли более лучший вариант, чем символьные ссылки?

Возможно настроить foo, чтобы оно использовало другие пути для lib и log, но я предпочитаю конфигурацию по умолчанию (OCD).

Представьте, что на сервере есть другие приложения, такие как /var/{lib,log}/bar, и если они заполнят диск, это повлияет только на приложение bar.

Я хочу, чтобы эти два пути использовали один логический LVM, чтобы когда приложение заполнило диск, мне нужно было увеличить только одно логическое пространство.

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

Учитывая это, bind монтирование, которое прикрепляет подкаталоги одной и той же файловой системы к обоим местам, как раз то, как вы обычно этого добиваетесь. Монтирования bind не являются “прокси” монтированиями; они заставляют ядро напрямую прикрепить одну и ту же смонтированную файловую систему к дополнительным путям; т.е. одно монтирование (суперблок) становится известным под несколькими именами (ближе к жестким ссылкам, чем символьным, даже если это и не хорошая аналогия), так что в целом это именно то, что вы спрашиваете.

Другой вариант — использовать файловую систему, которая имеет встроенную поддержку наборов данных или подсистем, такую как ZFS или Btrfs. (С Btrfs подсистемы ведут себя как каталоги изначально, но могут также быть напрямую смонтированы из fstab.) Обе из них также имеют свое собственное управление объемами, так что LVM становится полностью избыточным.

Если все файлы, создаваемые приложением в обоих путях, принадлежат одному и тому же пользователю или группе, вы можете использовать квоты, чтобы ограничить использование диска по обоим путям, не прибегая к использованию другого объема.

Включение квот зависит от используемой файловой системы. Обычно это будет связано с опцией файловой системы (например, с quota, функциональностью файловой системы в Ext4) и/или опциями монтирования. См. страницу руководства вашей файловой системы для получения подробной информации.

Как только квоты включены, вы можете настроить их с помощью edquota (часть инструментов квот, обычно в пакете quota) и просмотреть их с помощью quota. В некоторых случаях вам следует использовать специализированный инструмент для файловой системы, например, xfs_quota на XFS.

Ответ или решение

Для решения задачи с использованием одного логического тома LVM для двух путей /var/lib/foo и /var/log/foo, подходящим решением будет создание одной файловой системы на логическом томе, которая затем будет смонтирована в нужные директории.

Шаги для реализации:

  1. Создание логического тома:
    Начнем с создания логического тома в LVM. Предположим, что у вас уже есть активная Volume Group (VG), на которой вы можете создать логический том. Для этого воспользуйтесь следующими командами:

    lvcreate -n foo_lv -L 10G имя_вашей_volume_group

    Здесь foo_lv – имя вашего логического тома, а 10G – его размер (вы можете указать нужный вам размер).

  2. Форматирование тома:
    После создания логического тома необходимо отформатировать его в файловую систему. Обычно используют ext4:

    mkfs.ext4 /dev/имя_вашей_volume_group/foo_lv
  3. Создание точек монтирования:
    В этом шаге создайте директории, которые будут использоваться для монтирования:

    mkdir -p /mnt/foo
  4. Монтирование логического тома:
    Теперь нужно смонтировать созданный логический том в созданную вами директорию:

    mount /dev/имя_вашей_volume_group/foo_lv /mnt/foo
  5. Создание поддиректорий:
    Далее создаем необходимые поддиректории для приложения:

    mkdir /mnt/foo/lib
    mkdir /mnt/foo/log
  6. Использование bind mount:
    Чтобы ваши оригинальные директории /var/lib/foo и /var/log/foo использовали единую файловую систему, не прибегая к символьным ссылкам или дополнительным перенастройкам приложения, можно использовать bind mount. Добавьте следующее в ваш /etc/fstab:

    /mnt/foo/lib /var/lib/foo none bind
    /mnt/foo/log /var/log/foo none bind

    После этого примонтируйте все системы:

    mount --bind /mnt/foo/lib /var/lib/foo
    mount --bind /mnt/foo/log /var/log/foo

    Или просто выполните:

    mount -a
  7. Настройка автоматического монтирования:
    Чтобы изменения применялись автоматически после перезагрузки системы, убедитесь, что указанные строки добавлены в файл /etc/fstab. Это позволит системе автоматически прикреплять поддиректории при запуске.

Дополнительные возможности:

Если вы предпочитаете управлять объемом более универсальным образом, можно рассмотреть файловые системы, такие как ZFS или Btrfs, которые изначально поддерживают создание подтомов (subvolumes). Это позволит вам избежать необходимости использования LVM и bind mounds. Однако, при этом вы должны будете учитывать дополнительные требования и специфику работы этих файловых систем.

Использование квот:

Если вы хотите контролировать место на диске, которое используют оба приложения (/var/lib/foo и /var/log/foo), вы также можете включить квоты. Квоты позволяют ограничить использование дискового пространства для пользователей или групп, что может быть полезным в сценариях, где несколько приложений работают на одном сервере.

Для включения квот на файловой системе (например, ext4) вам необходимо будет добавить специальные параметры в ваш /etc/fstab и использовать команды edquota и quota для конфигурации квот.

Заключение:

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

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

Капча загружается...