本文目录导读:

- 场景一:批量挂载未格式化、未分区的新数据盘(如云服务器附加了多块磁盘)
- 场景二:批量挂载网络存储(NFS / CIFS)
- 场景三:批量挂载云盘(如阿里云、腾讯云、AWS的弹性云盘)
- 核心注意事项(非常重要!)
实用脚本能否批量挂载”的问题,答案是:完全可以,而且这正是脚本发挥优势的地方,批量挂载通常用于管理云服务器的数据盘、网络存储(如NFS、SMB)或虚拟机的磁盘。
问题中的“实用脚本”比较宽泛,我将根据几种最常见的场景,给出对应的批量挂载脚本示例和核心注意事项。
批量挂载未格式化、未分区的新数据盘(如云服务器附加了多块磁盘)
这是最经典的场景,你需要先对磁盘进行分区、格式化,然后再挂载。
脚本思路:
- 找出所有未使用的磁盘(如
/dev/vdb,/dev/vdc)。 - 对每个磁盘执行
fdisk或parted分区。 - 使用
mkfs.ext4格式化。 - 创建挂载目录(如
/data1,/data2)。 - 写入
/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存储,或者一台服务器需要挂载多个远程共享。
脚本思路:
- 定义服务器列表或共享列表。
- 安装必要的客户端(
nfs-utils,cifs-utils)。 - 循环挂载。
脚本示例:批量从多台远程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工具,可以写脚本实现“先挂载到实例,再在操作系统内挂载”。
简化思路:
- 使用云服务商CLI(如
aliyun ecs attach-disk)将磁盘挂载到指定实例。 - 在目标实例上运行场景一中的脚本来处理分区和文件系统。
核心注意事项(非常重要!)
- UUID 优于设备名:
- 不要用
/dev/sdb这样的名字写入/etc/fstab,因为系统重启后设备名可能变化(变成/dev/sdc)。 - 一定要使用
blkid命令获取 UUID 或 PARTUUID。
- 不要用
- 唯一性检查:
- 挂载前先检查该设备是否已经被挂载(
mount | grep /dev/xxx)。 - 检查挂载点目录是否为空。
- 检查文件系统是否有错误(使用
fsck)。
- 挂载前先检查该设备是否已经被挂载(
- 风险提示:
- 格式化会清空数据! 批量脚本如果写错目标(比如误选了系统盘),会导致服务器崩溃,建议先在单台服务器上手动测试脚本逻辑。
- 脚本中的
fdisk自动化(echo -e "n\np\n1\n\n\nw")非常脆弱,不同操作系统版本可能分区交互不同,推荐使用parted或用sgdisk(GPT专用)。
- 操作系统差异:
- Linux:上述脚本通用。
- Windows:可以用 PowerShell 脚本,通过
Get-Disk、Initialize-Disk、New-Partition、Format-Volume、Mount-DiskImage等命令实现批量挂载。
可以批量挂载,脚本是理想的工具。 关键在于:
- 确定挂载对象:是本地新盘、远程NFS、还是云盘。
- 确定挂载方式:手动写入fstab还是通过云API。
- 编写健壮脚本:必须包含错误处理、唯一性检查和UUID引用。
如果你能提供更具体的场景(是云服务器的数据盘?还是公司的NAS?操作系统是CentOS还是Ubuntu?),我可以给你一个更精确的“即用型”脚本。