迁移到新硬件

来自 Arch Linux 中文维基

本文讨论将Arch Linux系统迁移到新硬件所需的步骤。 我们的目标是实现相同的Arch Linux安装过程,对于硬件无关的软件和配置。

警告: 以下某些操作可能有危险:建议您在继续操作之前,先备份旧系统上的所有重要数据。

移植已安装的系统有两种不同的方法:

  1. “自下而上”:在新硬件上安装全新的Arch Linux系统,然后恢复已安装的软件包和配置文件,如以点为开头的文件中所述。
  2. “自上而下”:将旧硬盘克隆到新硬盘,或将旧硬盘放入新系统;在需要的地方修改配置文件。

“自上而下”的方法比“自下而上”的方法更准确地再现了原始系统。

适配新硬件[编辑 | 编辑源代码]

警告: 对于这两种方法,我们必须考虑新旧硬件之间的差异,并相应地修改安装的驱动程序和配置。

在开始之前,先研究一下新硬件的各个方面,并列出不同之处。一般的区别有

机械硬盘与固态硬盘[编辑 | 编辑源代码]

参见文章Solid state drive

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 U 盘安装介质。将复制旧系统的分区布局和文件系统。

文件复制[编辑 | 编辑源代码]

  • 在新驱动器上创建新的分区文件系统。您可以利用此机会选择与以前不同的分区布局和/或文件系统。
  • 对于每种文件系统,使用rsync或其他可以保留文件权限、属性等的工具将文件从旧驱动器复制到新驱动器。更多详细信息,参见rsync#Full system backupRsync#作为备份工具

传输方法的选择[编辑 | 编辑源代码]

如何在两个驱动器之间传输数据有许多不同的方法:

  • 将源硬盘和目标硬盘连接到同一台计算机,无论是旧盘还是新盘。数据链路:旧硬盘->电脑->新硬盘。
  • 使用外部硬盘或云备份等临时存储设备。数据链路:旧硬盘->旧电脑->存储->新电脑->新硬盘。有关概述,请参阅文章系统备份
  • 通过网络传输数据,例如使用rsync。数据链路:旧硬盘->旧电脑->网络->新电脑->新硬盘。

对于前两个选项,请考虑您可能需要适配器来连接硬盘(PATA->SATA转接、USB移动硬盘盒等),并选择足够快的连接。

后两个选项要求您在新计算机上使用Live系统,因为此时尚无法从新硬盘启动。

更新fstab[编辑 | 编辑源代码]

警告: 在执行此步骤之前,请确保您不希望在旧系统中使用此驱动器,因为更改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

另见[编辑 | 编辑源代码]