在 SaltStack 中管理块设备的正确方法
Correct way to manage block devices in SaltStack
我希望能够使用 SaltStack 提供块设备。在这种特定情况下,Ubuntu 20.04。关于这个主题的文档似乎不多。
目标是使用单个 EXT4 文件系统将新的块设备分区并格式化为 GPT,然后挂载它。如果块设备已经有一个文件系统,它将被挂载。应向 /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
应用状态后,我确实看到设备被分区并且文件系统被格式化。
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
我想知道是否有“更正确的方法”来做到这一点。当前的方法看起来非常复杂。根据我的经验,这通常意味着我做错了。
有一个管理块设备的 Salt 状态,它被称为 blockdev。
如果不需要在磁盘上显式创建和管理分区,使用此状态可以消除对 label
、partition
、name
等磁盘的需要.
下面的示例将使用 ext4
文件系统格式化整个磁盘 /dev/sdb
并挂载它。如果你有一个分区,你可以指定它而不是磁盘。
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
我希望能够使用 SaltStack 提供块设备。在这种特定情况下,Ubuntu 20.04。关于这个主题的文档似乎不多。
目标是使用单个 EXT4 文件系统将新的块设备分区并格式化为 GPT,然后挂载它。如果块设备已经有一个文件系统,它将被挂载。应向 /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
应用状态后,我确实看到设备被分区并且文件系统被格式化。
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
我想知道是否有“更正确的方法”来做到这一点。当前的方法看起来非常复杂。根据我的经验,这通常意味着我做错了。
有一个管理块设备的 Salt 状态,它被称为 blockdev。
如果不需要在磁盘上显式创建和管理分区,使用此状态可以消除对 label
、partition
、name
等磁盘的需要.
下面的示例将使用 ext4
文件系统格式化整个磁盘 /dev/sdb
并挂载它。如果你有一个分区,你可以指定它而不是磁盘。
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