Ansible – это простой и удобный инструмент автоматизации, который предлагает различные модули для работы с управлением дисками в Linux. Когда вам нужно установить и настроить операционную систему на нескольких машинах с одинаковой конфигурацией, ansible будет очень полезен. В качестве примера я могу привести случай, когда вы создаете кластер, где все серверы имеют одинаковое пространство для хранения данных и нуждаются в одинаковой схеме разделов LVM. Подробнее про установку Ansible писали в этом руководстве.
Создание логического тома вручную включает 4 шага.
- ШАГ 1: Инициализация диска в качестве физического тома.
- ШАГ 2: Создание группы томов для физического тома.
- ШАГ 3: Создание логического тома из группы томов.
- ШАГ 4: Форматирование логического тома и монтирование файловой системы.
Чтобы узнать, как выполнить эти 4 шага вручную, посмотрите нашу статью Руководство по LVM в Linux для начинающих.
Сбор информации о хранилище из Ansible
В качестве первого шага вам нужно собрать информацию о диске для целевого узла. Это полезно, когда вы хотите динамически решать вопрос о распределении пространства.
Вы можете сделать это вручную или использовать механизм ansible facts, который собирает информацию о дисках. Приведенный ниже плейбук получит информацию о дисках целевого хоста.
---
- name: LVM Setup
hosts: localhost
connection: local
gather_facts: true
tasks:
- name: Collect stats for hardware
ansible.builtin.setup:
gather_subset:
- hardware
- name: Print the stat output for devices
ansible.builtin.debug:
var: hostvars[inventory_hostname].ansible_devices
Приведенный выше плейбук сначала соберет информацию об оборудовании с помощью модуля setup. Во второй задаче будет напечатан вывод только ansible_devices.

В дальнейшем вы можете применять всевозможные фильтры в соответствии с вашими требованиями для получения конкретных данных и вычисления динамических значений для создания новых разделов. Например, приведенная ниже задача выведет все устройства, начинающиеся с sd и их размер.
- name: Print the disk size only for sd disks
ansible.builtin.debug:
msg: "{{ ansible_devices[item].size }}"
loop: "{{ ansible_devices.keys() | map('regex_search', 'sd.*') | select('string') | list }}"
Поскольку у меня только один диск, она выведет размер диска sda.
TASK [Print the disk size only for sd disks] **********************************************
ok: [localhost] => (item=sda) => {
"msg": "931.51 GB"
}
Ansible Playbook для создания LVM
Я буду использовать следующий playbook для демонстрации. Вы можете повторить тот же код, изменив имя диска и размер раздела в соответствии с вашими требованиями.
---
- name: LVM Testing
hosts: localhost
become: true
gather_facts: False
tasks:
- name: Partition /dev/sdd disk
community.general.parted:
device: /dev/sdd
number: 1
flags: [ lvm ]
state: present
part_end: 5GiB
- name: Task for PV and VG
community.general.lvg:
vg: ostechnixlab
pvs: /dev/sdd1
- name: Logical volume with 1GB size
community.general.lvol:
vg: ostechnixlab
lv: labpart1
size: 1G
- name: Format the volume with ext4 fs
community.general.filesystem:
fstype: ext4
dev: /dev/ostechnixlab/labpart1
- name: Target directory under /opt/
ansible.builtin.file:
path: /opt/lvm_test/
state: directory
mode: '0755'
- name: mount the lv on /data1
ansible.posix.mount:
path: /opt/lvm_test/
src: /dev/ostechnixlab/labpart1
fstype: ext4
state: mounted
Создание тома с помощью модуля Parted
В качестве первого шага вы должны создать том из необработанного диска с lvm в качестве типа. Вы можете использовать весь диск или дополнительно разбить его на разделы и использовать только этот конкретный раздел для LVM.
Ansible использует модуль parted для создания разделов. Это похоже на команду parted в Linux, которая используется для настройки разделов устройства.
Важно: parted в модуле сообщества, который поставляется с пространством имен community.general. Если у вас не установлены модули сообщества, установите их с помощью следующей команды.
ansible-galaxy collection install community.general
У меня есть диск /dev/sdd размером 15GB.
lsblk /dev/sdd NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sdd 8:48 0 15G 0 disk
Я создам раздел /dev/sdd1 размером 5GB. Следующая задача использует модуль parted для создания раздела /dev/sdd1 размером 5GB с lvm в качестве типа.
- device: Введите имя блочного устройства, например /dev/sda, /dev/sdb и т.д.
- number: Количество разделов, которые будут созданы. Здесь оно задано как 1.
- flags: Задает тип раздела. В данном случае это LVM.
- state: Установка состояния в «present» создаст раздел.
- part_end: Размер для раздела.
- name: Partition /dev/sdd disk community.builtin.parted: device: /dev/sdd number: 1 flags: [lvm] state: present part_end: 5GiB
Следующий вывод для приведенной выше задачи.

Выполните команду lsblk для проверки раздела.
lsblk /dev/sdd NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sdd 8:48 0 15G 0 disk └─sdd1 8:49 0 5G 0 part
Создание физического тома и группы томов
Следующим шагом будет инициализация /dev/sdd1 как физического тома и добавление его в группу томов. Используйте lvg модуль, который также поддерживается в пространстве имен community.general.
Следующая задача инициализирует /dev/sdd1 как физический том и добавит его в группу томов с именем ostechnixlab.
- name: Task for PV and VG
lvg:
vg: ostechnixlab
pvs: /dev/sdd1
Следующий вывод для приведенной выше задачи.

Вы также можете инициализировать несколько физических томов и добавить их в группу томов.
- name: Task for PV and VG
lvg:
vg: ostechnixlab
pvs: /dev/sdd1, /dev/sdd2, /dev/sdd3
Вы также можете определить размер экстента. По умолчанию он установлен на 4MB.
- name: Task for PV and VG
lvg:
vg: ostechnixlab
pvs: /dev/sdd1, /dev/sdd2, /dev/sdd3
pesize: 8
Вы можете проверить состояние группы томов, выполнив следующую команду.
sudo vgs ostechnixlab VG #PV #LV #SN Attr VSize VFree ostechnixlab 1 0 0 wz--n- <5.00g <5.00g
Создание логического тома
Следующим шагом будет создание логического тома с помощью поддерживаемой сообществом команды lvol module.
В приведенной ниже задаче я создаю логический том под названием lbapart1 из группы томов ostechnixlab. Общий размер группы томов составляет 5 ГБ, а логический том имеет размер 1 ГБ.
- name: Logical volume with 1GB size
community.general.lvol:
vg: ostechnixlab
lv: labpart1
size: 1G
Следующий вывод для приведенной выше задачи.

Выполните команду lvs, чтобы проверить созданный том.
sudo lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert labpart1 ostechnixlab -wi-a----- 1.00g
Монтирование логического тома
На этом шаге вы смонтируете логический том, чтобы начать его использовать. Сначала необходимо отформатировать том с любым поддерживаемым типом файловой системы и смонтировать том.
Я разделю вышеописанные шаги на 3 задачи.
- Первая задача отформатирует том с файловой системой ext4. Для этого следует использовать модуль filesystem, который является частью пространства имен community.general.
- Вторая задача будет использовать модуль file для создания каталога с томом, который будет смонтирован. Для этого следует использовать модуль file, который является частью пространства имен ansible.builtin.
- Третья задача смонтирует отформатированный том в файловой системе, которую мы создали во второй задаче. Для этого следует использовать модуль mount, который является частью пространства имен ansible.posix.
- name: Format the volume with ext4 fs community.general.filesystem: fstype: ext4 dev: /dev/ostechnixlab/labpart1 - name: Target directory under /opt/ ansible.builtin.file: path: /opt/lvm_test/ state: directory mode: '0755' - name: mount the lv on /data1 ansible.posix.mount: path: /opt/lvm_test/ src: /dev/ostechnixlab/labpart1 fstype: ext4 state: mounted
Следующий вывод для вышеуказанных задач.

Вы можете использовать команду mount или df для проверки типа файловой системы и статуса монтирования.
mount | grep -i labpart1 /dev/mapper/ostechnixlab-labpart1 on /opt/lvm_test type ext4 (rw,relatime)
df -h /opt/lvm_test/ Filesystem Size Used Avail Use% Mounted on /dev/mapper/ostechnixlab-labpart1 974M 24K 907M 1% /opt/lvm_test
Заключение
В этой статье мы рассмотрели различные модули ansible, которые можно использовать для создания разделов, логического тома и монтирования файловой системы. Вы можете создать специальную роль для LVM и повторно использовать ее в различных средах динамически, просто передавая аргументы.



Комментарии (0)