服务器用久了,系统盘迟早不够用。数据库文件涨得快,日志和备份又堆在一起,磁盘一旦占满,服务随时可能出错。这时最省事的办法是给实例加一块数据盘。阿里云的云盘可以单独创建,需要时挂到ECS上,扩容不用动系统,数据也能和系统分开管理。下面用一个实际案例,把挂载、格式化到开机自动挂载的过程走一遍。

先确认云盘类型和可用区
买盘之前先看类型。常见的有ESSD云盘、SSD云盘和高效云盘。ESSD适合对IOPS和时延要求高的数据库,SSD适合中等负载的业务,高效云盘放日志、归档这类对性能不敏感的数据就够用。另外要确认一点:云盘必须和ECS实例处于同一个可用区,否则挂不上去。这个条件很容易被忽略,最好在下单前就核对。
案例背景
一个做跨境电商的小团队,服务器只有40GB系统盘。订单一多,MySQL数据目录很快占满磁盘,写入频繁报错,运维只能半夜手动清理日志。最后他们新买了一块200GB的ESSD云盘,专门放数据库文件,系统盘只留操作系统和应用代码。下面是他们的具体步骤。
在控制台创建并挂载云盘
- 登录ECS控制台,进入“存储与快照”下的“云盘”页面,点击“创建云盘”。
- 地域和可用区选成和实例一致,容量填200GB,类型选ESSD,付费方式按需选择。
- 创建完成后,在云盘列表中点击“挂载”,选中目标实例。状态变成“使用中”,说明控制台这一步已经完成。
控制台挂载只是第一步。磁盘还要进入操作系统,完成识别、分区、格式化和挂载,系统才能真正用上它。
在Linux里确认新盘
SSH登录实例后执行lsblk,查看磁盘列表。新盘一般显示为/dev/vdb,下面没有分区信息。也可以用fdisk -l核对容量是否和控制台一致。如果列表里找不到新盘,先回到控制台确认挂载成功,再看是否需要重启实例或重新扫描设备。
分区与格式化
200GB以内的数据盘用MBR分区就够了,超过2TB的盘才需要考虑GPT。团队的操作步骤如下:
- 执行fdisk /dev/vdb进入分区界面,依次输入n新建主分区,回车接受默认值,最后输入w写入。
- 执行mkfs.ext4 /dev/vdb1,把分区格式化为ext4文件系统。
- 执行mkdir -p /data创建挂载点。
- 执行mount /dev/vdb1 /data完成挂载,再用df -h确认容量已经生效。
格式化会清空盘上的全部数据。新盘问题不大,但如果是已经用过的盘,动手前一定要再核对一次设备名。
设置开机自动挂载
手动挂载的目录重启后就失效了,所以要写进/etc/fstab。不建议直接用设备名,重启后vdb可能变成别的名字,系统也可能因此起不来。更稳妥的办法是用UUID。先执行blkid /dev/vdb1拿到UUID,再在/etc/fstab末尾追加一行,依次填写UUID=对应的值、挂载点/data、文件系统类型ext4、选项defaults,最后两个字段都填0。改之前先备份原文件。保存后执行mount -a测试,没有报错再重启一次验证。
迁移后的变化与经验
迁移完成后,团队把MySQL的datadir指向/data/mysql,系统盘使用率从98%降到约40%。随后他们配置了每日快照,数据多了一层备份兜底。回头看,他们总结了几条经验:
- 下单前确认云盘和实例在同一可用区,省得挂载时才发现不匹配。
- fstab里用UUID而不是设备名,避免盘符变化导致启动失败。
- 修改fstab前先备份原文件,写错时能快速恢复。
- 挂载完就配置快照策略,误删或故障出现时还有退路。
常见报错怎么查
执行mount时如果提示“special device does not exist”,多半是设备名写错,或者云盘还没挂到实例上。出现“wrong fs type”,一般是分区还没格式化。扩容后容量没变,先检查分区表是否已经更新,必要时用growpart扩展分区,再用resize2fs扩展文件系统。排查时先看dmesg和/var/log/messages的输出,通常能很快缩小范围。
数据增长快的业务,最好提前规划数据盘。等磁盘已经占满再动手,既着急,也容易误操作。