Shell脚本如何挂载新磁盘分区

wen 实用脚本 1

本文目录导读:

Shell脚本如何挂载新磁盘分区

  1. 基础挂载脚本
  2. 完整的自动化脚本(含分区和格式化)
  3. 带参数检查的脚本
  4. 自动挂载多个分区的脚本
  5. 注意事项
  6. 执行权限
  7. 常见问题处理

在Shell脚本中挂载新磁盘分区,通常需要以下几个步骤,以下是完整的脚本示例和说明:

基础挂载脚本

#!/bin/bash
# 磁盘挂载脚本
DISK="/dev/sdb1"  # 要挂载的分区
MOUNT_POINT="/data"  # 挂载点
# 检查挂载点是否存在,不存在则创建
if [ ! -d "$MOUNT_POINT" ]; then
    mkdir -p "$MOUNT_POINT"
    echo "创建挂载点: $MOUNT_POINT"
fi
# 检查分区是否已被挂载
if mount | grep -q "$DISK"; then
    echo "分区 $DISK 已挂载"
    exit 0
fi
# 挂载分区
mount "$DISK" "$MOUNT_POINT"
# 检查挂载是否成功
if [ $? -eq 0 ]; then
    echo "成功挂载 $DISK 到 $MOUNT_POINT"
else
    echo "挂载失败"
    exit 1
fi

完整的自动化脚本(含分区和格式化)

#!/bin/bash
# 完整的磁盘分区、格式化、挂载脚本
DISK="/dev/sdb"
MOUNT_POINT="/data"
# 创建挂载点
mkdir -p "$MOUNT_POINT"
# 1. 分区
echo "正在对 $DISK 进行分区..."
echo -e "g\nn\n\n\n\nw" | fdisk "$DISK"
# 获取新分区名称
PARTITION="${DISK}1"
# 2. 格式化
echo "正在格式化 $PARTITION 为 ext4..."
mkfs.ext4 "$PARTITION"
# 3. 获取分区的UUID
UUID=$(blkid -s UUID -o value "$PARTITION")
echo "分区UUID: $UUID"
# 4. 挂载
mount "$PARTITION" "$MOUNT_POINT"
# 5. 配置fstab实现开机自动挂载
FSTAB_ENTRY="UUID=$UUID $MOUNT_POINT ext4 defaults 0 2"
if ! grep -q "$UUID" /etc/fstab; then
    echo "$FSTAB_ENTRY" >> /etc/fstab
    echo "已将挂载信息添加到 /etc/fstab"
fi
echo "完成!分区 $PARTITION 已挂载到 $MOUNT_POINT"

带参数检查的脚本

#!/bin/bash
# 带参数和错误检查的挂载脚本
usage() {
    echo "用法: $0 [磁盘设备] [挂载点] [文件系统类型]"
    echo "示例: $0 /dev/sdb1 /data ext4"
    exit 1
}
# 检查参数
if [ $# -lt 2 ]; then
    usage
fi
DISK="$1"
MOUNT_POINT="$2"
FS_TYPE="${3:-ext4}"  # 默认ext4
# 检查设备是否存在
if [ ! -b "$DISK" ]; then
    echo "错误: 设备 $DISK 不存在"
    exit 1
fi
# 检查是否为root用户
if [ "$(id -u)" -ne 0 ]; then
    echo "错误: 需要root权限运行此脚本"
    exit 1
fi
# 创建挂载点
mkdir -p "$MOUNT_POINT"
# 检查是否已挂载
if mountpoint -q "$MOUNT_POINT"; then
    echo "警告: $MOUNT_POINT 已被挂载"
    exit 1
fi
# 挂载分区
mount -t "$FS_TYPE" "$DISK" "$MOUNT_POINT"
if [ $? -eq 0 ]; then
    echo "成功: $DISK 已挂载到 $MOUNT_POINT"
    # 获取文件系统信息
    df -h "$MOUNT_POINT"
else
    echo "错误: 挂载失败"
    exit 1
fi

自动挂载多个分区的脚本

#!/bin/bash
# 定义挂载配置:设备:挂载点:文件系统类型
MOUNT_CONFIG=(
    "/dev/sdb1:/data:ext4"
    "/dev/sdb2:/backup:xfs"
    "/dev/sdc1:/logs:ext4"
)
mount_all_partitions() {
    for config in "${MOUNT_CONFIG[@]}"; do
        IFS=':' read -r device mount_point fs_type <<< "$config"
        echo "处理 $device -> $mount_point"
        # 创建挂载点
        mkdir -p "$mount_point"
        # 检查是否已挂载
        if ! mountpoint -q "$mount_point"; then
            mount -t "$fs_type" "$device" "$mount_point"
            if [ $? -eq 0 ]; then
                echo "✓ 成功挂载 $device"
                # 添加到fstab
                UUID=$(blkid -s UUID -o value "$device")
                if [ -n "$UUID" ] && ! grep -q "$UUID" /etc/fstab; then
                    echo "UUID=$UUID $mount_point $fs_type defaults 0 2" >> /etc/fstab
                fi
            else
                echo "✗ 挂载 $device 失败"
            fi
        else
            echo "  $mount_point 已挂载"
        fi
    done
}
# 执行
mount_all_partitions

注意事项

安全检查和最佳实践

#!/bin/bash
# 安全的挂载脚本
SAFE_MOUNT() {
    local DISK="$1"
    local MOUNT_POINT="$2"
    # 1. 检查磁盘是否已挂载
    if mount | grep -q "^$DISK "; then
        echo "磁盘 $DISK 已被挂载"
        return 1
    fi
    # 2. 检查文件系统完整性
    fsck -n "$DISK"
    if [ $? -gt 1 ]; then  # 返回码0=正常,1=已修复,>1=错误
        echo "文件系统检查失败"
        return 1
    fi
    # 3. 尝试挂载为只读
    mount -o ro "$DISK" "$MOUNT_POINT"
    if [ $? -eq 0 ]; then
        echo "成功以只读模式挂载"
        return 0
    else
        return 1
    fi
}
# 使用示例
SAFE_MOUNT "/dev/sdb1" "/mnt/data"

执行权限

# 给脚本添加执行权限
chmod +x mount_script.sh
# 以root权限执行
sudo ./mount_script.sh

常见问题处理

#!/bin/bash
# 自动处理常见的挂载问题
fix_mount_issues() {
    local DISK="$1"
    # 检查dmesg中的错误信息
    dmesg | tail -20 | grep -i "$(basename $DISK)"
    # 检查系统日志
    journalctl -xe | grep -i "mount" | tail -10
    # 尝试强制挂载
    mount -o force "$DISK" /mnt
    # 如果ext4文件系统有问题
    fsck.ext4 -f -y "$DISK"
}

这些脚本涵盖了从简单的挂载到完整的分区、格式化和自动挂载的各种场景,根据实际需求选择合适的脚本,并确保在生产环境中充分测试。

抱歉,评论功能暂时关闭!