- 翻译自Arch Wiki:Migrating Between Architectures Without Reinstalling
- i686为32位,x86_64位64位
- 升级有风险,操作须谨慎。本人使用文中方法2升级时无意间重启了电脑,催悲了。
准备工作
确认为64位平台
如果你已经正在使用x86_64但是想安装i686,可以跳过此步。 为了运行64位软件,你的CPU必须支持64位。现在大部分CPU都支持64位。你可以通过运行一下命令来确认:
1
|
|
(原文中为grep --color '\' /proc/cpuinfo
, 应该不对)
当CPU为x86_64平台时,输出结果里会出现高亮的 lm
(“long mode”)。
注意不是lahf_lm
,它和64位无关。
硬盘空间
在迁移过程中,/var/cache/pacman/pkg
的大小将翻倍,请为此做好准备。这是假定cache里只有当前安装的包,就像$ pacman -Sc
(clean)刚运行过一样。使用空间增长是因为所有包同时有i686和x86_64两个版本。
如果你没有足够的空间,可以使用gparted来调整相关分区大小,或者mount另一个分区到/var/cache/pacman
。
在迁移过程中请不要移除老框架的软件包,知道完全升级成功。过早的移除会使你无法回退和还原变更。
电源支持
升级时间比较长,并且不可中断。根据你的 安装包大小及网络速度,你最好为此准备至少一个小时的升级时间(虽然你可以先把它们下载下来)。请保证你的电源稳定。
回退准备
如果迁移过程中失败,有些包可以帮助你解决此时的问题,但是需要你在迁移之前安装。详情可以参考后面的 #Troubleshooting 。 包busybox可以用来还原变更。它不依赖于其他包,可以单独安装。通过下面命令可以安装32位(i686)的版本
1
|
|
另一个包是lib32-glibc,在Multilib的x86_64资源库里。这个只有当你从32位迁移至其它版本时才可能使用(It is probably only useful when migrating away from 32 bits);无论如何你可能安全跳过这个包。你可以用这个包来运行32位程序,通过明确的调用/lib/ld-linux-x86-32.so.2
。可用下面命令行安装。
1
|
|
方法1:使用Arch LiveCD
- 下载、刻录并启动64位Arch ISO LiveCD。
- 配置LiveCD的网络,然后pacman用新的库。
- 将现在的安装挂在到
/mnt
目录。如:mount /dev/sda1 /mnt
- 使用下面的脚本来执行:升级本地pacman数据库、取得本地安装包列表并重新安装:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
方法2:从当前系统升级
准备
Cache old packages
注意:如果你有从AUR或第三方库的包,并且在新的平台里查询不到,pacman会告知找不到相应替代。将这些包记录下来,以便在升级成功后重新安装,并用
$ pacman -Rsn package_name
来卸载。
确保你现在的包都在你的cache里,下载它们(老平台的)以便回退。
1
|
|
或者用pacman-contrib包里的bacman来生成它们。 如果你是从32位迁移,现在可以安装32位的Busybox
1
|
|
更换pacman平台
编辑配置文件/etc/pacman.conf
并且把Architecture
从auto
改为新值。你可以参考下面的sed命令:
For x86_64
1
|
|
For i686
1
|
|
手动移除Pacman软件仓库的数据库,强制同步新的软件仓库:
1 2 |
|
下载新包
给所有当前安装包下载新平台版本
1
|
|
如果有些包不能下载,请删除它们。 如果是迁移到32位,安装32位的Busybox fallback now that Pacman has been configured with the 32-bit architecture:
1
|
|
或者,如果是迁移到64位,安装lib-32-glibc fallback:
1
|
|
安装包
安装内核(64位)
将内核升级到64位(x86_64)很安全很简单:32位和64位的应用在64位内核下都能很好的运行。如果是从64位迁移至其它平台,leave the 64-bit kernel installed and running for now and skip this step. 用下面命令安装Arch Linux内核:
1
|
|
启动新的64位内核,并确认它运行x86_64平台:
1
|
|
控制台终端
现在切换到一个text-mode虚拟控制台(可以通过Ctrl+Alt+F1)来完成接下来的步骤。你可以使用SSH之类的伪终端,但不建议你这么做。有些包会被移除或者被替换,可能会导致X11桌面不稳定,以至于系统无法启动。
安装Pacman
警告:一旦你开始升级pacman及相关依赖,便不能中断。Pacman及相关依赖必须在同一条命令行上同时安装。
1
|
|
Immediately following this command only Busybox, Bash and Pacman will be executable until the other packages are migrated below. 安装成功前不能重启。
安装已存在的包
为新平台安装所有之前下载的替换。(此时可以休息休息,因为需要花费一段时间。)
1
|
|
For migration away from 64 bits, you may want to skip installing a 32-bit kernel in the command above, since the old 64-bit kernel will still run 32-bit programs. 完整这步迁移后,各方面都已经完成并且可以重启电脑。
清理
你现在可以移除Busybox和lib32-glibc。
1
|
|
Makepkg compiler flags
升级中新版的/etc/makepkg.conf
可能会被保存至/etc/makepkg.conf.pacnew
。如果你以后要用makepkg进行编译,你必须替换或修改老版本。
1
|
|
It might also be a good idea to just get a list of “new” additions to /etc. You can get a list with the following command:
1
|
|
问题解决
在升级过程中,当glibc替换为新版本后,许多老版本的程序将不能运行。如果发生此类问题,你可以用busybox和lib32-glibc来解决。
Busybox
In Arch, Busybox is statically linked; it can run without any libraries. There are many commands available to you. For example, to extract an i686 version of Pacman from a cached package:
1
|
|
Lib32-glibc
Example run 32 bit /bin/ls:
1
|
|