从 CentOS 7 迁移到 AlmaLinux 10 指南
本指南提供从 CentOS 7 迁移到 AlmaLinux 10 的完整解决方案。由于版本跨度较大,推荐采用全新安装并迁移数据的方式。
重要提醒
CentOS 7 到 AlmaLinux 10 没有直接升级路径,必须进行全新安装。请务必做好完整备份!
迁移概览
迁移策略对比
策略 | 优点 | 缺点 | 推荐度 |
---|---|---|---|
全新安装 | 系统清洁、性能最佳 | 需要重新配置 | ⭐⭐⭐⭐⭐ |
双机迁移 | 风险较低、可逐步切换 | 需要额外硬件 | ⭐⭐⭐⭐ |
虚拟化迁移 | 便于测试和回滚 | 性能有损失 | ⭐⭐⭐ |
版本差异概览
特性 | CentOS 7 | AlmaLinux 10 | 影响程度 |
---|---|---|---|
内核版本 | 3.10.x | 6.6+ | 🔴 高 |
systemd | v219 | v255+ | 🟡 中 |
Python | 2.7/3.6 | 3.12 | 🔴 高 |
OpenSSL | 1.0.2 | 3.0+ | 🟡 中 |
默认防火墙 | firewalld | firewalld (增强) | 🟢 低 |
第一阶段:迁移准备
1. 系统评估
1.1 硬件兼容性检查
bash
# 检查 CPU 架构
lscpu | grep Architecture
# 确保是 x86_64
# 检查内存
free -h
# AlmaLinux 10 建议至少 2GB 内存
# 检查磁盘空间
df -h
# 建议至少 20GB 可用空间
# 检查网络接口
ip addr show
1.2 服务清单盘点
bash
# 列出所有运行的服务
systemctl list-units --type=service --state=running > services_list.txt
# 列出自启动服务
systemctl list-unit-files --type=service --state=enabled > autostart_services.txt
# 检查已安装的包
yum list installed > installed_packages.txt
# 检查自定义 RPM 包
rpm -qa --last | head -20
1.3 配置文件备份清单
bash
# 创建配置备份脚本
cat > backup_configs.sh << 'EOF'
#!/bin/bash
BACKUP_DIR="/backup/centos7-configs"
mkdir -p $BACKUP_DIR
# 系统配置
cp -r /etc $BACKUP_DIR/
cp -r /var/spool/cron $BACKUP_DIR/
cp -r /opt $BACKUP_DIR/
# Web 服务器配置
[ -d /etc/httpd ] && cp -r /etc/httpd $BACKUP_DIR/
[ -d /etc/nginx ] && cp -r /etc/nginx $BACKUP_DIR/
# 数据库配置
[ -d /etc/mysql ] && cp -r /etc/mysql $BACKUP_DIR/
[ -d /var/lib/mysql ] && mysqldump --all-databases > $BACKUP_DIR/mysql_backup.sql
# 用户数据
cp -r /home $BACKUP_DIR/
echo "配置备份完成:$BACKUP_DIR"
EOF
chmod +x backup_configs.sh
./backup_configs.sh
2. 数据备份策略
2.1 关键数据备份
bash
# 创建完整数据备份脚本
cat > full_backup.sh << 'EOF'
#!/bin/bash
BACKUP_DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_ROOT="/backup/centos7_migration_$BACKUP_DATE"
mkdir -p $BACKUP_ROOT
echo "开始完整系统备份..."
# 1. 系统配置
echo "备份系统配置..."
tar -czf $BACKUP_ROOT/etc_backup.tar.gz /etc
# 2. 用户数据
echo "备份用户数据..."
tar -czf $BACKUP_ROOT/home_backup.tar.gz /home
# 3. 应用数据
echo "备份应用数据..."
[ -d /var/www ] && tar -czf $BACKUP_ROOT/www_backup.tar.gz /var/www
[ -d /opt ] && tar -czf $BACKUP_ROOT/opt_backup.tar.gz /opt
# 4. 数据库备份
if systemctl is-active mariadb &>/dev/null; then
echo "备份 MariaDB 数据库..."
mysqldump --all-databases --single-transaction > $BACKUP_ROOT/mariadb_full.sql
fi
if systemctl is-active postgresql &>/dev/null; then
echo "备份 PostgreSQL 数据库..."
su - postgres -c "pg_dumpall" > $BACKUP_ROOT/postgresql_full.sql
fi
# 5. 生成系统信息报告
echo "生成系统信息..."
{
echo "=== 系统信息 ==="
uname -a
cat /etc/centos-release
echo ""
echo "=== 网络配置 ==="
ip addr show
echo ""
echo "=== 磁盘使用 ==="
df -h
echo ""
echo "=== 运行服务 ==="
systemctl list-units --type=service --state=running
} > $BACKUP_ROOT/system_info.txt
echo "备份完成:$BACKUP_ROOT"
ls -la $BACKUP_ROOT
EOF
chmod +x full_backup.sh
./full_backup.sh
第二阶段:AlmaLinux 10 部署
1. 安装准备
1.1 获取 AlmaLinux 10 镜像
bash
# 下载 AlmaLinux 10 ISO(使用国内镜像)
# 阿里云镜像源
wget https://mirrors.aliyun.com/almalinux/10/isos/x86_64/AlmaLinux-10-x86_64-minimal.iso
# 验证校验和
sha256sum AlmaLinux-10-x86_64-minimal.iso
1.2 安装介质准备
bash
# 制作启动 U 盘
sudo dd if=AlmaLinux-10-x86_64-minimal.iso of=/dev/sdX bs=4M status=progress
sync
2. 全新安装 AlmaLinux 10
2.1 基础安装配置
进行标准安装流程,建议配置:
分区方案:
/boot : 1GB (ext4) / : 20GB (xfs) /home : 剩余空间 (xfs) swap : 2GB
网络配置:保持与原服务器相同的 IP 设置
时区设置:Asia/Shanghai
语言环境:简体中文
2.2 初始化脚本
bash
# 创建初始化脚本
cat > almalinux10_init.sh << 'EOF'
#!/bin/bash
echo "AlmaLinux 10 初始化配置..."
# 1. 更新系统包
dnf update -y
# 2. 安装必要工具
dnf install -y \
vim wget curl git \
rsync screen tmux \
htop iotop lsof \
firewalld fail2ban \
policycoreutils-python-utils
# 3. 配置防火墙
systemctl enable --now firewalld
firewall-cmd --permanent --add-service=ssh
firewall-cmd --reload
# 4. 设置时区
timedatectl set-timezone Asia/Shanghai
# 5. 配置 DNF 使用国内镜像源
cp /etc/dnf/dnf.conf /etc/dnf/dnf.conf.bak
cat >> /etc/dnf/dnf.conf << 'DNFCONF'
fastestmirror=True
max_parallel_downloads=10
keepcache=True
DNFCONF
# 6. 创建恢复目录
mkdir -p /migration/{configs,data,scripts}
echo "AlmaLinux 10 初始化完成"
EOF
chmod +x almalinux10_init.sh
./almalinux10_init.sh
第三阶段:数据迁移
1. 配置文件迁移
1.1 网络配置恢复
bash
# CentOS 7 使用 network-scripts,AlmaLinux 10 使用 NetworkManager
# 需要转换配置格式
# 1. 查看 CentOS 7 的网络配置
cat /backup/centos7-configs/etc/sysconfig/network-scripts/ifcfg-eth0
# 2. 在 AlmaLinux 10 上重新配置
nmcli con add type ethernet con-name eth0 ifname eth0 \
ip4 192.168.1.100/24 gw4 192.168.1.1
# 3. 配置 DNS
nmcli con mod eth0 ipv4.dns "8.8.8.8 114.114.114.114"
# 4. 激活连接
nmcli con up eth0
1.2 SSH 配置迁移
bash
# 备份当前 SSH 配置
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
# 从备份恢复 SSH 配置(需要适配)
# CentOS 7 和 AlmaLinux 10 的 SSH 配置大部分兼容
grep -v "^#" /backup/centos7-configs/etc/ssh/sshd_config > ssh_config_clean.txt
# 检查配置兼容性
sshd -t -f ssh_config_clean.txt
# 应用配置并重启服务
cp ssh_config_clean.txt /etc/ssh/sshd_config
systemctl restart sshd
2. Web 服务迁移
2.1 Apache/Nginx 配置迁移
bash
# 安装 Web 服务器
dnf install -y httpd nginx php php-fpm mariadb-server
# 迁移 Apache 配置
if [ -d /backup/centos7-configs/etc/httpd ]; then
echo "迁移 Apache 配置..."
# 复制主配置文件(需要检查路径差异)
cp /backup/centos7-configs/etc/httpd/conf/httpd.conf /etc/httpd/conf/
# 复制虚拟主机配置
cp -r /backup/centos7-configs/etc/httpd/conf.d/* /etc/httpd/conf.d/
# 检查配置语法
httpd -t
# 启动服务
systemctl enable --now httpd
fi
# 迁移网站文件
if [ -d /backup/www_backup ]; then
tar -xzf /backup/www_backup.tar.gz -C /
chown -R apache:apache /var/www
restorecon -Rv /var/www
fi
2.2 数据库服务迁移
bash
# 安装并配置 MariaDB
dnf install -y mariadb-server
systemctl enable --now mariadb
# 安全初始化
mysql_secure_installation
# 恢复数据库
if [ -f /backup/mariadb_full.sql ]; then
echo "恢复 MariaDB 数据..."
mysql < /backup/mariadb_full.sql
fi
# 检查数据完整性
mysql -e "SHOW DATABASES;"
3. 用户数据恢复
3.1 用户账户迁移
bash
# 从备份恢复用户账户
# 注意:不要直接覆盖 passwd、shadow 文件,需要合并
# 1. 提取用户账户信息(UID >= 1000 的普通用户)
awk -F: '$3 >= 1000 && $3 != 65534' /backup/centos7-configs/etc/passwd > users_to_migrate.txt
# 2. 逐个创建用户
while IFS=: read -r username password uid gid gecos home shell; do
echo "创建用户: $username"
useradd -u $uid -g $gid -c "$gecos" -d $home -s $shell $username
done < users_to_migrate.txt
# 3. 恢复用户家目录
tar -xzf /backup/home_backup.tar.gz -C /
chown -R --reference=/backup/centos7-configs/home /home
3.2 应用程序迁移
bash
# 恢复 /opt 目录下的应用
if [ -f /backup/opt_backup.tar.gz ]; then
tar -xzf /backup/opt_backup.tar.gz -C /
# 重新设置权限和 SELinux 上下文
restorecon -Rv /opt
fi
# 重新安装必要的应用程序包
# 根据 installed_packages.txt 安装兼容的包
while read package; do
dnf install -y $package 2>/dev/null || echo "Package $package not available"
done < installed_packages.txt
第四阶段:服务验证
1. 系统服务检查
1.1 基础服务验证
bash
# 创建服务验证脚本
cat > verify_services.sh << 'EOF'
#!/bin/bash
echo "=== AlmaLinux 10 服务验证 ==="
# 1. 系统信息
echo "系统版本:"
cat /etc/almalinux-release
uname -a
# 2. 网络连接
echo -e "\n网络测试:"
ping -c 3 8.8.8.8
curl -s http://httpbin.org/ip
# 3. 重要服务状态
echo -e "\n服务状态检查:"
services=("sshd" "firewalld" "chronyd" "NetworkManager")
for service in "${services[@]}"; do
if systemctl is-active $service &>/dev/null; then
echo "✅ $service - 运行中"
else
echo "❌ $service - 停止"
fi
done
# 4. 磁盘空间
echo -e "\n磁盘使用:"
df -h
# 5. 内存使用
echo -e "\n内存使用:"
free -h
# 6. SELinux 状态
echo -e "\nSELinux 状态:"
sestatus
EOF
chmod +x verify_services.sh
./verify_services.sh
1.2 Web 服务验证
bash
# Web 服务测试脚本
cat > test_web_services.sh << 'EOF'
#!/bin/bash
echo "=== Web 服务测试 ==="
# 测试 Apache
if systemctl is-active httpd &>/dev/null; then
echo "✅ Apache 运行中"
curl -s -o /dev/null -w "Apache 响应时间: %{time_total}s\n" http://localhost
else
echo "❌ Apache 未运行"
fi
# 测试数据库连接
if systemctl is-active mariadb &>/dev/null; then
echo "✅ MariaDB 运行中"
mysql -e "SELECT VERSION();" 2>/dev/null && echo "数据库连接正常"
else
echo "❌ MariaDB 未运行"
fi
# 测试 PHP
if command -v php &>/dev/null; then
php_version=$(php -v | head -1)
echo "PHP 版本: $php_version"
fi
EOF
chmod +x test_web_services.sh
./test_web_services.sh
2. 性能对比测试
2.1 系统性能基准测试
bash
# 安装性能测试工具
dnf install -y sysbench fio
# CPU 性能测试
echo "CPU 性能测试:"
sysbench cpu --threads=4 run
# 内存性能测试
echo "内存性能测试:"
sysbench memory run
# 磁盘 I/O 测试
echo "磁盘 I/O 测试:"
fio --name=random-write --ioengine=posixaio --rw=randwrite --bs=4k --size=1G --runtime=60 --time_based --end_fsync=1
第五阶段:切换上线
1. DNS 切换准备
1.1 切换前检查清单
bash
# 创建切换前检查脚本
cat > pre_switch_checklist.sh << 'EOF'
#!/bin/bash
echo "=== 切换前检查清单 ==="
checks_passed=0
total_checks=10
# 1. 系统运行时间
uptime_hours=$(awk '{print int($1/3600)}' /proc/uptime)
if [ $uptime_hours -gt 1 ]; then
echo "✅ 系统稳定运行 $uptime_hours 小时"
((checks_passed++))
else
echo "❌ 系统运行时间不足"
fi
# 2. 所有服务状态
critical_services=("sshd" "httpd" "mariadb" "firewalld")
service_ok=true
for service in "${critical_services[@]}"; do
if ! systemctl is-active $service &>/dev/null; then
echo "❌ 关键服务 $service 未运行"
service_ok=false
fi
done
if $service_ok; then
echo "✅ 所有关键服务运行正常"
((checks_passed++))
fi
# 3. 网站可访问性
if curl -s -f http://localhost &>/dev/null; then
echo "✅ 网站可正常访问"
((checks_passed++))
else
echo "❌ 网站访问异常"
fi
# 4. 数据库连接
if mysql -e "SELECT 1;" &>/dev/null; then
echo "✅ 数据库连接正常"
((checks_passed++))
else
echo "❌ 数据库连接失败"
fi
# 5. 磁盘空间
root_usage=$(df / | awk 'NR==2{print int($5)}')
if [ $root_usage -lt 80 ]; then
echo "✅ 磁盘空间充足 (${root_usage}%)"
((checks_passed++))
else
echo "❌ 磁盘空间不足 (${root_usage}%)"
fi
echo -e "\n检查结果: $checks_passed/$total_checks 通过"
if [ $checks_passed -eq $total_checks ]; then
echo "🎉 所有检查通过,可以进行切换"
exit 0
else
echo "⚠️ 存在问题,不建议立即切换"
exit 1
fi
EOF
chmod +x pre_switch_checklist.sh
./pre_switch_checklist.sh
2. 回滚方案
2.1 快速回滚脚本
bash
# 创建回滚脚本
cat > rollback_plan.sh << 'EOF'
#!/bin/bash
echo "=== 紧急回滚方案 ==="
# 如果新系统出现问题,快速回滚到原 CentOS 7 服务器
# 1. 停止新服务器上的服务
systemctl stop httpd mariadb
# 2. 更新 DNS 记录指向原服务器
echo "请手动将 DNS 记录指向原 CentOS 7 服务器:"
echo "原服务器 IP: [原服务器IP地址]"
# 3. 记录回滚时间和原因
echo "回滚时间: $(date)" >> /var/log/migration_rollback.log
echo "回滚原因: $1" >> /var/log/migration_rollback.log
echo "回滚操作完成,请检查服务恢复情况"
EOF
chmod +x rollback_plan.sh
常见问题排查
1. 网络配置问题
bash
# 问题:网络连接异常
# 解决方案:
nmcli device status
nmcli connection show
systemctl restart NetworkManager
# 问题:DNS 解析失败
# 解决方案:
echo "nameserver 114.114.114.114" >> /etc/resolv.conf
systemctl restart systemd-resolved
2. 服务启动问题
bash
# 问题:Apache 启动失败
# 解决方案:
httpd -t # 检查配置语法
systemctl status httpd # 查看详细错误
journalctl -u httpd # 查看日志
# 问题:MariaDB 启动失败
# 解决方案:
systemctl status mariadb
cat /var/log/mariadb/mariadb.log
3. SELinux 权限问题
bash
# 问题:网站文件访问被拒绝
# 解决方案:
setsebool -P httpd_read_user_content 1
restorecon -Rv /var/www
chcon -t httpd_exec_t /var/www/html/*.php
迁移验收标准
1. 功能验收
- [ ] 所有原有网站正常访问
- [ ] 数据库数据完整性验证通过
- [ ] 用户账户和权限正确
- [ ] 定时任务正常执行
- [ ] 邮件服务正常(如有)
2. 性能验收
- [ ] 网站响应时间不超过原系统 120%
- [ ] 系统负载在正常范围内
- [ ] 内存使用率 < 80%
- [ ] 磁盘 I/O 性能满足要求
3. 安全验收
- [ ] 防火墙规则正确配置
- [ ] SELinux 正常启用
- [ ] SSL 证书正常工作
- [ ] 漏洞扫描通过
完成迁移后,建议阅读 AlmaLinux 10 安全加固指南 进一步提升系统安全性。