# Migrate installation to new hardware (简体中文)

From ArchWiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

相关文章

- Migrating_between_architectures_(简体中文)
- Moving an existing install into (or out of) a virtual machine

翻译状态：本文是 Migrate installation to new hardware 的翻译。上次翻译日期：2021-03-02。如果英文版本有所更改，则您可以帮助同步翻译。

本文讨论将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 USB flash installation medium (简体中文)。将复制旧系统的分区布局和文件系统。

#### 文件复制

- 在新驱动器上创建新的分区和文件系统。您可以利用此机会选择与以前不同的分区布局和/或文件系统。
- 对于每种文件系统，使用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]

Category:

- System recovery (简体中文)