Ограничения VDO / Virtual Disk Optimizer в стеке хранилища

Что ж, RHEL 7.5 выпущен с важным дополнением VDO, которое в основном добавляет сжатые и дедуплицированные тома с тонким выделением ресурсов, что здорово, и мы получим эти преимущества с производными и другими дистрибутивами также, поскольку технология была приобретена у Permabit и является открытым исходным кодом.

Согласно официальным документам ( https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/storage_administration_guide/vdo- qs-requirements ) следует учесть некоторые соображения (раздел документа «Размещение VDO в стеке хранилища»):

Как правило общее , вы должны размещать определенные слои хранения под VDO и другие поверх VDO:

  • В VDO: DM-Multipath, DM-Crypt и программный RAID (LVM или mdraid).
  • Вверху VDO: кэш LVM, логические тома LVM, снимки LVM и LVM Thin Provisioning.

Ну, потому что это «общее» правило - я не вижу в этом проблем, и все в порядке. Далее мы видим следующее:

Следующие конфигурации не поддерживаются:

  • VDO поверх томов VDO: хранилище → VDO → LVM → VDO
  • VDO поверх снимков LVM
  • VDO поверх LVM Cache
  • VDO поверх устройства обратной связи
  • VDO поверх LVM Thin Provisioning
  • Зашифрованные тома поверх VDO: хранилище → VDO → DM-Crypt
  • Разделы на томе VDO: fdisk, parted, и аналогичные разделы
  • RAID (LVM, MD или любого другого типа) поверх тома VDO

Это своего рода «пугает», и мы должны тщательно продумывать дизайн, 04 LTS Server с использованием BTRFS и получил следующую настройку согласно / etc / fstab :

# <file system> <mount point>   <type>  <options>  <dump>  <pass>
# / was on /dev/sda1 during installation
UUID=0841ef72-e9d4-45ca-af22-a403783859c6 /        btrfs   noatime,nodiratime,subvol=@ 0     1

# /home was on /dev/sda1 during installation
UUID=0841ef72-e9d4-45ca-af22-a403783859c6 /home    btrfs   noatime,nodiratime,subvol=@home 0 2

Это в значительной степени имеет смысл для меня, но привело к проблемам с моей установкой systemd. Я храню программное обеспечение для разных клиентов в / home , и некоторые из них предоставляют демонов, которые должны запускаться автоматически во время загрузки системы с помощью systemd. Примерно так:

/home/customer/someDaemon/cust_some_daemon.service

Это можно легко развернуть в systemd с помощью systemctl enable ... с абсолютным путем выше. Мне не нужно вручную копировать или связывать вещи, systemd все обрабатывает, systemctl enable ... просто завершается успешно, и ссылки создаются должным образом.

Что не работает, так это запуск этих служб во время загрузки, systemd дает сбой для всех этих служб с сообщением, что он больше не может найти связанные файлы. Если я не использую / home , но сохраняю эти файлы в / напрямую или удаляю @home , чтобы больше не быть дополнительным подтомом, все работает, как ожидалось.

В документах для enable есть следующее предложение:

Файловая система, в которой расположены связанные файлы модулей, должна быть доступна при запуске systemd (например, все, что находится под / home или / var недопустимы, , если только эти каталоги не расположены в корневой файловой системе ).

Мне не ясно, в чем именно заключается ограничение в данном случае: использование отдельного лица сам подтом или это потому, что его нужно было дополнительно смонтировать? / необходимо смонтировать, и они тоже являются субтомом, но, очевидно, поддерживаются. Особенно из-за динамического характера BTRFS и ZFS в отношении подтомов, я ожидал, что systemd по крайней мере поддерживает несколько подтомов в некоторой общей корневой файловой системе или пуле. Но он либо не работает, либо не может справиться с дополнительной точкой монтирования.

Так в чем именно заключается проблема? Спасибо!

0
задан 1 May 2018 в 17:54
3 ответа

Правильный ответ на мой вопрос: / home монтируется systemd после того, как он начал работать, и поэтому он не может разрешить ссылки на / home во время запуска самого systemd. Цель этих ссылок станет доступной только позже. OTOH / монтируется initrd, systemd обнаруживает, что он уже полностью доступен и работает при запуске.Это не имеет ничего общего с BTRFS или субтомами, только с тем, что монтируется и когда кем.

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

0
ответ дан 4 December 2019 в 15:58

В файле модуля укажите, что у вас есть зависимость от точек монтирования, отличных от корневой файловой системы, и systemd будет ждать с запуском ваших служб, пока они не будут смонтированы:

Рассмотрим, например:

  • RequiresMountsFor = Получает список абсолютных путей, разделенных пробелами. Автоматически добавляет зависимости типа Requires = и After = для всех монтируемых модулей, необходимых для доступа по указанному пути.

Или добавьте зависимость от local-fs.target , который отвечает за монтирование всех локальных файловых систем из / etc / fstab с меткой auto , например:

  • Requires = local-fs.target
  • After = local-fs.target
0
ответ дан 4 December 2019 в 15:58
  1. Создайте службу в корневом томе, для которой требуется смонтированный домашний том с помощью RequiresMountsFor = , а затем запустите свои службы;
  2. Сделайте службу пользователем службой, которая начнется при входе пользователя в систему. Подробнее об этом.
1
ответ дан 4 December 2019 в 15:58

Теги

Похожие вопросы