Как использовать Ansible для автоматизации диспетчера логических томов LVM в Linux
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 и повторно использовать ее в различных средах динамически, просто передавая аргументы.
Парашютист со стажем. Много читаю и слушаю подкасты. Люблю посиделки у костра, песни под гитару и приближающиеся дедлайны. Люблю путешествовать.
Вдохновлен ostechnix.com
Комментарии (0)