0%

使用 Ansible Playbook 自动完成硬盘的分区、格式化、挂载

关于 Ansible 系列其他文章的传送门

  1. 《 Ansible 介绍和基础操作 》

  2. 《 Ansible Playbook 以及 Roles 的简单使用方法 》

  3. 《 使用 Ansible Playbook 通过 yum 部署 LNMP 环境 》

  4. 《 使用 Ansible Roles 快速搭建 Nginx 代理后端的 LAMP 模型 》

  5. 《 使用 Ansible Playbook 自动完成硬盘的分区、格式化、挂载 》         您当前所在位置



logo

目标

目标是使用 ansible 批量分区、格式化、挂载,并在 fatab 中添加自动挂载信息,并且当硬盘不存在或者已有分区时,不操作该硬盘,格式化和挂载使用 ansiblemountfilesystem 模块实现
通过脚本判断分区是否存在.

仅针对 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: # 执行时可以通过 -e 指定变量,默认为 sdb
disk: /dev/sdb
diskfullpath: /dev/sdb1
mountDir: /data
tasks: # 创建分区,把变量传给 disk.sh
- name: New Disk Partition
script: "/root/disk/disk.sh {{ disk }}"
become: yes
become_user: root
become_method: sudo

- name: New Disk Format(xfs) # 格式化为 xfs
filesystem: fstype=xfs dev="{{ diskfullpath }}" force=yes
become: yes
become_user: root
become_method: sudo
notify: ADD TO fstab

- name: New Disk Mount # 挂载到开头指定的变量,默认 / data
mount: name="{{ mountDir }}" src="{{ diskfullpath }}" fstype=xfs state=mounted
become_user: root
become: yes
become_method: sudo

handlers: # 通过脚本添加到 fstab
- name: ADD TO fstab
script: "/root/disk/addfstab.sh {{ diskfullpath }}"
become: yes
become_user: root
become_method: sudo

3. add fstab 脚本

通过这个脚本在 fstab 中添加自动挂载信息

  • cat /root/addfstab.sh
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 自动完成硬盘分区,格式化,挂盘,并远程创建用户