关于 Ansible 系列其他文章的传送门
-
《 Ansible 介绍和基础操作 》
-
《 Ansible Playbook 以及 Roles 的简单使用方法 》
-
《 使用 Ansible Playbook 通过 yum 部署 LNMP 环境 》
-
《 使用 Ansible Roles 快速搭建 Nginx 代理后端的 LAMP 模型 》
-
《 使用 Ansible Playbook 自动完成硬盘的分区、格式化、挂载 》 您当前所在位置

目标
目标是使用 ansible 批量分区、格式化、挂载,并在 fatab 中添加自动挂载信息,并且当硬盘不存在或者已有分区时,不操作该硬盘,格式化和挂载使用 ansible 的 mount、filesystem 模块实现
通过脚本判断分区是否存在.
仅针对 4T 以下硬盘,因为 fdisk 不支持 4T 以上硬盘,需要时候再研究 parted 的脚本吧
1.自动化分区脚本
cat /root/disk.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| #!/bin/bash #
# 获取硬盘名 DISK=$1
# 检查硬盘是否存在 CHECK_DISK_EXIST=`/sbin/fdisk -l 2> /dev/null | grep -o "$DISK"` [ ! "$CHECK_DISK_EXIST" ] && { echo "Error: Disk is not found !"; exit 1;}
# 检查硬盘是否已存在分区 CHECK_DISK_PARTITION_EXIST=`/sbin/fdisk -l 2> /dev/null | grep -o "$DISK[1-9]"` [ ! "$CHECK_DISK_PARTITION_EXIST" ] || { echo "WARNING: ${CHECK_DISK_PARTITION_EXIST} is Partition already !"; exit 1;}
# 开始格式化 /sbin/fdisk $DISK<<EOF &> /dev/null n p 1
t 83 wq EOF
#刷新硬盘 partx -a /dev/$DISK
echo "Disk Partition Create OK!"
|
2. yaml 剧本文件
cat /root/diskpart.yaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| - hosts: node1 remote_user: root vars: disk: /dev/sdb diskfullpath: /dev/sdb1 mountDir: /data tasks: - name: New Disk Partition script: "/root/disk/disk.sh {{ disk }}" become: yes become_user: root become_method: sudo
- name: New Disk Format(xfs) filesystem: fstype=xfs dev="{{ diskfullpath }}" force=yes become: yes become_user: root become_method: sudo notify: ADD TO fstab
- name: New Disk Mount mount: name="{{ mountDir }}" src="{{ diskfullpath }}" fstype=xfs state=mounted become_user: root become: yes become_method: sudo
handlers: - name: ADD TO fstab script: "/root/disk/addfstab.sh {{ diskfullpath }}" become: yes become_user: root become_method: sudo
|
3. add fstab 脚本
通过这个脚本在 fstab 中添加自动挂载信息
1 2 3 4 5 6
| #!/bin/bash #
diskfullpath=$1
UUID=$(blkid $diskfullpath | cut -d" " -f2) ; echo "$UUID /data xfs defaults 0 0" >> /etc/fstab
|
4. 执行
执行剧本,可以使用 -e 指定变量,优先级最高
1
| ansible-playbook diskpart.yaml [-e disk=/dev/sdb diskfullpath=/dev/sdb1 mountDir=data]
|
参考:
Ansible 之 playbook 自动完成硬盘分区,格式化,挂盘,并远程创建用户