给阿里云 ECS 实例加了数据盘,挂上去却在重启后找不到,这种情况很常见。多数是磁盘没格式化,或者开机自动挂载的配置没写对。下面按实际操作顺序说明阿里云挂载磁盘的步骤,最后讲一个典型案例里的坑。

一、挂载前先确认三件事
开工前在 ECS 控制台核对下面几项:
- 可用区:云盘和实例必须在同一可用区,不一致的话控制台无法挂载。买盘前先看一眼实例所在的可用区,省得返工。
- 磁盘类型:ESSD 云盘性能更稳定,适合数据库这类随机读写多的场景。普通云盘单价低,放日志和备份够用。
- 容量:云盘可以在线扩容,缩容却要重建。第一次购买宁可略大一点,别卡着上限用。
二、在控制台挂载云盘
进入 ECS 控制台,依次选择“存储与快照 > 块存储”,找到目标云盘,点击“更多 > 挂载”,选中实例即可。状态从“待挂载”变为“使用中”,说明挂载已完成。不过这一步只是把磁盘接到实例上,操作系统里还没有可用的文件系统,后面的步骤要在系统内完成。
三、识别磁盘并分区
用 SSH 登录实例,执行 lsblk 查看新磁盘。常见设备名是 /dev/vdb。部分机型可能显示为 nvme 设备名,以 lsblk 的输出为准,后面的命令要替换成实际名称。
容量超过 2TB 时必须使用 GPT 分区表,可以用 parted 一次完成:
parted /dev/vdb mklabel gpt mkpart primary 0% 100%
2TB 以下可以用 fdisk 交互式分区。分区完成后,分区名通常是 /dev/vdb1,再用 lsblk 确认一次。
四、格式化并挂载
为分区创建文件系统,再挂到目标目录:
mkfs.ext4 /dev/vdb1
mkdir -p /data
mount /dev/vdb1 /data
如果要用 XFS,把第一条命令换成 mkfs.xfs /dev/vdb1。
mkfs 会清空分区里的全部数据。执行前先确认这是一块新盘,或者旧数据已经备份。如果这块盘是从其他实例拆下来的,最容易在这里误格式化还在用的数据。挂载后执行 df -h /data,看到对应容量就说明挂载成功。
五、配置开机自动挂载
mount 命令的挂载只在本次开机期间有效,重启后就失效了。要让它自动挂上,需要写进 /etc/fstab。建议用 UUID 代替设备名,因为设备名会随磁盘增减和启动顺序变化。
先取得 UUID:
blkid /dev/vdb1
编辑 /etc/fstab,添加一行:
UUID=你的UUID /data ext4 defaults,nofail 0 2
用 XFS 的话,把 ext4 换成 xfs。nofail 参数必须加上。磁盘故障或缺失时,系统会跳过它继续启动,不会卡在紧急模式。写完后先执行 mount -a,没有报错再重启实例验证。fstab 写错可能导致系统无法正常开机,所以这一步不要省。
六、案例:日志盘挂载异常拖垮订单服务
某电商团队为订单服务新增了一块 500GB ESSD 云盘,挂载到 /data/logs。工程师完成了挂载和格式化,也在 fstab 中写入了 /dev/vdb1,但漏掉了 nofail。一次例行维护后实例重启,新盘的挂载顺序发生了变化,系统等待该设备超时,开机停在紧急模式,订单服务无法启动,故障持续约 40 分钟。
事后团队做了三项调整:
- fstab 中的设备名全部改为 UUID。
- 非系统必需的数据盘统一加上 nofail。
- 每次修改 fstab 后先执行 mount -a,再在测试实例上重启验证。
同一块盘,只要配置方式正确,重启后就能稳定挂载。
七、常见问题排查
- 控制台显示已挂载,lsblk 却看不到磁盘:先确认实例支持该磁盘类型,再重新扫描设备。仍然没有就重启实例。
- mount 报 wrong fs type:分区通常还没有格式化,或文件系统类型和实际不符。用 lsblk -f 查看当前的文件系统类型。
- 扩容后容量没变:控制台扩容只改了云盘大小,系统里的分区和文件系统还要单独扩。先用 growpart 扩分区,再用 resize2fs(ext4)或 xfs_growfs(XFS)扩文件系统。
整个流程的顺序是:先在控制台挂载,再在系统里分区和格式化,最后用 UUID 加 nofail 写入 fstab。每一步都能用命令检查,出了问题也能很快定位到是哪一步。