跳转到内容

迁移后检查清单

完成从 CentOS 到 AlmaLinux 或 Rocky Linux 的迁移后,按照以下清单逐项验证,确保系统正常工作。

建议: 将本页加入书签,迁移后逐项核对。每完成一项检查后在自己的文档中标记为已完成。

首先确认系统已成功切换到目标发行版。

检查 os-release
$ cat /etc/os-release

确认 NAMEID 字段显示正确的发行版名称(AlmaLinuxRocky Linux)。

检查 redhat-release
$ cat /etc/redhat-release
确认发行版标识包
$ rpm -qa | grep -E '(almalinux|rocky)-release'
确认没有残留的 CentOS 标识包
$ rpm -qa | grep centos-release

如果仍有 CentOS 包残留:

清除残留的 CentOS 包
$ sudo dnf remove centos-release centos-logos centos-indexhtml 2>/dev/null
$ sudo dnf distro-sync -y
查看当前运行的内核
$ uname -r
查看所有已安装的内核
$ rpm -qa kernel-core | sort
确认 GRUB 默认内核
$ sudo grubby --default-kernel

确保运行的内核来自目标发行版。如果仍在使用旧内核:

安装最新内核并设为默认
$ sudo dnf install -y kernel
$ sudo grubby --set-default /boot/vmlinuz-$(rpm -q kernel-core --qf '%{VERSION}-%{RELEASE}.%{ARCH}\n' | sort -V | tail -1)
列出所有失败的服务
$ systemctl list-units --type=service --state=failed

如果有服务失败,逐一排查:

查看失败服务的详情
$ systemctl status <服务名>
$ journalctl -u <服务名> -n 50 --no-pager
对比迁移前的服务列表
$ systemctl list-units --type=service --state=running > ~/services-after-migration.txt
$ diff ~/services-before-migration.txt ~/services-after-migration.txt
检查 SSH 服务
$ systemctl is-active sshd
检查 cron 定时任务
$ systemctl is-active crond
检查系统日志服务
$ systemctl is-active rsyslog
检查防火墙服务
$ systemctl is-active firewalld
列出所有已启用的仓库
$ dnf repolist --enabled

确认仓库指向正确的发行版。不应该有残留的 CentOS 仓库。

检查是否有残留的 CentOS 仓库文件
$ ls /etc/yum.repos.d/ | grep -i centos
测试仓库可用性
$ sudo dnf check-update
确认 EPEL 仓库正常(如需要)
$ dnf repolist | grep epel

如果 EPEL 不存在但需要使用:

安装 EPEL
$ sudo dnf install -y epel-release
检查 Nginx 状态(如适用)
$ systemctl is-active nginx && curl -s -o /dev/null -w "%{http_code}" http://localhost/
检查 Apache/httpd 状态(如适用)
$ systemctl is-active httpd && curl -s -o /dev/null -w "%{http_code}" http://localhost/
检查 MySQL/MariaDB(如适用)
$ systemctl is-active mariadb || systemctl is-active mysqld
$ mysqladmin ping 2>/dev/null && echo "数据库连接正常"
检查 PostgreSQL(如适用)
$ systemctl is-active postgresql
$ sudo -u postgres psql -c "SELECT version();" 2>/dev/null
检查 PHP 版本(如适用)
$ php -v 2>/dev/null
检查 Python 版本
$ python3 --version
检查 Java 版本(如适用)
$ java -version 2>/dev/null

对于自建应用程序,执行以下检查:

检查应用端口是否在监听
$ sudo ss -tlnp | grep <应用端口>
测试应用 HTTP 接口(如适用)
$ curl -s http://localhost:<端口>/health
检查 SELinux 当前模式
$ getenforce

正常情况下应返回 Enforcing。如果返回 DisabledPermissive,需要确认这是否是预期的配置。

查看 SELinux 配置文件
$ cat /etc/selinux/config
检查是否有 SELinux 拒绝记录
$ sudo ausearch -m avc -ts recent 2>/dev/null | head -30

迁移后某些文件的 SELinux 标签可能不正确:

重新标记文件系统(如有 SELinux 问题)
$ sudo fixfiles -F onboot

这会在下次重启时重新标记整个文件系统。如果不想重启:

立即重新标记(可能耗时较长)
$ sudo restorecon -Rv /etc /var /home
查看防火墙状态
$ sudo firewall-cmd --state
列出所有已放行的服务和端口
$ sudo firewall-cmd --list-all
确认关键端口已放行
$ sudo firewall-cmd --query-port=22/tcp # SSH
$ sudo firewall-cmd --query-port=80/tcp # HTTP
$ sudo firewall-cmd --query-port=443/tcp # HTTPS

对比迁移前的防火墙配置:

列出所有区域配置
$ sudo firewall-cmd --list-all-zones | grep -A 10 "active"
检查网络接口状态
$ ip addr show
检查默认路由
$ ip route show default
检查 DNS 配置
$ cat /etc/resolv.conf
测试 DNS 解析
$ dig +short google.com
测试外网连通性
$ ping -c 3 8.8.8.8
检查 NetworkManager 连接
$ nmcli connection show
确认主机名正确
$ hostnamectl
检查 root 的 crontab
$ sudo crontab -l
检查系统级定时任务
$ ls -la /etc/cron.d/
$ ls -la /etc/cron.daily/
$ ls -la /etc/cron.weekly/
检查 systemd 定时器
$ systemctl list-timers --all

确认迁移后备份系统仍然正常工作。

检查备份工具是否可用
$ which rsync && rsync --version | head -1
如果使用 LVM 快照,确认快照状态
$ sudo lvs

重要提示: 迁移成功并验证无误后,建议立即创建一份新的完整备份作为新的基线。

创建迁移后的包列表快照
$ rpm -qa --queryformat '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' | sort > ~/packages-after-migration-verified.txt

确认系统能正常接收更新:

检查可用更新
$ sudo dnf check-update
安装所有可用更新
$ sudo dnf update -y
如果更新了内核,重启系统
$ sudo needs-restarting -r && echo "无需重启" || echo "需要重启以应用内核更新"

以下脚本可以一次性完成大部分检查并输出报告:

运行迁移后快速检查
$ echo "===== 系统版本 ====="
$ cat /etc/redhat-release
$ echo ""
$ echo "===== 内核版本 ====="
$ uname -r
$ echo ""
$ echo "===== SELinux 状态 ====="
$ getenforce
$ echo ""
$ echo "===== 失败的服务 ====="
$ systemctl list-units --type=service --state=failed --no-legend
$ echo ""
$ echo "===== 已启用的仓库 ====="
$ dnf repolist --enabled 2>/dev/null
$ echo ""
$ echo "===== 防火墙状态 ====="
$ sudo firewall-cmd --state 2>/dev/null
$ echo ""
$ echo "===== 磁盘使用 ====="
$ df -h / /boot /var 2>/dev/null
$ echo ""
$ echo "===== 网络连通性 ====="
$ ping -c 1 -W 3 8.8.8.8 >/dev/null 2>&1 && echo "外网连通" || echo "外网不通"
$ dig +short google.com >/dev/null 2>&1 && echo "DNS 正常" || echo "DNS 异常"
$ echo ""
$ echo "===== 残留 CentOS 包 ====="
$ rpm -qa | grep -i centos || echo "无残留"