【脚本】Linux磁盘目录挂载脚本(不分区)

以下是一个不带分区,直接挂载整个磁盘到指定目录的脚本。该脚本会检查磁盘是否已挂载,自动创建文件系统(可选),并配置开机自动挂载:

#!/bin/bash

# 磁盘直接挂载脚本(不分区)
# 使用方法: sudo ./mount_disk_raw.sh /dev/sdb /mnt/data ext4 [format]

# 参数检查
if [ $# -lt 2 ]; then
    echo "用法: $0 <磁盘设备> <挂载点> [文件系统类型=ext4] [是否格式化=yes/no]"
    exit 1
fi

DISK="$1"
MOUNT_POINT="$2"
FS_TYPE="${3:-ext4}"  # 默认使用ext4
FORMAT="${4:-yes}"    # 默认格式化磁盘

LOG_FILE="/var/log/disk_mount_raw.log"

# 日志函数
log() {
    local message="[$(date '+%Y-%m-%d %H:%M:%S')] $1"
    echo "$message"
    echo "$message" >> "$LOG_FILE"
}

# 检查是否为root用户
if [ "$(id -u)" -ne 0 ]; then
    log "错误: 请使用root权限运行此脚本"
    exit 1
fi

# 检查磁盘设备是否存在
if [ ! -b "$DISK" ]; then
    log "错误: 磁盘设备 $DISK 不存在"
    exit 1
fi

# 检查磁盘是否已挂载
if mount | grep -q "$DISK"; then
    log "警告: 磁盘 $DISK 已挂载"
    exit 0
fi

# 创建挂载点目录
if [ ! -d "$MOUNT_POINT" ]; then
    log "创建挂载点目录: $MOUNT_POINT"
    mkdir -p "$MOUNT_POINT"
    if [ $? -ne 0 ]; then
        log "错误: 无法创建挂载点目录"
        exit 1
    fi
fi

# 格式化磁盘(如果需要)
if [ "$FORMAT" = "yes" ]; then
    log "开始格式化磁盘 $DISK$FS_TYPE 文件系统..."
    case "$FS_TYPE" in
        ext4)
            mkfs.ext4 -F "$DISK"
            ;;
        xfs)
            mkfs.xfs -f "$DISK"
            ;;
        btrfs)
            mkfs.btrfs -f "$DISK"
            ;;
        *)
            log "错误: 不支持的文件系统类型: $FS_TYPE"
            exit 1
            ;;
    esac
    
    if [ $? -ne 0 ]; then
        log "错误: 格式化磁盘失败"
        exit 1
    fi
    log "磁盘格式化完成"
else
    log "跳过格式化步骤"
fi

# 获取磁盘UUID
UUID=$(blkid -s UUID -o value "$DISK")
if [ -z "$UUID" ]; then
    log "警告: 无法获取磁盘UUID,将使用设备路径挂载"
    UUID="$DISK"
else
    log "获取到磁盘UUID: $UUID"
fi

# 挂载磁盘
log "尝试挂载 $DISK$MOUNT_POINT"
mount -t "$FS_TYPE" "$DISK" "$MOUNT_POINT"

if [ $? -eq 0 ]; then
    log "挂载成功: $DISK -> $MOUNT_POINT"
    
    # 添加到fstab实现开机自动挂载
    FSTAB_ENTRY="UUID=$UUID  $MOUNT_POINT  $FS_TYPE  defaults  0 0"
    
    if ! grep -q "$MOUNT_POINT" /etc/fstab; then
        echo "$FSTAB_ENTRY" >> /etc/fstab
        log "已添加到 /etc/fstab"
    else
        log "警告: /etc/fstab 中已存在 $MOUNT_POINT 的挂载记录"
        log "请手动检查 /etc/fstab 是否需要更新"
    fi
else
    log "错误: 挂载失败"
    exit 1
fi

# 验证挂载
log "挂载结果:"
df -h | grep "$MOUNT_POINT"

使用说明:

  1. 基本用法(格式化并挂载):

    sudo ./mount_disk_raw.sh /dev/sdb /mnt/data ext4
    
  2. 不格式化直接挂载(适用于已格式化的磁盘):

    sudo ./mount_disk_raw.sh /dev/sdb /mnt/data ext4 no
    
  3. 指定其他文件系统(如XFS):

    sudo ./mount_disk_raw.sh /dev/sdb /mnt/data xfs
    

脚本功能:

  • 自动检测磁盘是否存在和已挂载
  • 支持多种文件系统(ext4、xfs、btrfs)
  • 可选格式化磁盘
  • 使用UUID而非设备路径配置/etc/fstab(更可靠)
  • 详细的日志记录(/var/log/disk_mount_raw.log)
  • 完整的错误处理

注意事项:

  • 数据安全:格式化会清除磁盘上的所有数据,请确保已备份重要数据
  • 权限要求:必须使用root权限运行
  • 生产环境:建议先在测试环境验证脚本行为
  • 文件系统选择:根据实际需求选择ext4或XFS(参考上一轮对话的对比)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值