linux-system-roles.storage
Роль хранения в Linux
Эта роль позволяет пользователям настраивать локальное хранилище с минимальным вводом данных.
На данный момент роль поддерживает управление файловыми системами и точками монтирования на:
- дисках
- группах объемов LVM
- пулах Stratis
Также поддерживается шифрование (с использованием LUKS) и RAID (с использованием MD). Поддержка управления существующими устройствами ограничена, но новые объемы LVM и файловые системы Stratis могут быть добавлены в существующие настройки и точки монтирования, а некоторые другие функции могут быть добавлены в (или удалены из) существующих устройствах.
Требования
Смотрите ниже
Требования по коллекции
Роль требует внешние коллекции. Используйте следующую команду для их установки:
ansible-galaxy collection install -vv -r meta/collection-requirements.yml
Переменные роли
ПРИМЕЧАНИЕ: Начиная с версии 1.3.0, неуказанные параметры интерпретируются по-разному для существующих и несуществующих пулов/объемов. Для новых/несуществующих пулов и объемов любые пропущенные параметры будут использовать значение по умолчанию, как описано в defaults/main.yml. Для существующих пулов и объемов пропущенные параметры унаследуют уже имеющиеся настройки. Это означает, что для изменения/замены значений по умолчанию роли в существующем пуле или объеме вы должны явно указать новые значения/настройки в переменных роли.
storage_pools
Переменная storage_pools представляет собой список пулов для управления. Каждый пул содержит вложенный список словарей volume, как описано ниже, а также следующие ключи:
nameЭто указывает имя пула для управления/создания в виде строки. (Пример пула - группа объемов LVM.)
typeЭто указывает тип пула для управления. Доступные значения для
type:lvm,stratis.stateДоступные значения:
present(поведение по умолчанию) илиabsent. Пулы, помеченные какabsent, будут удалены ролью. Пулы, помеченные какpresent, будут либо созданы (если пул с указаннымnameеще не существует), либо сохранены.grow_to_fillПри установленном значении физические объёмы пула будут изменены для соответствия размерам их устройств. (например, после увеличения размера диска виртуальной машины)
По умолчанию:
falseПРИМЕЧАНИЕ: Этот аргумент применим только для LVM пулов.
sharedЕсли установлено в
true, роль создаёт или управляет общим объемом. Требуется настройка и запуск служб lvmlockd и dlm.По умолчанию:
falseПРЕДУПРЕЖДЕНИЕ: Изменение значения
sharedдля существующего пула является разрушительной операцией. Сам пул будет удалён в рамках этого процесса.ПРИМЕЧАНИЕ: Этот аргумент применим только для LVM пулов.
disksСписок, который определяет набор дисков, используемых в качестве дискового пространства для пула. Поддерживаются идентификаторы: узел устройства (например,
/dev/sdaили/dev/mapper/mpathb), базовое имя узла устройства (например,sdaилиmpathb), символическая ссылка /dev/disk (например,/dev/disk/by-id/wwn-0x5000c5005bc37f3f).Для LVM пулов это также может быть использовано для добавления и удаления дисков в/из существующего пула. Диски в списке, которые не используются пулом, будут добавлены в пул. Диски, которые в данный момент используются пулом, но отсутствуют в списке, будут удалены из пула только если
storage_safe_modeустановлен вfalse.raid_levelПри использовании с
type: lvmуправляет группой объемов с массивом mdraid заданного уровня на ней. Входныеdisksв данном случае используются в качестве участников RAID. Принятые значения:linear,raid0,raid1,raid4,raid5,raid6,raid10.volumesЭто список объемов, принадлежащих текущему пулу. Он следует тому же шаблону, что и переменная
storage_volumes, описанная ниже.encryptionЭто указывает, будет ли пул зашифрован с использованием LUKS.
ПРЕДУПРЕЖДЕНИЕ: Переключение шифрования для пула является разрушительной операцией, то есть пул будет удалён в рамках процесса добавления/удаления уровня шифрования.encryption_passwordЭта строка указывает пароль или фразу для разблокировки/открытия объемов LUKS.
encryption_keyЭта строка указывает полный путь к ключевому файлу на управляемых узлах, используемому для разблокировки объемов LUKS. Пользователь этой роли должен надежно скопировать этот файл на управляемые узлы или убедиться, что файл находится на управляемых узлах.
encryption_cipherЭта строка указывает не стандартный шифр, который будет использоваться LUKS.
encryption_key_sizeЭтот целое число указывает размер ключа LUKS (в байтах).
encryption_luks_versionЭтот целое число указывает версию LUKS для использования.
encryption_clevis_pinДля пулов Stratis метод clevis, который должен быть использован для шифрования созданного пула. Принятые значения:
tangиtpm2.encryption_tang_urlПри создании пула Stratis, зашифрованного через NBDE, указывает URL сервера.
encryption_tang_thumbprintПри создании пула Stratis, зашифрованного через NBDE, указывает отпечаток сервера.
storage_volumes
Переменная storage_volumes представляет собой список объемов для управления. Каждый объем имеет следующие переменные:
nameЭто указывает имя объема.
typeЭто указывает тип объема, на котором будет располагаться файловая система. Действительные значения для
type:lvm,disk,partitionилиraid. Значение по умолчанию определяется в зависимости от ОС и версии (в данный моментlvm).ПРИМЕЧАНИЕ: Поддержка управления объемами разделов в настоящее время очень ограничена, роль позволяет создавать только один раздел, охватывающий весь диск.
stateДоступные значения:
present(поведение по умолчанию) илиabsent. Объемы, помеченные какabsent, будут удалены ролью. Объемы, помеченные какpresent, будут либо созданы (если объем с указаннымnameне существует), либо сохранены и, возможно, изменены, чтобы соответствовать другим значениям (например, если объем с указаннымnameсуществует, но не имеет требуемогоsize, он будет изменён по размеру, если это возможно).disksЭто указывает набор дисков, которые будут использоваться для обеспечения файловой системы. Это в настоящее время актуально только для объемов типа
disk, где в списке должно быть только одно значение.sizesizeуказывает размер файловой системы. Формат этого значения предназначен для удобства восприятия человеком, например: "10g", "50 GiB". Размеры LVM объемов можно указывать как процент от размера пула/VG, например: "50%" с версии v1.4.2.При использовании
compressionилиdeduplication,sizeможет быть установлен выше фактического доступного места, например: в 3 раза больше размера объема, основываясь на дублируемости и/или сжимаемости хранимых данных.ПРИМЕЧАНИЕ: Запрашиваемый размер объема может быть уменьшен по мере необходимости, чтобы объем мог поместиться в доступном пространстве пула, но только если требуемое уменьшение не превышает 2% от запрашиваемого размера объема.
fs_typeЭто указывает желаемый тип файловой системы для использования, например: "xfs", "ext4", "swap". Значение по умолчанию определяется в зависимости от ОС и версии (в данный момент
xfsдля всех поддерживаемых систем). Используйте "unformatted", если вы не хотите, чтобы файловая система присутствовала. ПРЕДУПРЕЖДЕНИЕ: Использование типа файловой системы "unformatted" на существующей файловой системе является разрушительной операцией и уничтожит все данные на объеме.fs_labelfs_labelэто строка для использования в качестве метки файловой системы.fs_create_optionsfs_create_optionsуказывает кастомные аргументы дляmkfsв виде строки.mount_pointmount_pointуказывает директорию, на которой будет смонтирована файловая система.mount_optionsmount_optionsуказывает кастомные параметры монтирования в виде строки, например: 'ro'.mount_usermount_userуказывает желаемого владельца директории монтирования.mount_groupmount_groupуказывает желаемую группу директории монтирования.mount_modemount_modeуказывает желаемые права доступа для директории монтирования.raid_levelУказывает уровень RAID. LVM RAID также может быть создан. "Обычный" объем RAID требует, чтобы тип был
raid. LVM RAID требует, чтобы объем имел родительstorage_poolsс типомlvm, также необходимо указатьraid_disks. Принятые значения:- для LVM RAID объема:
raid0,raid1,raid4,raid5,raid6,raid10,striped,mirror - для RAID объема:
linear,raid0,raid1,raid4,raid5,raid6,raid10
ПРЕДУПРЕЖДЕНИЕ: Изменение
raid_levelдля объема является разрушительной операцией, то есть все данные на этом объеме будут потеряны в процессе удаления старого и добавления нового RAID. Переформирование RAID в настоящее время не поддерживается.- для LVM RAID объема:
raid_device_countКогда тип равен
raid, указывает количество активных RAID устройств.raid_spare_countКогда тип равен
raid, указывает количество резервных RAID устройств.raid_metadata_versionКогда тип равен
raid, указывает версию метаданных RAID в виде строки, например: '1.0'.raid_chunk_sizeКогда тип равен
raid, указывает размер блока RAID в виде строки, например: '512 KiB'. Размер блока должен быть кратен 4 KiB.raid_stripe_sizeКогда тип равен
lvm, указывает размер полосы LVM RAID в виде строки, например: '512 KiB'.raid_disksУказывает, какие диски должны быть использованы для объема LVM RAID. необходимо указать
raid_level, и объем должен иметь родительstorage_poolsс типомlvm. Принимает подсписокdisksродительскогоstorage_pools. В случае нескольких LVM RAID объемов в одном и том же пуле хранилища, один и тот же диск может использоваться в несколькихraid_disks.encryptionЭто указывает, будет ли объем зашифрован с использованием LUKS.
ПРЕДУПРЕЖДЕНИЕ: Переключение шифрования для объема является разрушительной операцией, то есть все данные на этом объеме будут удалены в рамках процесса добавления/удаления уровня шифрования.encryption_passwordЭта строка указывает пароль или фразу для разблокировки/открытия объемов LUKS.
encryption_keyЭта строка указывает полный путь к ключевому файлу на управляемых узлах, используемому для разблокировки объемов LUKS. Пользователь этой роли должен надежно скопировать этот файл на управляемые узлы или убедиться, что файл находится на управляемых узлах.
encryption_cipherЭта строка указывает не стандартный шифр, который будет использоваться LUKS.
encryption_key_sizeЭтот целое число указывает размер ключа LUKS (в битах).
encryption_luks_versionЭтот целое число указывает версию LUKS для использования.
deduplicationЭто указывает, будет ли использоваться Оптимизатор Виртуальных Данных (VDO). При установленном значении дублированные данные, хранящиеся на объемах, будут дедуплицированы, что приведет к увеличению места на диске. Может использоваться вместе с
compressionиvdo_pool_size. Объем должен быть частью LVMstorage_pool. Не более одного VDOstorage_volumeнаstorage_pool. Основной объем должен иметь объем не менее 9 ГБ (минимум около 5 GiB).compressionЭто указывает, будет ли использоваться Оптимизатор Виртуальных Данных (VDO). При установленном значении данные, сохраняемые на объемах, будут сжаты, что приведет к увеличению места на диске. Объем должен быть частью LVM
storage_pool. Может использоваться вместе сdeduplicationиvdo_pool_size. Не более одного VDOstorage_volumeнаstorage_pool.vdo_pool_sizeКогда используется Оптимизатор Виртуальных Данных (VDO), это указывает фактический размер, который объем займет на устройстве. Виртуальный размер VDO объема устанавливается параметром
size. Форматvdo_pool_sizeпредназначен для удобства восприятия человеком, например: "30g", "50GiB". Значение по умолчанию равно размеру объема.cachedЭто указывает, должен ли объем быть кэшируемым или нет. В настоящее время это поддерживается только для объемов LVM, где используется dm-cache.
cache_sizeРазмер кэша. Формат
cache_sizeпредназначен для удобства восприятия человеком, например: "30g", "50GiB".cache_modeРежим для кэша. Поддерживаемые значения включают
writethrough(по умолчанию) иwriteback.cache_devicesСписок устройств, которые будут использоваться для кэша. Это должны быть либо физические объемы, либо диски, на которых выделены эти физические объемы. Обычно вам следует выбирать быстрые устройства, такие как SSD или NVMe диски для кэша.
thinУказывает, должен ли объем быть тонко выделенным или нет. Это поддерживается только для объемов LVM.
thin_pool_nameДля
thinобъемов это можно использовать для указания имени пула LVM thin, который будет использоваться для объема. Если пул с указанным именем уже существует, объем будет добавлен в этот пул. Если он не существует, будет создан новый пул с именемthin_pool_name. Если не указано:- если существующих тонких пулов нет, будет создан новый тонкий пул с автоматически сгенерированным именем,
- если существует ровно один существующий тонкий пул, тонкий объем будет добавлен в него, и
- если существует несколько тонких пулов, будет вызвано исключение.
thin_pool_sizeРазмер для тонкого пула. Формат
thin_pool_sizeпредназначен для удобства восприятия человеком, например: "30g", "50GiB".
storage_safe_mode
Когда значение истинно (по умолчанию), возникнет ошибка вместо автоматического удаления существующих устройств и/или форматирования.
storage_udevadm_trigger
Когда значение истинно (по умолчанию является ложным), роль будет использовать udevadm trigger для немедленного применения изменений udev. Это может помочь на некоторых платформах с "ошибочным" udev.
Пример playbook
- name: Управление хранилищем
hosts: все
roles:
- name: linux-system-roles.storage
storage_pools:
- name: app
disks:
- sdb
- sdc
volumes:
- name: shared
size: "100 GiB"
mount_point: "/mnt/app/shared"
#fs_type: xfs
state: present
- name: users
size: "400g"
fs_type: ext4
mount_point: "/mnt/app/users"
storage_volumes:
- name: images
type: диск
disks: ["mpathc"]
mount_point: /opt/images
fs_label: images
rpm-ostree
Смотрите README-ostree.md
Лицензия
MIT
Configure volumes and filesystems
ansible-galaxy install linux-system-roles.storage