#salt-stack
Вопрос:
Я хотел бы иметь возможность блокировать устройства с помощью SaltStack. В данном конкретном случае в Ubuntu 20.04. Похоже, на эту тему не так много документации.
Цель состоит в том, чтобы разделить и отформатировать новое блочное устройство как GPT с помощью одной файловой системы EXT4, а затем смонтировать его. Если на блочном устройстве уже есть файловая система, она будет просто смонтирована. Необходимо добавить запись /etc/fstab
, чтобы устройство автоматически монтировалось при загрузке с помощью метки раздела.
Мне удалось собрать файл состояния, который, похоже, выполнил свою работу, volume.sls
:
disk_label_mysql:
module.run:
- name: partition.mklabel
- device: /dev/nvme2n1
- label_type: gpt
- unless: "parted /dev/nvme2n1 print | grep -i '^Partition Table: gpt'"
disk_partition_mysql:
module.run:
- name: parted_partition.mkpart
- device: /dev/nvme2n1
- fs_type: ext4
- part_type: primary
- start: 0%
- end: 100%
- unless: parted /dev/nvme2n1 print 1
- require:
- module: disk_label_mysql
disk_name_mysql:
module.run:
- name: partition.name
- device: /dev/nvme2n1
- partition: 1
- m_name: mysql
- unless: parted /dev/nvme2n1 print | grep mysql
- require:
- module: disk_partition_mysql
disk_format_mysql:
module.run:
- name: extfs.mkfs
- device: /dev/nvme2n1p1
- fs_type: ext4
- label: mysql
- unless: blkid --label mysql
- require:
- module: disk_name_mysql
disk_mount_mysql:
file.directory:
- name: /var/db/mysql
- user: root
- group: root
- file_mode: 644
- dir_mode: 777
- makedirs: True
mount.fstab_present:
- name: /dev/nvme2n1p1
- fs_file: /var/db/mysql
- fs_vfstype: ext4
- mount: True
- fs_mntops:
- defaults
- mount_by: label
- require:
- module: disk_format_mysql
После применения sate я вижу, что устройство разбивается на разделы и форматируется файловая система.
parted /dev/nvme2n1 print
Model: Amazon Elastic Block Store (nvme)
Disk /dev/nvme2n1: 53.7GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 53.7GB 53.7GB ext4 mysql
Он также добавляется /etc/fstab
и монтируется.
# cat /etc/fstab
LABEL=cloudimg-rootfs / ext4 defaults,discard 0 1
LABEL=mysql /var/db/mysql ext4 defaults 0 0
# df -h /var/db/mysql
Filesystem Size Used Avail Use% Mounted on
/dev/nvme2n1p1 49G 53M 47G 1% /var/db/mysql
Я хотел бы знать, есть ли «более правильный способ» сделать это. Нынешний подход выглядит очень сложным. По моему опыту, это обычно означает, что я делаю это неправильно.
Ответ №1:
Существует состояние соли для управления блочными устройствами, и оно называется blockdev.
Если нет необходимости явно создавать разделы на диске и управлять ими, использование этого состояния может устранить необходимость в label
, partition
, и т.д. name
диск.
В приведенном ниже примере будет отформатирован весь диск /dev/sdb
с ext4
файловой системой и смонтирован. Если у вас есть раздел, вы можете указать его вместо диска.
disk_create:
blockdev.formatted:
- name: /dev/sdb
- fs_type: ext4
disk_mount:
file.directory:
- name: /mnt/newdisk
mount.mounted:
- name: /mnt/newdisk
- device: /dev/sdb
- fstype: ext4
Комментарии:
1. Спасибо, я посмотрел на blockdev, но в настоящее время он не поддерживает возможность добавления метки раздела. Я хочу добавить
/etc/fstab
и ссылаться на него, используя LABEL=xxxxx вместо имени устройства. Или это не очень важно для Ubuntu на AWS?2. Для вашего случая использования, когда вам нужны конкретные разделы, метки и т. Д. ваш подход работает лучше. Если у вас нет необходимости часто добавлять/редактировать диски экземпляра EC2, использование имен дисков в
/etc/fstab
должно быть в порядке.3. Я смог придумать работоспособное решение, используя часть вашего ответа вместе с тем, что у меня было ранее ( unibia.com/unibianet/copypastie/volumesls ). У меня возникла проблема, когда ОС случайным образом переупорядочивала имя устройства независимо от того, что я установил на стороне AWS, таким образом, рассуждая о ярлыках. Мне, вероятно, следует подумать об использовании столбов или зерен, чтобы, возможно, получить имена устройств.