将安装迁移到新硬件

来自 ArchWiki

本文讨论了将 Arch Linux 系统迁移到新硬件所需的步骤。目标是实现相同的 Arch Linux 安装,在已安装软件和配置方面与硬件无关。

警告: 以下部分说明可能具有危险性:建议您在继续之前备份旧系统上的所有重要数据。

迁移安装有两种不同的方法

  1. 自下而上:在新硬件上全新安装 Arch Linux 系统,然后恢复已安装的软件包和配置文件,例如 dotfiles 中描述的那样。
  2. 自上而下:将旧硬盘克隆到新硬盘,或者将旧硬盘放入新系统;必要时修改配置文件。

自上而下 方法比 自下而上 方法能更精确地再现原始系统。

适应新硬件

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

在开始之前,研究新硬件的各个方面并列出差异。常见的差异有

硬盘 vs. 固态硬盘

参见文章 SSD

CPU 供应商

如果您将 CPU 切换到来自另一家供应商的 CPU(例如,从 Intel 切换到 AMD),请更改 Microcode 配置。

GPU 供应商

如果您将 GPU 更改为来自另一家供应商的 GPU(例如,从 AMD 更改为 NVIDIA),请更改图形驱动程序。

UEFI vs. MBR 引导代码启动

如果您切换到具有 UEFI 的更新的主板,则可能最好或必须从“MBR 引导代码”启动切换到 UEFI 启动。在这种情况下,需要一个新的 EFI 系统分区

自下而上

在旧系统上

我们在此处定义了一个最小配置,该配置从旧系统延续到新系统,这使此方法区别于安装指南。考虑您要复制到新系统的 /etc 中的配置文件和 /home 中的 dotfiles,以及用户数据文件。如果您无法从新系统访问旧系统,请备份所有要复制的文件。

已安装软件包列表

$ pacman -Qqen > pkglist.txt
$ pacman -Qqem > pkglist_aur.txt

为您提供了一个来自存储库和 AUR 显式安装的软件包的清晰列表。如果您进行备份,请将其包含在备份中。

您也可以使用以下脚本来更好地了解 pacman 未知的已安装二进制文件和库(例如,通过 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 缓存

考虑备份 /var/cache/pacman/pkg/

在新系统上

安装指南前半部分

有关安装新系统的基础知识,请参阅 安装指南。按照安装指南的前半部分进行操作,直到但不包括 pacstrap 命令。

复制 pacman 缓存

将旧系统或备份中的 /var/cache/pacman/pkg/ 中的 pacman 缓存复制到新系统。

安装指南后半部分

继续安装指南,从 pacstrap 命令开始(包括 pacstrap 命令)直到结束,但不要重启。不要跳过 pacstrap 命令,因为它除了安装软件包外还会执行其他工作。

安装之前安装的软件

编辑 pkglist.txt(和 pkglist_aur.txt)并删除新系统上不需要的驱动程序。然后使用以下命令安装任何其他先前安装的软件

# pacman -S --needed - < pkglist.txt

自上而下

对于自上而下方法,有两种选择,您可以保留已安装系统的驱动器并修改其内容,也可以将系统复制到新驱动器。如果您保留驱动器并对其进行修改,然后将其放回旧系统,则修改可能会阻止旧系统启动。

清理旧系统

在克隆系统之前清理系统也是值得的,如 系统维护#清理文件系统 中所述。确保旧系统在清理后仍能按预期工作,然后再继续。

将系统复制到新驱动器

注意: 如果您计划保留已安装系统的硬盘,则可以跳过本节。

将系统复制到新驱动器有两种基本方法:磁盘克隆和文件复制。

磁盘克隆

对于 磁盘克隆,需要使用 Linux Live 系统,而不是旧的 Arch Linux 系统。例如,您可以使用 Arch Linux USB 闪存安装介质。旧系统的分区布局和文件系统将被复制,因此,如果您迁移到更大的驱动器并想使用所有可用空间(例如,用于根分区),则必须调整分区大小。

文件复制

  • 在新驱动器上创建新的 分区文件系统。您可以借此机会选择与之前不同的分区布局和/或文件系统。
  • 对于每个文件系统,使用 rsync 或其他保留权限、属性等的工具将文件从旧驱动器复制到新驱动器,请参阅 rsync#完整系统备份rsync#文件系统克隆 以了解更多详细信息。此过程应在进入 arch-chroot 之前完成。

传输选项

在两个驱动器之间传输数据有很多不同的方法

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

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

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

更新 fstab

警告
  • 在执行此步骤之前,请确保您不希望在旧系统中使用此驱动器,因为更改 fstab 文件可能会阻止系统在旧配置中启动。
  • 如果您使用了 磁盘克隆 并且在与克隆源驱动器相同的机器中使用最近克隆的驱动器,则分区表 UUID、分区 UUID 和文件系统 UUID 将导致驱动器之间发生冲突。请务必在克隆的驱动器上将所有这些更改为新的随机值。对于 GPT 及其分区,请使用 sgdisk,对于文件系统,请使用 适当的用户空间实用程序

如果您正在使用 Arch Linux 安装镜像,请将新的根分区挂载到 /mnt,以及任何其他所需的分区,就像在正常安装中一样(请参阅 安装指南#挂载文件系统)。

/mnt/etc/fstab 的末尾插入任意注释,例如 #end of old fstab。按照 安装指南#Fstab 上的指示生成新的 fstab 文件,并将其附加到当前的 fstab 文件。通常,始终检查 genfstab 创建的 fstab 文件。在这种情况下,检查注释之前的旧 fstab 条目,如果它们已过时或重复,则删除它们,如果旧条目仍然有用,则保留它们。例如,可以保留网络驱动器的挂载条目。通常建议使用 持久块设备命名

重新安装引导加载器

您可能需要出于以下原因重新安装和/或重新配置 引导加载器

  • 不同的磁盘、分区布局或文件系统
  • UEFI 启动项添加到新的主板 NVRAM 中
  • 从“MBR 引导代码”启动迁移到 UEFI 启动
  • 从 USB 迁移到 SATA/NVMe
  • 更新内核命令行
    • 如果 GPU 不同,请更新帧缓冲模式
    • 更新 Microcode initramfs 镜像

如果您正在使用 Arch Linux Live 环境,那么在重新安装引导加载器之前,切换 root 到新系统

# arch-chroot /mnt

有关如何(重新)安装引导加载器的说明,请参阅有关您的 引导加载器 的文章。

重新生成内核镜像

建议 重新生成 initramfs 镜像,尽管最初回退 initramfs 镜像可能有效。

重新配置音频

  • alsamixer 音量
    • 保存设置

重新配置网络

如果旧安装和迁移后的安装需要在同一网络中共存,请使用 hostnamectl 设置新的主机名。

还要考虑在主机名更改后所需的配置更改

  • /etc/hosts
  • 其他使用主机名的应用程序:synergy, nut (网络 UPS 工具)
  • grep -Ri 'hostname' /etc (以 root 用户身份)应该会给出一些关于需要更新的文件的提示

网络接口名称可能会更改,如果它们在您的 网络管理器 配置中被硬编码,其配置将需要更新。使用以下方法找出新的网络接口名称:

# journalctl -k --grep='renamed from eth'

另请参阅