站点运行一段时间后,系统盘常被日志、数据库或上传文件占满,服务随之报错。这时给服务器加一块数据盘通常是最快的办法。下面以阿里云ECS为例,说明阿里云添加硬盘后,从创建云盘到开机自动挂载的完整步骤。

动手前先确认两件事
第一件是用途。如果只放静态文件或备份,普通的高效云盘够用。要跑MySQL或承受高并发读写,建议选ESSD云盘,IOPS和延迟更稳定。第二件是位置。云盘必须和ECS实例在同一地域、同一可用区,否则无法挂载。创建前核对一遍,省得返工。
云盘独立计费,创建后即使没挂载也照常扣费。测试用的盘用完要及时释放。服务器上已有重要数据时,操作前先做一份快照,误操作时能回滚。
在控制台创建并挂载云盘
登录阿里云控制台,进入云服务器ECS,在左侧菜单“存储与快照”下找到“块存储”,点击“创建云盘”。选择付费类型、地域和可用区,容量按实际需要填,比如200GB。创建完成后,在云盘列表里找到它,点击“挂载”,选择目标ECS实例。
挂载完成后,控制台显示“使用中”,但系统里还看不到可用分区,需要登录服务器继续处理。
系统内分区与格式化(Linux)
用SSH登录服务器,执行lsblk查看磁盘。新挂载的数据盘一般显示为/dev/vdb,没有挂载点,也没有分区。
举个例子。某站点的系统盘只有80GB,运行一年后日志和上传目录已经占了约八成。于是新挂载一块200GB的ESSD云盘,专门存放网站上传文件和数据库目录。
格式化之前要再确认一次设备名。mkfs会清空目标盘上的全部内容,如果把系统盘当成新盘格式化,服务器会直接不可用。执行lsblk -f,确认目标盘没有文件系统,也没有挂载点,再继续下一步。
确认设备名后,按下面的步骤操作:
- 用parted创建GPT分区表并划分整块分区:执行 parted -s /dev/vdb mklabel gpt,再执行 parted -s /dev/vdb mkpart primary ext4 0% 100%。
- 格式化分区:执行 mkfs.ext4 /dev/vdb1。数据量大时也可以选xfs,两者都成熟可靠。
- 创建挂载点并挂载:执行 mkdir /data,然后执行 mount /dev/vdb1 /data。
- 用df -h确认新增容量已经可用。
ext4分区根目录下会出现lost+found目录,这是正常现象,不要删除。
到这一步,硬盘已经能用,但重启后挂载会失效,还需要配置自动挂载。
配置开机自动挂载
直接在fstab里写/dev/vdb1不够稳妥,因为设备顺序在重启后可能变化。使用UUID更可靠。执行 blkid /dev/vdb1,记下输出中的UUID值。
编辑 /etc/fstab,追加一行,包含UUID、挂载点、文件系统类型和挂载参数。挂载参数建议用defaults,nofail。nofail的作用是:这块盘即使出现异常,系统也能正常启动,不会因为数据盘问题卡在开机阶段。
编辑fstab属于高风险操作,写错可能导致系统无法正常启动。动手前先备份原文件,例如执行 cp /etc/fstab /etc/fstab.bak。编辑时保持当前SSH会话不退出,出问题时还能在这个会话里回滚。
写完后先执行 mount -a。没有报错,说明配置无误,再重启一次服务器验证。重启后用df -h确认挂载仍然有效。
迁移数据前的准备
挂载成功不等于业务能直接使用,目录迁移要按顺序做。前面的例子里,上传目录迁到/data/uploads,MySQL数据目录指向新盘。迁移前先停止服务,避免写入过程中出现数据不一致。然后用rsync同步数据,同步完成后比对文件数量和总容量,确认无误,再修改配置文件并启动服务。
迁移后还要检查目录的属主和权限。新盘上的目录默认属于root,如果运行服务的用户没有写权限,上传功能会直接失败。
该例中,系统盘使用率从80%降到35%左右,日志轮转恢复正常,服务报错基本消失。整个过程大约两小时,大部分时间花在数据迁移和校验上。
已有云盘扩容的区别
如果只是现有云盘容量不够,不必新增硬盘,直接在控制台对云盘扩容即可。扩容后,系统里还要做两步:先用growpart扩展分区,再根据文件系统类型执行resize2fs(ext4)或xfs_growfs(xfs)。扩容只能变大,不能缩小,操作前同样建议先做快照。
小结
阿里云添加硬盘的流程是:控制台创建云盘并挂载,系统内分区和格式化,然后用UUID写入fstab实现自动挂载。盘型和地域一开始选对,操作前做好备份,大部分问题都能避开。如果业务要长期运行,最好从一开始就把日志和业务数据放到独立的数据盘,后期维护会轻松很多。