#!/bin/bash

# 清屏并显示信息
clear


# 列出所有磁盘及其分区信息
echo "当前系统中的磁盘和分区信息:"
lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT

# 提示用户输入要格式化的分区名称
read -p "请输入要格式化的磁盘分区(例如:vdb1 或 /dev/vdb1): " PARTITION

# 如果用户输入的不是以 /dev/ 开头,则加上 /dev/
if [[ "$PARTITION" != /dev/* ]]; then
  PARTITION="/dev/$PARTITION"
fi

# 获取分区的基本名称
BASENAME=$(basename "$PARTITION")

# 检查用户输入的分区是否存在
if lsblk | grep -q "^${BASENAME}"; then
  # 确认操作
  read -p "您确定要格式化 ${PARTITION} 吗?此操作将删除所有数据! (yes/no): " CONFIRM
  if [ "$CONFIRM" != "yes" ]; then
    echo "操作已取消。"
    exit 1
  fi

  # 提示用户输入挂载点目录
  read -p "请输入要挂载的目录(将创建在 / 目录下,例如:mydisk): " MOUNT_DIR

  # 创建挂载点目录
  MOUNT_POINT="/${MOUNT_DIR}"
  
  # 检查挂载点目录是否存在,如果不存在则创建
  if [ ! -d "$MOUNT_POINT" ]; then
    echo "创建挂载点目录 ${MOUNT_POINT} ..."
    sudo mkdir -p "$MOUNT_POINT"
  fi

  # 卸载分区(如果已挂载)
  if mount | grep -q "^${PARTITION} "; then
    echo "正在卸载 ${PARTITION} ..."
    sudo umount "${PARTITION}"
  fi

  # 格式化分区为 XFS 文件系统
  echo "正在格式化 ${PARTITION} 为 XFS 文件系统..."
  sudo mkfs.xfs -f "${PARTITION}"

  # 挂载分区
  echo "正在挂载 ${PARTITION} 到 ${MOUNT_POINT} ..."
  sudo mount "${PARTITION}" "$MOUNT_POINT"

  # 确认挂载成功
  if mount | grep -q "^${PARTITION} "; then
    echo "${PARTITION} 已成功挂载到 ${MOUNT_POINT}。"
    
    # 写入 /etc/fstab 以便系统重启后自动挂载
    echo "正在将挂载信息写入 /etc/fstab ..."
    UUID=$(sudo blkid -s UUID -o value "${PARTITION}")
    FSTAB_ENTRY="UUID=${UUID} ${MOUNT_POINT} xfs defaults 0 0"
    
    if ! grep -qs "${FSTAB_ENTRY}" /etc/fstab; then
      echo "${FSTAB_ENTRY}" | sudo tee -a /etc/fstab
      echo "挂载信息已写入 /etc/fstab。"
    else
      echo "挂载信息已存在于 /etc/fstab。"
    fi
  else
    echo "挂载失败。"
  fi
else
  echo "错误:未找到指定的分区 ${PARTITION}。"
  exit 1
fi


最后修改:2024 年 09 月 23 日
如果觉得我的文章对你有用,请随意赞赏