迁移华为云服务器根目录数据,最稳妥的方法是先备份,然后通过rsync将数据同步到新挂载的数据盘,最后修改fstab实现永久挂载,整个过程无需重装系统,数据安全有保障。
华为云服务器根目录空间不足?这份迁移指南请收好
很多人在使用华为云服务器时,发现根目录的空间越来越小,尤其是默认系统盘只有40GB的规格,装完系统、更新几个软件包,再跑几个应用,空间就逼近红线,根目录爆满不仅影响系统运行,还可能导致服务异常,迁移根目录下的数据,释放根目录压力,是常见的运维操作。
根目录空间被谁占用了
在动手迁移之前,先搞清楚根目录下哪些目录占用了大量空间,通过df -h和du -sh可以快速定位。
- 查看整体挂载情况:
df -h,重点关注挂载点的使用率。 - 探查具体目录大小:
du -sh /var /home /opt /usr /tmp 2>/dev/null,按大小排序。 - 注意排除系统虚拟目录:
/proc、/sys、/dev、/run这些不需要排查。
大多数情况下,/var(日志、数据库)、/home(用户数据)、/opt(第三方软件)是吃空间的大户,如果你的应用部署在/usr/local或/data,也得检查。
迁移前必须做的准备工作
备份数据是底线,没有之一。 业内专家指出,根目录迁移一旦操作失误,可能导致系统无法启动,所以无论你多熟练,都必须先备份关键数据。
- 创建快照:在华为云控制台,对系统盘手动创建快照,这是最保险的后悔药,快照费用很低,别省。
- 本地备份:将重要配置文件(如
/etc)打包到临时目录,用tar -czf /tmp/etc_backup.tar.gz /etc。 - 检查目标盘:确保新挂载的数据盘已经格式化(如ext4),并挂载到临时目录,比如
/mnt/data。 - 评估迁移范围:确定要迁移哪些目录,通常建议迁移
、/home
/var、/opt,而不是整个根目录,根目录本身包含系统核心文件,迁移后修改挂载点风险较高。
根目录数据迁移到数据盘的具体步骤
这里以华为云服务器新增一块数据盘(假设为/dev/vdb)为例,将根目录下的/var和/home迁移到数据盘,其他目录同理。
第一步:挂载新数据盘并准备同步
- 登录华为云控制台,找到你的云服务器,点击“磁盘”挂载新数据盘。
- 连接服务器,查看新盘:
lsblk,确认设备名如/dev/vdb。 - 格式化(如果未格式化):
sudo mkfs.ext4 /dev/vdb。 - 创建临时挂载点:
sudo mkdir /mnt/data。 - 挂载:
sudo mount /dev/vdb /mnt/data。 - 在新盘上创建目标目录:
sudo mkdir -p /mnt/data/var /mnt/data/home。
第二步:使用rsync同步数据
rsync比cp更安全,支持断点续传、保留权限,是迁移利器。千万不要直接cp覆盖,容易漏掉隐藏文件和权限。
- 同步
/var:sudo rsync -avz --progress /var/ /mnt/data/var/ - 同步
/home:sudo rsync -avz --progress /home/ /mnt/data/home/
注意源目录末尾的,含义是只复制目录内容,不包含目录本身,同步时间取决于数据量,耐心等待,完成后检查一致性:对比两边文件数量或大小,diff -r /var /mnt/data/var(简单验证)。
第三步:修改fstab实现永久挂载
同步完成后,需要让系统重启后自动挂载新数据盘,并替换原来的目录。
-
备份原fstab:
sudo cp /etc/fstab /etc/fstab.bak。 -
查看新盘的UUID:
sudo blkid /dev/vdb,记录下来。 -
编辑
/etc/fstab:sudo vi /etc/fstab,在末尾添加一行:UUID=你的新盘UUID /mnt/data ext4 defaults 0 0 -
创建用于替换的挂载点:原本的
/var和
/home是系统目录,不能直接卸载,需要在单用户模式或通过mount --bind方式替换,更稳妥的做法是:- 先暂时绑定挂载新位置:
sudo mount --bind /mnt/data/var /var和sudo mount --bind /mnt/data/home /home。 - 但这样重启后会失效,因为fstab里没有对应的绑定挂载条目,所以需要将绑定挂载也写入fstab:
/mnt/data/var /var none bind 0 0 /mnt/data/home /home none bind 0 0 - 注意:先确保
/mnt/data已经通过UUID挂载,然后再绑定子目录。
- 先暂时绑定挂载新位置:
-
测试fstab正确性:
sudo mount -a,没有报错则表示语法正确。 -
重启服务器:
sudo reboot,验证df -h看到/var和/home已经指向新盘。
第四步:迁移后根目录空间释放确认
重启后,根目录下原来的/var和/home目录其实还在,只是被挂载点遮盖了,你可以检查根目录空间是否释放:df -h /,如果看到使用率明显下降,说明迁移成功,原目录下的旧数据可以视情况删除,但建议保留一段时间,确认无误后清理。
- 删除旧数据(谨慎):
sudo rm -rf /var/ /home/,前提是确认新盘数据完整。 - 或者直接卸载原目录设备:由于原系统盘已经不需要这些目录,直接删除即可释放空间。
迁移后的根目录空间优化与注意事项
根目录清理建议
迁移完大目录后,根目录空间通常能释放不少,但还有一些隐藏的占用点需要留意:
- 系统日志:
/var/log下的旧日志,尤其是journal日志,迁移后自动指向新盘,但旧日志仍在原盘。sudo journalctl --vacuum-size=200M可以压缩。 - 快照残留:华为云控制台创建的快照本身不占用服务器空间,但如果你之前做过系统盘快照回滚,可能残留临时文件。
- 软件包缓存:
/var/cache/apt(Ubuntu)或
/var/cache/yum(CentOS),迁移后旧缓存可清:sudo apt clean或sudo yum clean all。
常见问题排查
- 迁移后系统无法启动:多半是fstab写错了,进救援模式恢复备份的fstab即可,事先备份要放在安全位置。
- 新盘挂载后目录权限不对:
rsync同步时加上-a参数会保留权限,但如果是新盘首次挂载,属主可能变成root,需要用chown修正。 - 根目录迁移后空间没变化:确认是否真的迁移了目录,而不是只复制了文件,检查
mount输出,看/var是否挂载到新盘。
Q&A:华为云服务器根目录迁移常见问题
迁移根目录数据会影响正在运行的服务吗?
如果迁移的是/var或/home等非核心系统目录,且步骤正确(先同步,再绑定挂载,最后重启),服务基本不受影响,但迁移过程中,最好先停止向这些目录写入数据的服务(如数据库、Web服务器),避免文件不一致,迁移完成后重启服务即可。
根目录下的数据迁移后还能恢复原样吗?
可以,只要原系统盘上的数据没有被覆盖,删除旧目录前还是以快照或备份形式保留的,恢复时取消绑定挂载,删除fstab中对应的条目,重启后根目录的原始目录就会重新出现,如果已经删除了系统盘上的旧数据,只能通过之前创建的快照回滚系统盘。
华为云服务器根目录扩容和迁移数据哪种方案更省事?
如果根目录空间不够,迁移数据(将大目录挪到数据盘)和直接扩容系统盘是两种不同思路,扩容省事,只需在控制台调整系统盘大小,但需要重启并有一定风险(如扩容后文件系统需要扩展),迁移数据灵活性更高,可以按需转移目录,且不影响根目录本身,对于大多数应用场景,业内共识是迁移数据到数据盘是性价比更高的方案,因为数据盘易于扩展,且与系统盘分离,方便后续重装系统或迁移数据。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/533830.html


