










有个很久以前建立的 Linode VPS,系统是 32 位的 Fedora。在 Linode 换成 KVM 时被要求换成了 64 位内核,看似没有问题就一直在使用。前些天发现许久不用的 strongswan 不能连接,报错信息让人感觉用户空间的什么东西和内核的什么东西不合拍,加上这个 Fedora 20 已经停止了更新,便萌生了作死变换架构然后升级的念头。
在这期间 Linode 一共给我发了 27 封提醒邮件,Orz...

整个过程中主要参考了这篇文章。
大致过程与原文相同,先滚系统,然后安装发行版提供的 64 位内核并确保启动,然后执行命令输出软件包列表,并替换 i686 为 x86_64 生成要安装的软件包列表,然后下载所有软件包准备。
# rpm -qa --qf '%{name}.%{arch}\n' |grep -E '\.i.86' |sed s/i.86/x86_64/g >rpmlist.txt
# yum --downloadonly --downloaddir=$SOMEPLACEWITHSPACE install $(cat rpmlist.txt)
此时要注意,由于目录结构的区别,要首先安装 filesystem 这个包,否则 /lib64 会成为一个目录,而不是到 /usr/lib64 的软链接。安装完成后可以继续安装所有软件包:
# rpm -Uvh filesystem*.rpm --replacepkgs --replacefiles --ignorearch # rpm -Uvh *rpm --replacepkgs --replacefiles --ignorearch
注意 SELinux 相关包的状态,如果出现问题可能无法启动。我遇到的情况是莫名其妙的丢了 selinux-policy-targeted 这个包,导致重启之后 dbus 启动不能,卡住 systemd。
重启,确定系统正常之后可以删掉剩余的 *.i686* 包了。如果需要的话,使用 rpmconf -a 来处理各类 .rpm{save,new} 。
接下来是 Linode 限定部分。
Linode 给虚拟机分配的磁盘一般是格式化好的一个完整文件系统镜像,相当于只有分区的内容,不是完整的磁盘。好在 ext 系基本都可以缩小,Linode 控制面板里也方便修改分区大小。实际上中途折腾失败时恢复 snapshot 自动建立的磁盘只有 23GB,而实际文件系统的使用量不到 10GB,不知道这个数字是怎么算出来的。
磁盘镜像的问题带来了第二个坑:bootloader。由于只有文件系统,装不上 bootloader,只能使用 Linode 的 GRUB2 方式启动系统。这种方式是由 Linode 提供 GRUB2,然后读取分区中的 /boot/grub/grub.cfg 作为配置文件进行启动,而 Fedora 默认的 GRUB2 配置文件在 /boot/grub2 里…与此相关的还有诸如 GRUB 界面乱码、卡死等问题。
为了解决这些坑,并且避免这些神奇的配置在以后升级过程中带来其他玄学问题,我创建了一个新的 unformatted/raw 格式的磁盘,进入 Rescue 分区,并将原磁盘的内容 rsync 到新磁盘的分区中。然后 chroot 进去,用 grub2-install /dev/sda 科学的安装 GRUB2。最后将启动方式改成 Direct Disk。
最大的折腾感受:滚动大法好!跨版本升级什么的太坑啦!
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。