磁盘分区脚本

磁盘分区,格式化,挂载脚本:

#!/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

 

posted on 2025-06-11 16:59  生活费  阅读(37)  评论(0)    收藏  举报

导航