安全迁移/var或/home到新硬盘分区,核心是“不直接在运行系统上修改已挂载的关键目录”,须停服务、查占用、用rsync -avx同步、以uuid配置fstab,并在单用户或live环境切换挂载。

安全迁移 /var 或 /home 到新硬盘分区,核心是“不直接在运行系统上修改已挂载的关键目录”,必须保证数据完整、权限一致、服务可恢复。关键不在工具多快,而在步骤是否绕开风险点——比如不能在系统运行时卸载 /home、不能用 cp 替代 rsync、不能跳过 fstab 的 UUID 配置。
一、迁移前必须确认的三件事
操作前停掉所有依赖目标目录的服务(如 ssh、web 服务、数据库),并确保无用户登录或进程占用:
- 检查谁在用 /home:
lsof +D /home或fuser -v /home - 检查谁在写 /var:
lsof +D /var/log、systemctl list-units --state=running | grep -E "(nginx|mysql|docker)" - 确认新硬盘分区可用:
lsblk -f查看 /dev/sdb1 是否存在、未挂载、文件系统为 ext4/xfs(推荐与根分区一致)
二、推荐用 rsync 做增量同步(比 cp 更可靠)
不要用 cp -r,它不保留扩展属性、SELinux 上下文(RHEL/CentOS)、硬链接和部分时间戳;rsync -avx 是生产环境首选:
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
- 先临时挂载新分区:
sudo mkdir /mnt/new_home && sudo mount /dev/sdb1 /mnt/new_home - 同步 /home:
sudo rsync -avx --progress --exclude='lost+found' /home/ /mnt/new_home/ - 同步 /var:
sudo rsync -avx --progress --exclude='/var/run' --exclude='/var/lock' --exclude='/var/log/journal' /var/ /mnt/new_var/ - 加
--dry-run先试跑一次,确认路径和排除项无误
三、切换挂载点要分两步走(避免系统崩溃)
不能直接 umount /home 后立刻 mount 新分区——万一出错就无法登录。正确做法是:
- 进入单用户模式(
sudo systemctl rescue)或使用 Live USB 启动,确保 /home 和 /var 完全未被占用 - 备份原 fstab:
sudo cp /etc/fstab /etc/fstab.bak - 用 UUID 替换设备名:
sudo blkid /dev/sdb1,复制输出中的 UUID,写入 fstab:UUID=xxx-xxx /home ext4 defaults 0 2 - 执行
sudo mount -a测试配置是否生效,再df -h /home确认挂载成功
四、验证和收尾不能省略
切换后不是万事大吉,需逐项验证功能是否正常:
- 新建测试用户:
sudo adduser testuser,su 切换并检查家目录是否在新分区、.bashrc/.profile 是否可读 - 重启关键服务:
sudo systemctl restart rsyslog nginx mysql,确认日志能写入 /var/log、网站可访问、数据库可连接 - 检查 SELinux 上下文(如启用):
sudo restorecon -Rv /home或/var - 确认开机自启无报错:
sudo journalctl -b | grep -i "mount\|home\|var"










