16.6 创建和使用逻辑卷
创建一个能批量、自动管理逻辑卷设备的剧本,不但能大大提高硬盘设备的管理效率,而且还能避免手动创建带来的错误。例如,我们想在每台受管主机上都创建出一个名为data的逻辑卷设备,大小为150MB,归属于research卷组。如果创建成功,则进一步用Ext4文件系统进行格式化操作;如果创建失败,则给用户输出一条报错提醒,以便排查原因。
在这种情况下,使用Ansible剧本要比使用Shell脚本的优势大,原因主要有下面两点。
Ansible模块化的功能让操作更标准,只要在执行过程中无报错,那么便会依据远程主机的系统版本及配置自动做出判断和操作,不用担心因系统变化而导致命令失效的问题。
Ansible服务在执行剧本文件时会进行判断:如果该文件或该设备已经被创建过,或是某个动作(play)已经被执行过,则绝对不会再重复执行;而使用Shell脚本有可能导致设备被重复格式化,导致数据丢失。
首先在prod组的两台主机上分别添加一块硬盘设备,大小为20GB,类型为SCSI,其余选项选择默认值,如图16-10~图16-12所示。
图16-10 添加一块新硬盘
图16-11 设置硬盘类型
图16-12 新硬盘添加完毕
通过回忆第7章学习过的逻辑卷的知识,我们应该让剧本文件依次创建物理卷(PV)、卷组(VG)及逻辑卷(LV)。需要先使用lvg模块让设备支持逻辑卷技术,然后创建一个名为research的卷组。lvg模块的帮助信息如下:
[root@linuxprobe ~]# ansible-doc lvg > LVG (/usr/lib/python3.6/site-packages/ansible/modules/system/lvg.py) This module creates, removes or resizes volume groups. * This module is maintained by The Ansible Community ………………省略部分输出信息……………… EXAMPLES: - name: Create a volume group on top of /dev/sda1 with physical extent size = 3> lvg: vg: vg.services pvs: /dev/sda1 pesize: 32 - name: Create a volume group on top of /dev/sdb with physical extent size = 12> lvg: vg: vg.services pvs: /dev/sdb pesize: 128K
通过输出信息可得知,创建PV和VG的lvg模块总共有3个必备参数。其中,vg参数用于定义卷组的名称,pvs参数用于指定硬盘设备的名称,pesize参数用于确定最终卷组的容量大小(可以用PE个数或容量值进行指定)。这样一来,我们先创建出一个由/dev/sdb设备组成的名称为research、大小为150MB的卷组设备。
[root@linuxprobe ~]# vim lv.yml --- - name: 创建和使用逻辑卷 hosts: all tasks: - name: one lvg: vg: research pvs: /dev/sdb pesize: 150M
由于刚才只在prod组的两台主机上添加了新硬盘设备文件,因此在执行上述操作时其余3台主机会提示未创建成功,这属于正常情况。接下来使用lvol模块创建出逻辑卷设备。还是按照惯例,先查看模块的帮助信息:
[root@linuxprobe ~]# ansible-doc lvol > LVOL (/usr/lib/python3.6/site-packages/ansible/modules/system/lvol.py) This module creates, removes or resizes logical volumes. * This module is maintained by The Ansible Community ………………省略部分输出信息……………… EXAMPLES: - name: Create a logical volume of 512m lvol: vg: firefly lv: test size: 512 - name: Create a logical volume of 512m with disks /dev/sda and /dev/sdb lvol: vg: firefly lv: test size: 512 pvs: /dev/sda,/dev/sdb
通过输出信息可得知,lvol是用于创建逻辑卷设备的模块。其中,vg参数用于指定卷组名称,lv参数用于指定逻辑卷名称,size参数则用于指定最终逻辑卷设备的容量大小(不用加单位,默认为MB)。填写好参数,创建出一个大小为150MB、归属于research卷组且名称为data的逻辑卷设备:
[root@linuxprobe ~]# vim lv.yml --- - name: 创建和使用逻辑卷 hosts: all tasks: - name: one lvg: vg: research pvs: /dev/sdb pesize: 150M - name: two lvol: vg: research lv: data size: 150M
这样还不够好,如果还能将创建出的/dev/research/data逻辑卷设备自动用Ext4文件系统进行格式化操作,则又能帮助运维管理员减少一些工作量。可使用filesystem模块来完成设备的文件系统格式化操作。该模块的帮助信息如下:
[root@linuxprobe ~]# ansible-doc filesystem > FILESYSTEM (/usr/lib/python3.6/site-packages/ansible/modules/system/filesy> This module creates a filesystem. * This module is maintained by The Ansible Community ………………省略部分输出信息……………… EXAMPLES: - name: Create a ext2 filesystem on /dev/sdb1 filesystem: fstype: ext2 dev: /dev/sdb1
filesystem模块的参数真是简练,fstype参数用于指定文件系统的格式化类型,dev参数用于指定要格式化的设备文件路径。继续编写:
[root@linuxprobe ~]# vim lv.yml --- - name: 创建和使用逻辑卷 hosts: all tasks: - name: one lvg: vg: research pvs: /dev/sdb pesize: 150M - name: two lvol: vg: research lv: data size: 150M <