迁移到新硬件 - Arch Linux 中文维基

跳转到内容

# 迁移到新硬件

来自 Arch Linux 中文维基
翻译状态：

- 本文（或部分内容）译自 Migrate installation to new hardware，最近一次同步于 2021-03-02，若英文版本有所更改，则您可以帮助同步与翻译更改的内容。
- 您可以在 ArchWiki 的对应页面找到本文翻译的原始修订历史。
- 本文可能与英文原文存在出入。

相关文章

- 架构间迁移
- 将现有安装移动到（或移出）虚拟机

本文讨论将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 backup，Rsync#作为备份工具。

#### 传输方法的选择

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

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

## 另见

- Howto clone a linux system
- [1]
- [2]

分类：​

- 系统恢复

迁移到新硬件
添加话题