Migrate installation to new hardware (简体中文)
本文讨论将Arch Linux系统迁移到新硬件所需的步骤。 我们的目标是实现相同的Arch Linux安装过程,对于硬件无关的软件和配置。
移植已安装的系统有两种不同的方法:
- “自下而上”:在新硬件上安装全新的Arch Linux系统,然后恢复已安装的软件包和配置文件,如以点为开头的文件中所述。
- “自上而下”:将旧硬盘克隆到新硬盘,或将旧硬盘放入新系统;在需要的地方修改配置文件。
“自上而下”的方法比“自下而上”的方法更准确地再现了原始系统。
适配新硬件
在开始之前,先研究一下新硬件的各个方面,并列出不同之处。一般的区别有
机械硬盘与固态硬盘
CPU供应商
如果将CPU切换到其他供应商的CPU(例如从Intel更换为AMD),请更改微码配置。
GPU供应商
如果您将GPU更换为其他供应商(例如,从AMD更换为NVIDIA (简体中文)),请更换图形驱动程序。
UEFI与MBR引导代码引导
如果您更换到较新的支持UEFI的主板,则可能更可取或需要从“MBR引导代码”引导切换到UEFI引导。在这种情况下,需要一个新的EFI分区。
自下而上
在旧系统上
我们在这里定义了从旧系统迁移到新系统的最小配置,这是此方法与安装指南的不同之处。考虑要复制到新系统的/etc
中的配置文件和/home
中的“.”文件,以及用户数据文件。如果您无法从新系统访问旧系统,则备份要复制的所有文件。
列出已安装的软件包
$ pacman -Qqen > pkglist.txt $ pacman -Qqem > pkglist_aur.txt
为您提供从软件仓库和AUR显式安装的软件包的列表。如果您创建了备份,请将其包含在备份中。
您还可以使用以下脚本查找pacman感知不到的二进制文件和库(例如,g. 通过Steam、Desura或使用自己的安装方法安装的软件):
find / -regextype posix-extended -regex "/(sys|srv|proc)|.*/\.ccache/.*" -prune -o -type f \ -exec bash -c 'file "{}" | grep -E "(32|64)-bit"' \; | \ awk -F: '{print $1}' | \ while read -r bin; \ do pacman -Qo "$bin" &>/dev/null || echo "$bin"; \ done
pacman 缓存
如果不更改体系结构(例如,从x86更改为x86_64),请考虑备份/var/cache/pacman/pkg/
。
在新系统上
安装指南的前半部分
有关安装新系统的基本信息,请参阅Installation guide (简体中文)。按照安装指南的前半部分操作,但不包括pacstrap命令。
复制pacman缓存
将位于/var/cache/pacman/pkg/
的pacman缓存从旧系统复制到新系统,或从备份复制到新系统。
安装指南的后半部分
继续执行中的安装指南(包括pacstrap命令),直到最后,但不要重新启动。不要跳过pacstrap命令,因为它除了安装软件包之外还会执行其他工作。
安装以前安装的软件
编辑pkglist.txt(和pkglist_aur.txt)并删除新系统上不需要的驱动程序。然后使用下述命令安装之前安装过的软件
# pacman -S --needed - < pkglist.txt
自上而下
自上而下方法有两个选项,您可以保留已安装系统的驱动器并修改其内容,也可以将系统复制到新驱动器。如果保留驱动器并对其进行修改,然后将其放回旧系统中,则修改可能会导致旧系统无法启动。
清理旧系统
在克隆系统之前清理系统也是值得的,如System maintenance (简体中文)#清理文件系统中所述。在继续之前,请确保旧系统在清理后仍按预期工作。
将系统复制到新驱动器
将系统复制到新驱动器有两种基本方法:硬盘克隆和文件复制。
硬盘克隆
需要使用Live系统,而不是旧的Arch Linux系统;例如,您可以使用Arch Linux USB flash installation medium (简体中文)。将复制旧系统的分区布局和文件系统。
文件复制
- 在新驱动器上创建新的分区和文件系统。您可以利用此机会选择与以前不同的分区布局和/或文件系统。
- 对于每种文件系统,使用rsync或其他可以保留文件权限、属性等的工具将文件从旧驱动器复制到新驱动器。更多详细信息,参见rsync#Full system backup,Rsync (简体中文)#作为备份工具。
传输方法的选择
如何在两个驱动器之间传输数据有许多不同的方法:
- 将源硬盘和目标硬盘连接到同一台计算机,无论是旧盘还是新盘。数据链路:旧硬盘->电脑->新硬盘。
- 使用外部硬盘或云备份等临时存储设备。数据链路:旧硬盘->旧电脑->存储->新电脑->新硬盘。有关概述,请参阅文章系统备份。
- 通过网络传输数据,例如使用rsync (简体中文)。数据链路:旧硬盘->旧电脑->网络->新电脑->新硬盘。
对于前两个选项,请考虑您可能需要适配器来连接硬盘(PATA->SATA转接、USB移动硬盘盒等),并选择足够快的连接。
后两个选项要求您在新计算机上使用Live系统,因为此时尚无法从新硬盘启动。
更新fstab
如果您使用的是Arch Linux安装映像,请将新的根分区挂载到/mnt
,并挂载好其他需要的分区,就像您在正常安装中所做的那样(请参阅挂载分区)。
在/mnt/etc/fstab
的末尾插入任意注释,如#end of old fstab
。按照安装指南#Fstab中的说明生成一个新的fstab文件,并将其附加到当前的fstab文件中。一定要检查genfstab创建的fstab文件。在这种情况下,请在注释之前检查较旧的fstab条目,删除过期项和重复项;如果旧条目仍然有用,则保留它们。例如,可以保留网络驱动器的挂载条目。一般推荐使用持久化命名。
重新安装引导加载程序
出于以下原因,您可能需要重新安装和/或重新配置启动加载器:
- 不同的磁盘、分区布局或文件系统
- 将UEFI引导条目添加到新的主板NVRAM
- 从“MBR引导代码”引导迁移到UEFI引导
- 从USB迁移到SATA/NVMe
- 更新内核命令行(commandline)
- 如果使用不同的GPU,请更新帧缓冲区模式
- 更新微码和initramfs镜像
如果您使用的是Arch Linux live环境,则在重新安装引导加载程序之前,请更改根路径进入新系统:
# arch-chroot /mnt
有关如何安装/重新安装引导程序的说明,请参阅启动加载器。
重新生成内核映像
建议使用mkinitcpio重新生成initramfs映像,尽管最初可以使用备用initramfs映像。
重新配置音频
- alsamixer volume
- 保存设置
重新配置网络
如果旧系统和迁移后的系统在同一网络中共存,请使用hostnamectl设置新主机名。
另请考虑主机名更改后所需的配置更改:
- /etc/hosts
- 使用主机名的其他应用程序:synergy,nut(网络 ups 工具)
-
grep -Ri 'hostname' /etc
(以root身份运行)也会对徐要更新的文件提供一些提示
将dhcpcd配合已命名的网络接口使用时,网络接口名称可能会有变化。
- 使用命令
$ dmesg | grep 'renamed from eth'
可帮助查找新接口名称 - 删除旧接口:disable
dhcpcd@enpXs0.service
- 激活新接口:enable
dhcpcd@enpXs0.service