磁盘分区脚本
磁盘分区,格式化,挂载脚本:
#!/bin/bash DEVICE="/dev/vdb" PART="${DEVICE}1" MOUNT_POINT="/data0" # 创建挂载点目录 mkdir -p "$MOUNT_POINT" # 检查磁盘是否存在 if [ ! -b "$DEVICE" ]; then echo "Device $DEVICE does not exist" exit 1 fi # 判断是否已有分区表 parted_output=$(parted -s "$DEVICE" print 2>/dev/null) if ! echo "$parted_output" | grep -q "Partition Table:"; then # 获取磁盘大小(字节),判断是否大于 2TB DISK_SIZE=$(blockdev --getsize64 "$DEVICE") if [ "$DISK_SIZE" -gt $((2 * 1024 * 1024 * 1024 * 1024)) ]; then PARTITION_LABEL="gpt" else PARTITION_LABEL="msdos" fi echo "Creating $PARTITION_LABEL partition table on $DEVICE" parted -s "$DEVICE" mklabel "$PARTITION_LABEL" else echo "Partition table already exists on $DEVICE" fi # 检查分区是否存在 if [ ! -b "$PART" ]; then echo "Creating primary partition..." parted -s "$DEVICE" mkpart primary ext4 0% 100% else echo "Partition $PART already exists" fi # 等待内核识别新分区 sleep 2 partprobe "$DEVICE" # 检查是否已格式化 if ! blkid "$PART" >/dev/null 2>&1; then echo "Formatting $PART to ext4" mkfs.ext4 "$PART" else echo "$PART already formatted" fi # 获取分区 UUID UUID=$(blkid -s UUID -o value "$PART") # 挂载并更新 /etc/fstab echo "Mounting $PART to $MOUNT_POINT" mount "$PART" "$MOUNT_POINT" if ! grep -q "$UUID" /etc/fstab; then echo "UUID=$UUID $MOUNT_POINT ext4 defaults,noatime 0 2" >> /etc/fstab fi echo "Done."
ansible playbook:
- name: create directory for disk
file:
path: /data0
state: directory
- name: check if /dev/vdb exists
stat:
path: /dev/vdb
register: vdb_stat
- name: check /dev/vdb1 partition exists
stat:
path: /dev/vdb1
register: vdb1_stat
- name: Get disk size (in GiB)
command: "lsblk -nbdo SIZE /dev/vdb"
register: disk_size
changed_when: false
when: vdb_stat.stat.exists
- name: create /dev/vdb1 partition
parted:
device: /dev/vdb
number: 1
state: present
part_type: primary
label: "{{ 'gpt' if (disk_size.stdout|int / 1024 / 1024 / 1024) > 2000 else 'msdos' }}"
when: vdb1_stat.stat.exists == False and vdb_stat.stat.exists == True
- name: Create a file system for /dev/vdb1
filesystem:
fstype: ext4
dev: /dev/vdb1
when: vdb1_stat.stat.exists == False and vdb_stat.stat.exists == True
- name: Mount /dev/vdb1 to /data0
mount:
path: /data0
src: /dev/vdb1
fstype: ext4
opts: rw,noatime
state: mounted
when: vdb_stat.stat.exists == True
浙公网安备 33010602011771号