在 ESXi 上部署 CentOS 虚拟机时,系统盘与数据盘分离是生产环境的标准做法。本文记录从 ESXi 创建虚拟机、CentOS 分区挂载,到 MongoDB 数据迁移的完整流程,可直接复制执行。
一、为什么不要一次性给 2.2TB
很多新手在 ESXi 创建虚拟机时,会把系统盘和数据盘合在一块大硬盘里(比如系统需要 200G,数据需要 2T,直接创建一个 2.2T 的盘)。这在生产环境会带来几个问题:
| 问题 | 说明 |
|---|---|
| 管理混乱 | 单块大盘做系统,后续分区麻烦,重装系统时数据风险高 |
| 备份困难 | 系统盘和数据盘混在一起,无法单独对系统或数据做快照/备份 |
| 迁移不灵活 | 数据盘独立后,可以单独拆挂到其他虚拟机 |
| 快照膨胀 | ESXi 快照针对整盘,数据盘变动会导致快照文件急剧膨胀 |
正确做法: 创建虚拟机时只给系统盘(如 200GB),创建完成后再单独挂载一块数据盘(如 2TB)。
二、ESXi 中创建虚拟机的正确姿势
- 创建 CentOS 虚拟机时,硬盘只分配 200GB(系统盘)
- 磁盘置备方式建议选 精简置备(Thin Provision) 或 厚置备延迟置零
- 虚拟机创建完成后,关闭虚拟机(或保持运行,CentOS 7/8/9 支持热插拔)
- 右键虚拟机 → 编辑设置 → 添加新设备 → 硬盘
- 配置数据盘:
- 大小:2TB(2048GB)
- 虚拟设备节点:
SCSI(0:1)或SATA(0:1),确保和系统盘分开
- 保存,开机
三、CentOS 中挂载新硬盘
开机后先确认新盘已被识别:
lsblk
你会看到类似输出:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 200G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 199G 0 part
├─centos-root 253:0 0 50G 0 lvm /
├─centos-swap 253:1 0 15.8G 0 lvm [SWAP]
└─centos-home 253:2 0 133.2G 0 lvm /home
sdb 8:16 0 2T 0 disk <-- 新数据盘
sr0 11:0 1 4.4G 0 rom
3.1 创建 GPT 分区
parted /dev/sdb mklabel gpt
parted /dev/sdb mkpart primary xfs 0% 100%
3.2 格式化为 XFS
mkfs.xfs /dev/sdb1
3.3 创建挂载点并挂载
mkdir -p /data
mount -o noatime /dev/sdb1 /data
noatime参数:禁止记录文件访问时间,减少不必要的磁盘 IO,对数据库场景非常友好。
3.4 写入 fstab 实现开机自动挂载
echo '/dev/sdb1 /data xfs noatime 0 0' >> /etc/fstab
⚠️ 注意: 如果之前执行过 echo '/dev/sdb1 /data xfs defaults 0 0' >> /etc/fstab,现在又追加了一行 noatime,会导致 fstab 中有重复条目。去重方法:
awk '!seen[$0]++' /etc/fstab > /etc/fstab.tmp && mv /etc/fstab.tmp /etc/fstab
四、MongoDB 生产环境迁移与优化
如果这台虚拟机用于运行 MongoDB,建议将数据目录迁移到独立的 /data 盘。
4.1 停止 MongoDB
systemctl stop mongod
4.2 迁移数据
mkdir -p /data/mongodb
cp -a /var/lib/mongo/* /data/mongodb/
4.3 修改 MongoDB 配置
sed -i 's|dbPath: /var/lib/mongo|dbPath: /data/mongodb|' /etc/mongod.conf
4.4 修正权限(关键!)
MongoDB 对数据目录权限极其敏感,必须确保 mongod 用户有完全控制权:
chown -R mongod:mongod /data/mongodb
chmod 755 /data/mongodb
4.5 重启并验证
systemctl start mongod
systemctl status mongod
五、验证清单
执行完以上步骤后,逐项确认:
| 检查项 | 命令 | 预期结果 |
|---|---|---|
| 分区是否存在 | lsblk 或 fdisk -l /dev/sdb |
看到sdb1 |
| 文件系统类型 | blkid /dev/sdb1 |
TYPE="xfs" |
| 挂载状态 | mount | grep sdb1 |
包含(rw,noatime,...) |
| 磁盘空间 | df -h /data |
显示 2TB 可用 |
| fstab 是否正确 | cat /etc/fstab |
一行/dev/sdb1 且无重复 |
| MongoDB 数据路径 | cat /etc/mongod.conf | grep dbPath |
/data/mongodb |
| MongoDB 权限 | ls -ld /data/mongodb |
mongod mongod |
| 重启后是否正常 | reboot 后 df -h /data |
自动挂载成功 |
六、常见问题汇总
Q1: ESXi 提示"许可证不足,无法完成该操作"
ESXi 评估期(60 天)到期后,无法开启任何虚拟机。
解决: 前往 VMware 官网申请免费许可证,在 管理 → 许可 → 分配许可证 中填入密钥即可。
Q2: sed: 没有输入文件
sed -i 命令必须指定文件路径。正确写法:
sed -i 's|defaults|noatime|' /etc/fstab
Q3: MongoDB 启动失败,日志报 Permission denied
99% 是 /data/mongodb 目录权限问题。检查:
ls -ld /data/mongodb
ps -ef | grep mongod # 确认运行用户
Q4: 可以在线添加硬盘吗?
可以。CentOS 7/8/9 支持 SCSI/SATA 硬盘热插拔。添加后执行:
echo '- - -' > /sys/class/scsi_host/host0/scan
lsblk
即可识别新盘,无需重启。
七、总结
| 场景 | 推荐做法 |
|---|---|
| ESXi 创建虚拟机 | 系统盘单独 200GB,数据盘后续单独挂载 |
| CentOS 分区 | GPT + XFS,noatime 挂载 |
| MongoDB 数据 | 迁移到独立数据盘,严格设置mongod:mongod 权限 |
| 长期维护 | 系统盘和数据盘分离,备份、扩容、迁移都更灵活 |
这套方案在单机和集群环境都适用,核心原则就是:系统与数据分离,权限最小化,挂载参数优化。