CentOS Linux服务器完整迁移方案
这里写目录标题
⚠️注:此方案适用于物理机 / 自建虚拟机 / 非云主机(无镜像功能)–>使用 rsync 全盘同步(推荐,可不停机)或 dd 磁盘克隆
云服务器(阿里云 / 腾讯云 / 华为云等)
利用平台自带自定义镜像功能,最简单、零出错
1.旧服务器创建系统盘 + 数据盘完整镜像
2.使用该镜像直接创建 / 重装新服务器
3.新服务器修改 IP、网关、DNS,重启服务验证
4.核对端口、进程、网站、数据库、定时任务全部正常
当前为远程连接只能通过 SSH 远程连接两台 CentOS 服务器,无法使用物理 U 盘或启动盘。方案是使用 rsync 进行文件级别的全量同步,配合软件包列表同步和引导修复。⚠️注意:此操作有风险,务必先在旧服务器做好完整备份,并在新服务器上保留救援模式或快照
1. 环境
- 旧服务器:192.168.147.139
- 新服务器:192.168.147.142
2. 服务器基本信息
网卡信息
旧服务器
新服务器
3. 整体思路
-
在新服务器上安装与旧服务器相同版本的 CentOS(最小化安装即可,分区建议保持一致)。
-
将旧服务器上的所有文件(除 /proc、/sys、/dev、/tmp 等运行时目录外)通过 rsync 复制到新服务器,覆盖对应位置。
-
在新服务器上重新安装 GRUB 引导、生成新的 fstab(基于新磁盘的 UUID)、调整网络配置为新 IP。
-
重启新服务器,验证所有服务。
4. 操作步骤
4.1 准备工作记录旧服务器关键信息
在旧服务器(192.168.147.139)
先查看基本信息
# 1. 基本信息
cat /etc/redhat-release # CentOS 版本
uname -r # 内核版本
hostnamectl # 主机名
ip addr show # 网卡名和IP
# 2. 磁盘布局
lsblk -f # 磁盘、分区、文件系统类型、UUID
df -h # 挂载点和磁盘用量
cat /etc/fstab # 挂载配置(关键!)
# 3. 有哪些服务在跑
systemctl list-units --type=service --state=running # 正在运行的服务
ss -tlnp # 监听的端口
# 4. 开机自启的服务(迁移后要原样恢复)
systemctl list-unit-files --state=enabled | grep service
# 5. 防火墙规则(CentOS 大概率用 firewalld 或 iptables)
iptables-save > /root/iptables-backup.txt
firewall-cmd --list-all 2>/dev/null
# 6. 数据总量,预估传输时长
du -sh / --exclude=/proc --exclude=/sys --exclude=/dev --exclude=/run --exclude=/tmp 2>/dev/null




执行以下命令,保存输出到本地文件备用。
# 磁盘分区与文件系统信息
lsblk -f
# 已安装的软件包列表
rpm -qa --qf "%{NAME}.%{ARCH}\n" | sort > old_packages.txt
# 网络配置(网卡名、IP、掩码、网关、DNS)
ip addr show
cat /etc/sysconfig/network-scripts/ifcfg-*
# fstab 内容
cat /etc/fstab
# 当前内核版本
uname -r

4.2 在新服务器上安装基础系统
保证新服务器(192.168.147.142)已安装与旧服务器相同版本的 CentOS(如都是 CentOS 7.9)。
分区布局尽量与旧服务器一致(例如 /、/boot、/home 等的大小和位置可以不同,但文件系统类型最好相同)。
确保新服务器的 root 密码已知,SSH 服务正常。
4.3 同步旧服务器的软件包(确保软件环境一致)
在新服务器上,根据 old_packages.txt 安装缺失的软件包(注意处理版本差异):
# 先将 old_packages.txt 复制到新服务器(可将old_packages.txt手动复制过去)
scp root@192.168.147.139:/root/old_packages.txt /root/
# 在新服务器上生成当前已安装的包列表
rpm -qa --qf "%{NAME}.%{ARCH}\n" | sort > new_packages.txt
# 找出旧服务器有而新服务器没有的包
comm -23 old_packages.txt new_packages.txt > missing.txt
# 安装缺失的包(注意:可能因仓库差异导致版本不匹配,需手动处理)
yum install -y $(cat missing.txt) # CentOS 7 用 yum,8+ 用 dnf
# 如果安装慢替换 CentOS7 国内阿里云镜像源
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
yum clean all
yum makecache
# 配置 epel 源
yum install -y epel-release
yum clean all && yum makecache

4.4 使用 rsync 同步所有文件(核心步骤)
rsync前确认哪些服务需要先停掉
systemctl stop mysqld mariadb postgresql httpd nginx tomcat redis 2>/dev/null
在旧服务器上执行以下 rsync 命令,将整个根目录推送到新服务器(注意排除特殊目录):
rsync -avxHAX --numeric-ids --delete --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} / root@192.168.147.142:/

参数说明:
-a:归档模式,保留权限、时间等
-v:详细输出
-x:不跨越文件系统(避免复制 /proc 等)
-H:保留硬链接
-A:保留 ACL
-X:保留扩展属性
--numeric-ids:保留数字化的 uid/gid
--delete:删除新服务器上旧服务器不存在的文件(实现完全同步)
--exclude:排除系统运行时目录
⚠️ 注意:这个命令会覆盖新服务器上的所有文件,请确保新服务器上没有重要数据。建议提前对新服务器做快照或备份。
同步过程可能很长,建议使用 screen 或 tmux 防止断开。
5. 迁移后的配置调整(在新服务器上操作)
5.1 调整 /etc/fstab
由于磁盘的 UUID 可能改变,需要根据新服务器的实际分区重新生成 fstab。
# 查看新磁盘的 UUID
blkid
# 编辑 /etc/fstab,将原来的 UUID 替换为新的 UUID,或者改用设备名(如 /dev/sda1)
vi /etc/fstab
执行以下命令修正(和上面的相同只是详细说明了一下):
# 查看新磁盘的 UUID
blkid
# 备份原 fstab
cp /etc/fstab /etc/fstab.bak
# 查看fstab
cat /etc/fstab
# vi 打开fstab替换UUID
vi /etc/fstab
# 或使用 sed 命名将正确的 UUID 进行替换(使用 sed )
sed -i 's/UUID=<旧uuid>/UUID=<执行 blkid 后/dev/sda1: UUID=xxx>/' /etc/fstab
# 确认修改结果
cat /etc/fstab

额外检查:旧服务器上是否还有其他挂载点(如 /home、/var 等独立分区)?如果有,请把旧服务器的 /etc/fstab 内容复制过来,并相应替换为新磁盘的 UUID。
可以从旧服务器查看
# 旧服务器
ssh root@192.168.147.139 cat /etc/fstab

5.2 重新安装 GRUB 引导
# 系统盘为 /dev/sda(根据实际情况修改)
grub2-install /dev/sda
# 出现done即成功
grub2-mkconfig -o /boot/grub2/grub.cfg

如果提示错误,可能需要先挂载 /boot(已同步过来的文件应该是对的)。可以 chroot 修复:
mount --bind /dev /mnt/dev
mount --bind /proc /mnt/proc
mount --bind /sys /mnt/sys
chroot /mnt
grub2-install /dev/sda
grub2-mkconfig -o /boot/grub2/grub.cfg
exit
5.3 修正网络配置
将新服务器的 IP 改为 192.168.147.143,没有被占用的IP(如果同步后配置文件还是旧的 .139,需要修改)。
# 先查看网卡配置是否为旧的 .139
vi /etc/sysconfig/network-scripts/ifcfg-eth0 # 或你的网卡名
如果是旧的 .139修改以下几项:
OXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static" # 改为 static
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
# IPV6 相关可以注释掉(不需要 IPv6 就注释)
# IPV6INIT="yes"
# IPV6_AUTOCONF="yes"
# IPV6_DEFROUTE="yes"
# IPV6_FAILURE_FATAL="no"
# IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="3b2ed340-cb50-430b-8e0b-c5d4e02ddb23" # 保持不变
DEVICE="ens33"
ONBOOT="yes"
# 新增静态 IP 配置
IPADDR=192.168.147.143
NETMASK=255.255.255.0
GATEWAY=192.168.147.2 # 请根据实际情况确认网关
DNS1=114.114.114.114 # 或者你们公司内部的 DNS
----------------------------------------------------------------------------------------------------
OXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static" # 原来可能是dhcp,改为 static
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
NAME="ens33"
UUID="3b2ed340-cb50-430b-8e0b-c5d4e02ddb23" # 保持不变
DEVICE="ens33"
ONBOOT="yes"
# 新增静态 IP 配置
IPADDR=192.168.147.143
NETMASK=255.255.255.0
GATEWAY=192.168.147.2 # 请根据实际情况确认网关
DNS1=114.114.114.114 # 或者你们公司内部的 DNS

修改网络后如果ssh连接断开了。将连接IP修改为新IP后重连
关于网关:如果不确定旧服务器的网关,可以先在旧服务器上查看:
ssh root@192.168.147.139 "ip route | grep default"

一般会是 192.168.147.1 或 192.168.147.254,请核实后填写
重启网络服务(使配置生效),这里先不要重启网络
systemctl restart network
先测试配置是否正确
ifup ens33
ip addr show ens33 # 检查 IP 是否已设置为 192.168.147.143
5.4 重置系统唯一标识(避免冲突)
# 删除 SSH 主机密钥(重启后自动生成)
rm -f /etc/ssh/ssh*host*\*
# 删除 udev 网络规则(使新网卡配置生效)
rm -f /etc/udev/rules.d/70-persistent-net.rules
# 重置 machine-id
rm -f /etc/machine-id /var/lib/dbus/machine-id
systemd-machine-id-setup # CentOS 7 需安装 systemd 工具

5.5 重新生成 initramfs(如果内核版本有变化)
dracut -f
6. 重启新服务器并验证
reboot
重启后,通过 SSH 连接到新 IP 192.168.147.143,进行以下检查:
网络连通性:ping 192.168.147.139 和 ping baidu.com
关键服务:systemctl status httpd、systemctl status mysqld 等(根据旧服务器业务)
用户数据:ls /home、ls /var/www 等
日志错误:journalctl -xe 或 dmesg | grep -i error
新服务器上的服务正常运行
测试系统正常访问
网关设置错误:检查网关是否可达,可以从旧服务器 ping 新 IP(但迁移完成后旧服务器可能还在线,注意 IP 冲突)。
IP 地址冲突:确保新 IP 192.168.147.143 没有被其他设备占用。可以暂时关闭旧服务器(或拔网线)测试。
SELinux 阻止 ssh:通过 VNC 登录后执行 setenforce 0 临时关闭。
防火墙:执行 systemctl stop firewalld 测试。
你可以在重启前先执行 ping 192.168.147.2 测试网关连通性(但此时 IP 还未改,是 DHCP 分配的旧 IP,无影响)。建议先按步骤完成,有问题再反馈
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐



所有评论(0)