Linux 磁盘自动分区挂载脚本

共计 1816 个字符,预计需要花费 5 分钟才能阅读完成。

功能说明

这个脚本用于自动化完成以下任务:

  1. 对新磁盘进行分区
  2. 格式化为 ext4 文件系统
  3. 创建挂载点并挂载
  4. 配置开机自动挂载

使用方法

sudo ./disk_mount.sh <磁盘设备> [挂载点]

参数说明

  • <磁盘设备>:必需参数,指定要处理的磁盘设备(如 /dev/sdb
  • [挂载点]:可选参数,指定挂载位置,默认为 /data

使用示例

# 使用默认挂载点 /data
sudo ./disk_mount.sh /dev/sdb

# 指定自定义挂载点
sudo ./disk_mount.sh /dev/sdb /mnt/data

完整代码

#!/bin/bash

# 函数:显示使用方法
show_usage() {
    echo "用法: $0 <磁盘设备> [挂载点]"
    echo "示例: $0 /dev/sdb /data"
    echo "注意: 磁盘设备参数是必需的"
    exit 1
}

# 检查 root 权限
if [ "$EUID" -ne 0 ]; then
    echo "错误: 请以 root 权限运行此脚本"
    exit 1
fi

# 检查必需的第一个参数
if [ -z "$1" ]; then
    echo "错误: 未指定磁盘设备"
    show_usage
fi

# 设置变量
disk="$1"
mount_point="${2:-/data}"  # 如果 $2 为空,则使用默认值 /data

# 验证磁盘设备是否存在
if [ ! -b "$disk" ]; then
    echo "错误: 磁盘设备 $disk 不存在或不是块设备"
    exit 1
fi

# 创建挂载点
if [ ! -d "$mount_point" ]; then
    echo "创建挂载点 $mount_point"
    mkdir -p "$mount_point" || {
        echo "错误: 无法创建挂载点 $mount_point"
        exit 1
    }
fi

# 检查磁盘是否已经分区并格式化
if ! blkid | grep -q "$disk"; then
    echo "$disk 尚未分区或格式化"
    echo "正在分区并格式化磁盘..."

    # 创建新的分区表和主分区
    parted -s "$disk" mklabel gpt || {
        echo "错误: 创建分区表失败"
        exit 1
    }

    parted -s "$disk" mkpart primary ext4 0% 100% || {
        echo "错误: 创建分区失败"
        exit 1
    }

    sleep 2  # 等待分区表生效

    # 格式化分区
    mkfs.ext4 "${disk}1" || {
        echo "错误: 格式化分区失败"
        exit 1
    }
else
    echo "$disk 已分区,跳过分区步骤"
fi

# 获取分区的 UUID
uuid=$(blkid -s UUID -o value "${disk}1")
if [ -z "$uuid" ]; then
    echo "错误: 无法获取 ${disk}1 的 UUID"
    exit 1
fi

# 检查是否已挂载
if ! mount | grep -q "$mount_point"; then
    echo "挂载 ${disk}1 到 $mount_point"
    mount "${disk}1" "$mount_point" || {
        echo "错误: 挂载失败"
        exit 1
    }
else
    echo "$mount_point 已挂载"
fi

# 配置开机自动挂载
if ! grep -q "$uuid" /etc/fstab; then
    echo "将 ${disk}1 添加到 /etc/fstab"
    echo "UUID=$uuid $mount_point ext4 defaults 0 2" >> /etc/fstab || {
        echo "错误: 更新 /etc/fstab 失败"
        exit 1
    }
else
    echo "${disk}1 已存在于 /etc/fstab 中"
fi

# 验证挂载状态
if mountpoint -q "$mount_point"; then
    echo "挂载成功,设置已完成"
    echo "磁盘设备: $disk"
    echo "挂载点: $mount_point"
    echo "UUID: $uuid"
else
    echo "错误: 最终挂载验证失败"
    exit 1
fi

脚本功能说明

  1. 参数验证

    • 检查是否以 root 权限运行
    • 验证必需的磁盘设备参数
    • 检查磁盘设备是否存在
  2. 磁盘处理

    • 创建 GPT 分区表
    • 创建主分区
    • 格式化为 ext4 文件系统
  3. 挂载处理

    • 创建挂载点目录
    • 挂载分区
    • 配置 /etc/fstab 实现开机自动挂载
  4. 错误处理

    • 各个关键步骤都有错误检查
    • 出错时提供明确的错误信息
    • 失败时及时退出脚本

注意事项

  1. 必须以 root 权限运行脚本
  2. 请确保指定的磁盘设备正确,避免误操作
  3. 如果磁盘已经包含数据,请先备份重要数据
  4. 脚本会自动格式化未分区的磁盘,请谨慎使用

依赖工具

  • parted
  • blkid
  • mkfs.ext4
  • mount
正文完
 0
评论(没有评论)