#!/bin/bash # 挂载vdb到/data目录的自动化脚本 # 适用于CentOS 7.9 # 需要root权限运行 set -e # 遇到错误立即退出 DEVICE="/dev/vdb" PARTITION="/dev/vdb1" MOUNT_POINT="/data" echo "=== 开始挂载vdb到/data目录 ===" # 检查设备是否存在 if [ ! -b "$DEVICE" ]; then echo "错误: 设备 $DEVICE 不存在!" exit 1 fi # 检查设备是否已经有分区 if [ -b "$PARTITION" ]; then echo "警告: $PARTITION 分区已存在,跳过分区步骤" else echo "步骤1: 创建分区..." # 使用fdisk自动创建分区 fdisk $DEVICE << EOF n p 1 w EOF echo "分区创建完成" # 等待系统识别新分区 sleep 2 partprobe $DEVICE fi # 检查分区是否已经格式化(检查文件系统类型) FS_TYPE=$(blkid -s TYPE -o value $PARTITION 2>/dev/null || echo "") if [ -n "$FS_TYPE" ] && [ "$FS_TYPE" != "null" ]; then echo "检测到现有文件系统: $FS_TYPE" read -p "是否重新格式化为ext4? (y/N): " -r if [[ $REPLY =~ ^[Yy]$ ]]; then echo "步骤2: 重新格式化分区为ext4..." mkfs.ext4 -F $PARTITION echo "格式化完成" else echo "保持现有文件系统: $FS_TYPE" fi else echo "步骤2: 格式化分区为ext4..." mkfs.ext4 -F $PARTITION echo "格式化完成" # 格式化后等待系统识别 sleep 3 partprobe $DEVICE fi # 创建挂载点 echo "步骤3: 创建挂载点 $MOUNT_POINT..." mkdir -p $MOUNT_POINT # 检查是否已经挂载 if mountpoint -q $MOUNT_POINT; then echo "警告: $MOUNT_POINT 已经有设备挂载" umount $MOUNT_POINT fi # 挂载分区 echo "步骤4: 挂载分区到 $MOUNT_POINT..." mount $PARTITION $MOUNT_POINT # 获取UUID echo "步骤5: 配置开机自动挂载..." UUID=$(blkid -s UUID -o value $PARTITION) # 备份fstab文件 cp /etc/fstab /etc/fstab.backup.$(date +%Y%m%d_%H%M%S) # 检查fstab中是否已经存在该配置 if grep -q "$MOUNT_POINT" /etc/fstab; then echo "警告: /etc/fstab 中已存在 $MOUNT_POINT 的配置,请手动检查" else # 添加到fstab echo "UUID=$UUID $MOUNT_POINT ext4 defaults 0 2" >> /etc/fstab echo "已添加到 /etc/fstab" fi # 测试fstab配置 echo "步骤6: 测试挂载配置..." umount $MOUNT_POINT mount -a # 验证结果 echo "" echo "=== 挂载完成,验证结果 ===" echo "磁盘使用情况:" df -h | grep -E "(Filesystem|$MOUNT_POINT)" echo "" echo "块设备信息:" lsblk | grep -E "(NAME|vdb)" echo "" echo "挂载点验证:" if mountpoint -q $MOUNT_POINT; then echo "✓ $MOUNT_POINT 挂载成功" echo "✓ 可用空间: $(df -h $MOUNT_POINT | tail -1 | awk '{print $4}')" else echo "✗ $MOUNT_POINT 挂载失败" exit 1 fi echo "" echo "=== 脚本执行完成 ===" echo "vdb已成功挂载到 $MOUNT_POINT 目录" echo "系统重启后将自动挂载"