ansible的lvg和lvol模块
parted分区模块
实战环境的场景是批量分区和批量扩容
参数 | 解释 |
---|---|
align | 配置分区的alignment(对齐) |
device | 块设备(磁盘路径) |
flags | 分区的flags |
number | 分区编号 |
part_start | 起始扇区 |
part_end | 分区增加多少 |
state | Creates/removes |
unit | Size的unit信息 |
示例
- name: 新建10G分区
parted:
device: /dev/vdb
number: 1
state: present
part_end: 10GB
lvg模块的参数
参数 | 解释 |
---|---|
pesize | 指定pe的大小 |
pvs | 要加载的pv(物理卷) |
vg | vg名 |
state | 创建present或删除absent |
lvol模块的参数
参数 | 解释 |
---|---|
lv | lv的名字 |
resizefs | 指定lv的大小(扩容) |
shrink | 缩容 |
size | 创建时指定的大小 |
resizefs | 调整大小yes |
force | 强制调整yes |
snapshot | 快照 |
创建lvm
---
- hosts: node2
tasks:
- name: 新建第一个磁盘分区
parted:
device: /dev/vdb
number: 1
state: present
part_end: 1GiB
- name: 新建第二个分区
parted:
device: /dev/vdb
number: 2
state: present
part_start: 1GiB
part_end: 3GiB
- name: 新建vg
lvg:
vg: vg1
pvs: /dev/vdb1
- name: 新建lv
lvol:
vg: vg1
lv: lv1
# 指定2g大小
size: 2g
filesystem模块
分区格式化模块
参数 | 解释 |
---|---|
dev | 块设备名称(磁盘路径) |
fstype | 分区格式 |
resizefs | 将文系统系统大小增加到磁盘的大小 |
示例代码
- name: 创建xfs文件系统
filesystem:
fstype: xfs
dev: /dev/vdb1
mount模块
分区挂载模块
参数 | 解释 |
---|---|
fstype | 分区格式 |
opts | 挂载参数 |
path | 挂载点 |
src | 挂载的设备(uuid) |
state | present(临时挂载)mounted(持久挂载) |
示例代码
- name: 挂载示例
mount:
path: /data
src: UUID=23d72cb3-da1d-4e40-a99f-bfad92caba7c
fstype: xfs
state: present
存储管理综合练习
变量文件storage_vars.yml
---
partitions:
- number: 1
start: 1MiB
end: 257MiB
volume_groups:
- name: apache-vg
devices: /dev/vdb1
logical_volumes:
- name: content-lv
size: 64M
vgroup: apache-vg
mount_path: /var/www
- name: logs-lv
size: 128M
vgroup: apache-vg
mount_path: /var/log/httpd
执行剧本storage.yml
---
- name: 存储配置演示
hosts: webservers
vars_files:
- storage_vars.yml
tasks:
- name: 对磁盘/dev/vdb进行分区
parted:
device: /dev/vdb
number: "{{ item.number }}"
part_start: "{{ item.start }}"
part_end: "{{ item.end }}"
state: present
loop: "{{ partitions }}"
# 扩容的话,加分区,再把心分区加到vg,然后扩容lv即可
- name: 创建vg
lvg:
vg: "{{ item.name }}"
pvs: "{{ item.devices }}"
loop: "{{ volume_groups }}"
- name: 创建lv
lvol:
vg: "{{ item.vgroup }}"
lv: "{{ item.name }}"
size: "{{ item.size }}"
loop: "{{ logical_volumes }}"
# 判断lvs中不存在这个lv才创建这个lv
when: item.name not in ansible_lvm["lvs"]
- name: 对lv分区进行格式化
filesystem:
fstype: xfs
dev: "/dev/{{ item.vgroup }}/{{ item.name }}"
loop: "{{ logical_volumes }}"
- name: 调整lv分区的容量
lvol:
vg: "{{ item.vgroup }}"
lv: "{{ item.name }}"
# 如果要扩容,调大size值即可
size: "{{ item.size }}"
# 是否调整容量
resizefs: yes
force: yes
loop: "{{ logical_volumes }}"
- name: 持久挂载lv分区到挂载点
mount:
path: "{{ item.mount_path }}"
src: "/dev/{{ item.vgroup }}/{{ item.name }}"
fstype: xfs
opts: noatime
state: mounted
loop: "{{ logical_volumes }}"
第八题
---
- name: 创建逻辑卷
hosts: all
tasks:
- block:
- name: 创建逻辑卷1500M
lvol:
vg: research
lv: data
size: 1500
rescue:
- name: 提示无法创建该大小的逻辑卷
fail:
msg: Could not create logical volume of that size
when: ansible_lvm.lvs.data is undefined
# 如果lv.data没有被定义就打印错误提示:无法创建该大小的逻辑卷
- name: 创建逻辑卷800M
lvol:
vg: research
lv: data
size: 800
when: ansible_lvm.vgs.research is defined
# 如果vg.research被定义了才执行创建800M
- name: 提示卷组不存在
fail:
msg: Volume group does not exist
when: ansible_lvm.vgs.research is undefined
# 如果vg.research没有被定义就提示卷组不存在
always:
- name: mkfs ext4
filesystem:
fstype: ext4
dev: /dev/research/data
when: ansible_lvm.lvs.data is defined
# 如果lv.data被定义了就执行格式化