使用数据盘承接 Linux 系统盘业务数据
操作场景
系统盘除了承载操作系统,有时也会被业务进程用作数据写入目录。随着业务数据持续增长,系统盘空间逐渐不足,可能影响系统稳定性。将业务数据迁移至独立数据盘,既能释放系统盘空间,又能实现系统与数据的分离管理,便于后续对数据盘独立扩容和备份。
本文介绍如何将系统盘上特定目录的业务数据迁移至数据盘并配置开机自动挂载,帮助您在业务低谷期完成数据的平滑迁移,缓解系统盘空间压力。
此操作涉及系统目录下数据的迁移,可能短暂影响业务系统运行。建议在业务低谷期执行,并提前创建系统盘快照作为数据备份。如果条件允许,建议直接扩容系统盘。
操作前准备
在开始迁移前,请确认以下事项:
操作步骤
以下操作以将 /appdata 目录下的业务数据迁移至数据盘 /dev/sdb1 为例,请根据实际情况替换目录名称和设备名称。
- 迁移数据。
将数据盘挂载到一个临时目录,然后将业务数据复制过去。
# 创建临时挂载目录并挂载数据盘 mkdir /mnt/temp mount /dev/sdb1 /mnt/temp # 使用 rsync 复制业务数据(保留权限、属主、时间戳等属性) rsync -avp /appdata/ /mnt/temp/ # 确认数据复制完整 du -sh /appdata/ /mnt/temp/
/appdata/ 末尾的斜杠表示复制目录内容而非目录本身,确保数据直接复制到 /mnt/temp/ 下而不是 /mnt/temp/appdata/。
图2 确保数据复制完整且路径正确
- 切换挂载点。
数据复制完成后,需要将数据盘从临时目录切换到业务目录。
此过程会短暂影响业务访问,建议先停止相关业务服务。
# 卸载数据盘的临时挂载 umount /mnt/temp # 将原业务目录重命名,作为短期备份 mv /appdata /appdata_bak # 重新创建业务目录并挂载数据盘 mkdir /appdata mount /dev/sdb1 /appdata # 清理临时目录 rmdir /mnt/temp # 确认挂载状态和数据完整性 df -h /appdata ls -l /appdata/
图3 数据盘已挂载至业务目录
- 配置开机自动挂载。
云服务器重启后数据盘不会自动挂载,需将挂载信息写入 /etc/fstab。建议使用 UUID 方式配置,避免分区名变化导致挂载失败:
# 查看数据盘分区的 UUID blkid /dev/sdb1 # 将挂载信息写入 fstab(请替换为实际的 UUID) echo 'UUID=a1b2c3d4-5678-90ef-... /appdata ext4 defaults 0 2' >> /etc/fstab # 验证配置是否正确 mount -a
使用 UUID 而非分区名(如 /dev/sdb1)配置 fstab,是因为分区名在数据盘的挂载顺序变更后可能发生变化,而 UUID 是数据盘的唯一标识,不会受到挂载顺序变更的影响。
- 验证与回滚。
迁移完成后,建议执行以下验证步骤确认业务正常:
# 确认数据盘已挂载到业务目录 df -h /appdata # 确认业务数据完整可访问 ls -l /appdata/ cat /appdata/readme.txt
图4 确认数据迁移完整
验证通过后,启动业务服务并观察运行状态。确认一切正常后,可删除原目录备份以释放系统盘空间:
# 删除原目录备份文件 rm -rf /appdata_bak
如果操作过程中出现异常,可通过以下两种方式恢复:
- 卸载数据盘并还原原目录:
# 卸载数据盘 umount /appdata # 删除空目录 rmdir /appdata # 将备份目录还原为业务目录 mv /appdata_bak /appdata # 重启业务服务
- 如果原目录数据已损坏或上述方式无法恢复,可在 EVS 控制台使用操作前创建的系统盘快照回滚系统盘,具体参考使用快照回滚数据至云硬盘,将系统盘恢复到迁移前的状态。回滚前请确保数据盘已卸载,避免回滚过程中产生冲突。
- 卸载数据盘并还原原目录: