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
, где в списке должно быть только одно значение.size
size
указывает размер файловой системы. Формат этого значения предназначен для удобства восприятия человеком, например: "10g", "50 GiB". Размеры LVM объемов можно указывать как процент от размера пула/VG, например: "50%" с версии v1.4.2.При использовании
compression
илиdeduplication
,size
может быть установлен выше фактического доступного места, например: в 3 раза больше размера объема, основываясь на дублируемости и/или сжимаемости хранимых данных.ПРИМЕЧАНИЕ: Запрашиваемый размер объема может быть уменьшен по мере необходимости, чтобы объем мог поместиться в доступном пространстве пула, но только если требуемое уменьшение не превышает 2% от запрашиваемого размера объема.
fs_type
Это указывает желаемый тип файловой системы для использования, например: "xfs", "ext4", "swap". Значение по умолчанию определяется в зависимости от ОС и версии (в данный момент
xfs
для всех поддерживаемых систем). Используйте "unformatted", если вы не хотите, чтобы файловая система присутствовала. ПРЕДУПРЕЖДЕНИЕ: Использование типа файловой системы "unformatted" на существующей файловой системе является разрушительной операцией и уничтожит все данные на объеме.fs_label
fs_label
это строка для использования в качестве метки файловой системы.fs_create_options
fs_create_options
указывает кастомные аргументы дляmkfs
в виде строки.mount_point
mount_point
указывает директорию, на которой будет смонтирована файловая система.mount_options
mount_options
указывает кастомные параметры монтирования в виде строки, например: 'ro'.mount_user
mount_user
указывает желаемого владельца директории монтирования.mount_group
mount_group
указывает желаемую группу директории монтирования.mount_mode
mount_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