实用脚本能批量挂载吗?

wen 实用脚本 11

本文目录导读:

实用脚本能批量挂载吗?

  1. 场景一:批量挂载未格式化、未分区的新数据盘(如云服务器附加了多块磁盘)
  2. 场景二:批量挂载网络存储(NFS / CIFS)
  3. 场景三:批量挂载云盘(如阿里云、腾讯云、AWS的弹性云盘)
  4. 核心注意事项(非常重要!)

实用脚本能否批量挂载”的问题,答案是:完全可以,而且这正是脚本发挥优势的地方,批量挂载通常用于管理云服务器的数据盘、网络存储(如NFS、SMB)或虚拟机的磁盘。

问题中的“实用脚本”比较宽泛,我将根据几种最常见的场景,给出对应的批量挂载脚本示例核心注意事项

批量挂载未格式化、未分区的新数据盘(如云服务器附加了多块磁盘)

这是最经典的场景,你需要先对磁盘进行分区、格式化,然后再挂载。

脚本思路:

  1. 找出所有未使用的磁盘(如 /dev/vdb, /dev/vdc)。
  2. 对每个磁盘执行 fdiskparted 分区。
  3. 使用 mkfs.ext4 格式化。
  4. 创建挂载目录(如 /data1, /data2)。
  5. 写入 /etc/fstab 实现开机自动挂载。

脚本示例 (bash):

#!/bin/bash
# 注意:此脚本会操作所有 未分区 的磁盘,请谨慎使用!
# 建议先在测试环境运行,该脚本假设磁盘设备名为 /dev/vdX 或 /dev/sdX
# 让脚本自动回答fdisk的问题
echo -e "n\np\n1\n\n\nw" | fdisk /dev/vdb
# 更安全的做法是遍历并自动处理
for disk in /dev/vd[b-z] /dev/sd[b-z]; do
  # 检查磁盘是否存在且未被分区(没有数字结尾的设备名)
  if [ -b "$disk" ] && ! [ -b "${disk}1" ]; then
    echo "正在处理磁盘: $disk"
    # 1. 使用 parted 进行GPT分区(比fdisk更易脚本化)
    parted -s "$disk" mklabel gpt
    parted -s "$disk" mkpart primary ext4 0% 100%
    # 2. 格式化
    mkfs.ext4 -F "${disk}1"
    # 3. 创建挂载点
    mount_point="/mnt/data_$(basename $disk)"
    mkdir -p "$mount_point"
    # 4. 获取UUID用于fstab
    uuid=$(blkid -s UUID -o value "${disk}1")
    # 5. 挂载并写入fstab
    mount "${disk}1" "$mount_point"
    echo "UUID=$uuid  $mount_point  ext4  defaults  0  2" >> /etc/fstab
    echo "磁盘 $disk 已挂载到 $mount_point"
  fi
done

批量挂载网络存储(NFS / CIFS)

如果你有大量服务器需要挂载同一个NAS存储,或者一台服务器需要挂载多个远程共享。

脚本思路:

  1. 定义服务器列表或共享列表。
  2. 安装必要的客户端(nfs-utils, cifs-utils)。
  3. 循环挂载。

脚本示例:批量从多台远程NAS挂载NFS

#!/bin/bash
# 远程服务器列表(也可以是从文件读取)
REMOTE_SERVERS=("192.168.1.100" "192.168.1.200")
REMOTE_PATH="/shared/data"
LOCAL_BASE="/mnt/nfs"
for server in "${REMOTE_SERVERS[@]}"; do
    local_path="${LOCAL_BASE}/${server}"
    mkdir -p "$local_path"
    # 检查是否已挂载
    if mountpoint -q "$local_path"; then
        echo "$local_path 已挂载,跳过"
    else
        echo "正在挂载 $server:$REMOTE_PATH 到 $local_path"
        mount -t nfs "${server}:${REMOTE_PATH}" "$local_path"
        # 写入fstab(可选,需要根据实际协议版本调整)
        # echo "${server}:${REMOTE_PATH} $local_path nfs defaults 0 0" >> /etc/fstab
    fi
done

批量挂载云盘(如阿里云、腾讯云、AWS的弹性云盘)

云环境通常有API或CLI工具,可以写脚本实现“先挂载到实例,再在操作系统内挂载”。

简化思路:

  1. 使用云服务商CLI(如 aliyun ecs attach-disk)将磁盘挂载到指定实例。
  2. 在目标实例上运行场景一中的脚本来处理分区和文件系统。

核心注意事项(非常重要!)

  1. UUID 优于设备名
    • 不要用 /dev/sdb 这样的名字写入 /etc/fstab,因为系统重启后设备名可能变化(变成 /dev/sdc)。
    • 一定要使用 blkid 命令获取 UUID 或 PARTUUID
  2. 唯一性检查
    • 挂载前先检查该设备是否已经被挂载(mount | grep /dev/xxx)。
    • 检查挂载点目录是否为空。
    • 检查文件系统是否有错误(使用 fsck)。
  3. 风险提示
    • 格式化会清空数据! 批量脚本如果写错目标(比如误选了系统盘),会导致服务器崩溃,建议先在单台服务器上手动测试脚本逻辑。
    • 脚本中的 fdisk 自动化(echo -e "n\np\n1\n\n\nw")非常脆弱,不同操作系统版本可能分区交互不同,推荐使用 parted 或用 sgdisk(GPT专用)。
  4. 操作系统差异
    • Linux:上述脚本通用。
    • Windows:可以用 PowerShell 脚本,通过 Get-DiskInitialize-DiskNew-PartitionFormat-VolumeMount-DiskImage 等命令实现批量挂载。

可以批量挂载,脚本是理想的工具。 关键在于:

  • 确定挂载对象:是本地新盘、远程NFS、还是云盘。
  • 确定挂载方式:手动写入fstab还是通过云API。
  • 编写健壮脚本:必须包含错误处理唯一性检查UUID引用

如果你能提供更具体的场景(是云服务器的数据盘?还是公司的NAS?操作系统是CentOS还是Ubuntu?),我可以给你一个更精确的“即用型”脚本。

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