本文主要介绍在Linux操作系统迁移时,迁移任务出错提示“Command 'yum -y distro-sync' returned non-zero”信息时的问题描述、问题原因及其解决方案。
问题描述
在使用SMC操作系统迁移时,迁移任务出错提示“Command 'yum -y distro-sync' returned non-zero”信息。
问题原因
迁移至Anolis OS充分利用了yum distro-sync
机制来实施迁移,该命令将当前系统中所有CentOS提供的软件包重装为Anolis OS源上的包,涉及到软件包的依赖解析、下载和安装。该命令执行耗时较长。如果该命令执行过程中意外中断,再次执行时会直接报错,导致迁移无法继续。
解决方案
当
yum distro-sync
意外中断时,需要按照命令执行的阶段来看问题现象。执行升级过程前中断
如软件包依赖解析阶段,下载阶段,只要没有开始执行软件包的安装,此时再次执行
yum distro-sync
能够正常运行。软件包开始安装过程中意外中断
软件包冲突问题,此时再次执行
yum distro-sync
会出现报错信息。yum distro-sync
中断时机不同,涉及到的报错软件也会有所不同,本示例以下图报错信息为例。执行以下命令,查看报错的软件包nginx在系统中的安装情况。
rpm -q nginx
查询发现Nginx安装了第三方仓库的Nginx相关不兼容包,导致冲突。
执行以下命令,卸载第三方仓库的Nginx相关不兼容包。
rpm -e nginx*
卸载过程中如果出现依赖无法卸载,则可以将其依赖一起卸载。
执行
yum distro-sync
查看是否有报错。如果能正常执行,执行以下命令,继续迁移。
当迁移到Anolis OS时
python3 /usr/sbin/centos2anolis.py -c
当迁移到Alibaba Cloud Linux时
python3 /usr/sbin/centos2alinux.py -c
如果还是报错,则需要继续解决报错问题。
问题排查解决后,可参考查看和运行SMC客户端,运行SMC客户端命令
./go2aliyun_client --rerun --skipgrub
来重试。