快速摘要

  • 重装 Linux 之前,需要备份的远不止“文档”文件夹。
  • 请备份个人文件、浏览器配置文件、SSH/GPG 密钥、点文件、应用特定数据、已安装软件包列表(包括 Flatpak/Snap)、系统级配置、网络设置和计划任务等。
  • 最重要的是,请备份你的双因素认证恢复码——这是唯一一类无法通过重装任何东西来恢复的数据。

引言

大多数人会备份那些显而易见的东西,比如“文档”、“图片”和“下载”等文件夹。然后他们重装 Linux 系统,却发现终端不再有“自己的”感觉了。SSH 密钥不见了。Shell 别名消失了。每个应用的设置都恢复到了出厂默认值。

这是因为 Linux 上的“数据”不仅仅是家目录中的文件。它还包括:

  • 身份凭证:SSH 密钥、GPG 密钥、浏览器登录信息、双因素认证/恢复码
  • 配置:点文件、环境变量、计划任务
  • 系统状态:你安装的精确软件包列表,以及任何系统级定制
  • 应用记忆:各个应用内部的设置,而不仅仅是它们的数据文件

本指南将逐一介绍每个类别,按容易被遗忘的程度排序,并提供两种执行方式:

  1. 一个适用于大多数桌面用户的快速单行命令,
  2. 以及一份完整的逐项清单,适用于你的设置更定制化,或者你想确切了解自己在复制什么以及为什么复制的情况。

免责声明: 这是我个人的重装前例行流程,记录下来以便他人参考。它并非适用于所有可能设置的详尽清单。如果你使用了本指南未涵盖的内容(如密码管理器保险库、Docker 卷、VPN 客户端、游戏库),你也必须备份那些内容。

对于此处未列出的任何内容,同样适用两个问题:它的数据存放在哪里,以及它是否需要专用工具而不是简单的文件复制?

快速开始:用一个命令备份整个家目录

如果你的系统没有大量定制,这个单一的 rsync 命令可以在一次操作中覆盖下面第 1 到第 5 节中的几乎所有内容,包括点文件、浏览器配置文件、SSH 密钥和应用设置,因为它们都位于 ~/ 下的某个位置。

首先,连接你的外部驱动器并挂载到备份目标位置:

mkdir -p --exclude='.cache' \
sudo mount sudo mount /dev/sdb1 /mnt/backup   # replace /dev/sdb1 with your backup drive   # 将 /dev/sdb1 替换为你的备份驱动器

不确定哪个设备是你的备份驱动器?列出所有驱动器和分区:

lsblk -f

然后复制你的整个家目录,保留权限、ACL、扩展属性和硬链接:

rsync -aAXHv \ \
--exclude='.cache' \ \
/home/$USER/ \ \
/mnt/backup/home/
  • -a:归档模式(权限、时间戳、符号链接)
  • -A:保留 ACL
  • -X:保留扩展属性
  • -H:保留硬链接
  • -v:详细输出
  • --exclude='.cache':跳过缓存数据(这些数据会被重新生成);如果你想要逐字节复制,请省略此标志

这一个命令就能同时处理文件、点文件、浏览器数据和 SSH 密钥。请注意,它不包括已安装的软件包、GPG 密钥环(需要适当的导出,而不是原始复制——见第 4 节)、数据库或任何位于家目录之外的内容。

请继续阅读以了解这些内容,以及每个类别背后的原理,如果你想理解为什么某些东西需要特殊处理而不是简单复制。


1. 个人文件和文档

显而易见的东西,但有两个人们容易掉入的陷阱。

陷阱 1:你只备份了 ~/Documents、~/Pictures、~/Downloads。 这会遗漏保存在标准文件夹之外的任何内容,例如 ~/projects 中的脚本、虚拟机磁盘映像,或者第二个内部驱动器(不是你的 /home 分区)上的文件。

陷阱 2:你忘记了隐藏的应用数据也在你的家目录中。 根据 freedesktop.org XDG 基础目录规范,用户特定的数据文件默认位于 $HOME/.local/share,配置文件默认位于 $HOME/.config。游戏存档、某些应用数据库以及 Flatpak/Snap 用户数据通常存放在这里——如果你只复制“文档”文件夹,它们是看不见的。

使用以下命令快速查找大型、非显而易见的文件夹:

du -h --max-depth=1 ~ | sort -rh | head -20

2. 浏览器数据(书签、保存的密码、配置文件)

你的浏览器不仅仅是书签。保存的密码、自动填充、扩展、打开的标签页和登录会话都存储在一个本地配置文件文件夹中,如果你没有同步,重装系统会将其清除。

Firefox:

  • 如果你安装的 Firefox 版本低于 147(2026 年 1 月发布),你的配置文件位于 ~/.mozilla/firefox/,即使升级后也会保留在那里。Firefox 不会自动迁移现有配置文件。
  • 全新安装(没有预先存在的 ~/.mozilla)会默认使用新的 XDG 布局:配置在 ~/.config/mozilla,缓存在 ~/.cache/mozilla,数据在 ~/.local/share/mozilla。
  • 在浏览器中查看 about:support 以获取你的确切配置文件和缓存路径,而不是猜测。

Chrome / Chromium:

  • 存储在 ~/.config/google-chrome/(Chrome)或 ~/.config/chromium/(Chromium)
  • 活动配置文件是一个子文件夹——Default、Profile 1 等。
  • chrome://version 会显示确切的“配置文件路径”。

备份前:

  • 已登录浏览器同步?书签、密码和标签页会自动恢复。你可能根本不需要配置文件文件夹。
  • 未同步?完全关闭浏览器,然后复制整个配置文件文件夹。
  • 同步之外的密码通常通过系统级工具(GNOME Keyring、KDE Wallet)加密。因此,仅复制配置文件文件夹可能无法携带解密信息。

3. SSH 密钥和 GPG 密钥

这是两个最常被遗忘的备份项,也是丢失后最痛苦的两项。

SSH 密钥:~/.ssh/

默认情况下,ssh-keygen 写入 ~/.ssh/id_rsa(或 id_ed25519)以及:

  • ~/.ssh/config:每台主机的快捷方式
  • ~/.ssh/known_hosts:服务器指纹
  • ~/.ssh/authorized_keys:如果这台机器接受传入的 SSH 连接

复制整个 ~/.ssh 文件夹。丢失私钥是无法“恢复”的。你需要生成一个新密钥,并在旧密钥被信任的每个地方手动重新授权。

SSH 对权限要求严格。恢复后,运行:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa ~/.ssh/authorized_keys ~/.ssh/config

注意: 如果这台机器也运行 SSH 服务器并接受传入连接,其主机密钥单独位于 /etc/ssh/——见下面的第 7 节(系统级配置)。这与用于向外连接到其他机器的个人 ~/.ssh 密钥是两回事。

GPG 密钥:~/.gnupg/

直接复制此文件夹不可靠。自 GnuPG 2.1 起,私钥作为单独文件存储,而不是旧的单个 secring.gpg。原始复制可能看起来正常,但会在解密或签名时静默失败。请改用显式导出:

gpg --export --export-options backup --output public.gpg
gpg --export-secret-keys --export-options backup --output private.gpg
gpg --export-ownertrust --output trust.txt

所有三个导出都很重要。ownertrust 文件可以防止在恢复后每次操作时出现“未知信任”警告。同时备份来自 ~/.gnupg/openpgp-revocs.d/ 的吊销证书。这是使丢失密钥失效的唯一方法,因此请像保护密钥本身一样保护它。

4. 点文件和 Shell 配置

点文件让系统感觉像是“你的”。跳过这些,你的 shell、编辑器和 Git 身份将重置为出厂默认值。

运行 ls -la ~ 查看家目录中实际存在的所有内容。

不要盲目地将秘密与点文件一起备份。 .bashrc/.zshrc 文件中的 export 行会随着时间的推移积累 API 令牌。如果你将点文件推送到公共 GitHub 仓库,请先检查是否有敏感内容。

对于长期可重复的设置,像 chezmoi 或 yadm(或一个裸 Git 仓库)这样的工具可以将未来的重装变成一个 git clone 命令。

5. 应用特定数据

某些应用需要单独提出来,因为丢失它们的数据意味着丢失了你无法轻易重新创建的东西。这里以 Thunderbird 和 VS Code 作为代表性示例。任何应用都适用同样的两个问题:它的配置存放在哪里,以及它是否需要专用工具而不是文件复制?

1. Thunderbird(电子邮件、联系人、日历):

  • 配置文件位于 ~/.thunderbird/,但 Snap/Flatpak 安装使用不同的路径(例如 ~/snap/thunderbird/common/.thunderbird/)。请查看帮助 → 更多故障排除信息 → 配置文件目录以获取确切路径。
  • 复制前关闭 Thunderbird。
  • IMAP 账户主要需要设置,而不是邮件(它会重新下载)。POP 或仅本地文件夹意味着邮件仅存在于这个配置文件中。

2. VS Code(或任何带有扩展的编辑器):

设置位于 ~/.config/Code/User/settings.json 和 keybindings.json

将你的扩展列表导出为重装脚本:

code --list-extensions > extensions.txt

使用以下命令重新安装:

cat extensions.txt | xargs -L 1 code --install-extension

3. 本地数据库(MySQL/MariaDB、PostgreSQL):

不要复制原始数据目录。它依赖于版本和配置。请使用每个数据库自己的转储工具:

mysqldump -u <username> -p <database_name> > backup.sql
# Or for every database on the system:
mysqldump --all-databases > all.sql
pg_dump -U <username> <database_name> > backup.sql
# Or for every database on the system:
pg_dumpall > postgres.sql

6. 已安装软件包列表

这是不可见的,也是最常被遗忘的类别。没有名为“我安装的软件”的文件夹让你注意到缺失。

Debian / Ubuntu / Linux Mint / Pop!_OS:

apt-mark showmanual > packages.txt

稍后你可以使用以下命令重新安装:

sudo xargs apt install -y < packages.txt

Fedora / RHEL / AlmaLinux / Rocky Linux:

dnf repoquery --userinstalled > packages.txt

使用以下命令重新安装:

sudo dnf install $(cat packages.txt)

Arch Linux:

pacman -Qqe > packages.txt

重新安装:

sudo pacman -S --needed $(cat packages.txt)

所有三个导出都只包含你明确安装的软件包,而不是自动拉取的依赖项——这保持了重装的清洁。

Flatpak(越来越多地成为 Spotify、OBS、GIMP 等应用的默认安装方式,无论你的基础发行版是什么):

flatpak list --app --columns=application > flatpak-apps.txt
flatpak remotes --columns=name,url > flatpak-remotes.txt

你需要两个文件。remotes 文件告诉 Flatpak 从哪里获取每个应用。重新安装:

while read -r name url; do flatpak remote-add --if-not-exists "$name" "$url"; done < flatpak-remotes.txt
flatpak install $(cat flatpak-apps.txt)

Flatpak 应用的数据(存档、设置)单独位于 ~/.var/app/。如果它对你有用,请像备份任何其他文件夹一样备份它。

Snap(Ubuntu 的默认应用格式):

snap list > snap-list.txt

使用 sudo snap install <name> 重新安装每个应用。Snap 没有像 apt/pacman 那样的原生批量从文件安装命令。

7. 系统级配置(如果你定制过)

以上所有内容都位于你的家目录下。本节涵盖系统外部 $HOME 的部分。如果你定制了系统行为而不仅仅是个人环境,那么本节是相关的。如果你从未碰过这些文件,请完全跳过本节;全新安装会自动创建合理的默认值。

核心系统文件,如果你编辑过(自定义挂载点、主机名、网络别名):

sudo mkdir -p /mnt/backup/etc
sudo cp -a /etc/fstab /etc/hosts /etc/default /mnt/backup/etc/

SSH 服务器配置(如果这台机器接受传入的 SSH 连接。请注意,这与第 3 节中的个人 ~/.ssh 客户端密钥不同):

sudo cp -a /etc/ssh /mnt/backup/etc/

自定义 systemd 单元,如果你编写了自己的服务(超出点文件中已涵盖的用户定时器):

sudo cp -a /etc/systemd /mnt/backup/etc/

引导加载程序配置,仅当你定制了 GRUB(自定义内核参数、引导顺序、主题):

sudo cp -a /etc/default/grub /mnt/backup/

家目录之外的自定义脚本:

sudo cp -a /usr/local /mnt/backup/
# or, if you keep scripts inside your home folder instead:
cp -a ~/bin /mnt/backup/

磁盘布局——如果你的分区设置不简单,值得保存,这样你可以在重装期间精确地重新创建它,而不是凭记忆猜测:

lsblk -f > /mnt/backup/lsblk.txt
sudo fdisk -l > /mnt/backup/fdisk.txt

已启用的服务——如果你手动启用了特定的 systemd 服务,并希望有一个参考来知道要重新启用哪些服务,这会很有用:

systemctl list-unit-files --state=enabled > /mnt/backup/enabled-services.txt

8. 网络设置(如果定制过)

如果你从未手动碰过网络配置,请跳过本节,全新安装配合 DHCP 即可正常工作。如果你手动设置过任何内容,则值得备份。

Wi-Fi 密码和已保存的连接: 由 NetworkManager(大多数桌面发行版的默认管理器)以明文形式存储在:

sudo cp -a /etc/NetworkManager/system-connections/ /mnt/backup/

这些文件包含 psk= 行下的已保存 Wi-Fi 密码明文。请将此备份视为敏感信息,而不仅仅是配置文件。

静态 IP 配置: 如果你使用 Netplan(Ubuntu 及其衍生版),你的配置位于 /etc/netplan/,作为一个或多个 .yaml 文件。文件名可能有所不同(00-installer-config.yaml、01-netcfg.yaml、50-cloud-init.yaml,具体取决于系统的安装方式):

sudo cp -a /etc/netplan/ /mnt/backup/

自定义主机名或 DNS 条目: 如果你在第 7 节中备份了 /etc/hosts,则已涵盖。如果你维护自定义的 /etc/resolv.conf 而不是让 systemd-resolved 自动管理它,也请备份它。

VPN 配置: 如果你维护本地 VPN 客户端配置(WireGuard、OpenVPN)而不是使用提供商的应用程序,请备份它们的配置目录,通常是 /etc/wireguard/ 或你的特定客户端存储其配置文件的任何位置。

9. 环境变量和计划任务

环境变量: 如果设置在 .bashrc/.zshrc/.profile 中,你已经在第 4 节中涵盖了它们。不过,有些位于 shell 配置之外:

  • ~/.pam_environment 或 ~/.config/environment.d/*.conf:桌面环境登录变量,独立于任何 shell
  • /etc/environment:系统范围,适用于所有用户,因为它位于家目录之外,所以很容易忘记

Cron 作业: 通过 crontab 命令管理,而不是你可以 cp 的普通文件:

crontab -l > crontab-backup.txt

使用以下命令恢复:

crontab crontab-backup.txt

其他用户的计划任务需要各自的导出。crontab -l 命令只显示当前用户的作业;作为 root 用户,crontab -u <username> -l 可以检索其他人的作业。系统范围的 cron 文件(如果定制过):

sudo cp -a /etc/cron* /mnt/backup/

systemd 定时器——cron 的现代替代品: 许多当前发行版更喜欢这些而不是 cron,并且它们根本不会出现在 crontab -l 中。你自己的定时器是位于以下位置的普通单元文件:

~/.config/systemd/user/

请将此与你的点文件一起备份。运行 systemctl --user list-timers 查看实际处于活动状态的定时器,然后再假设 cron 涵盖了你安排的所有内容。

10. 许可证密钥和双因素认证/恢复码

这是唯一一类无法通过重新下载或重装来恢复的数据:所有权证明和身份证明。

1. 许可证密钥:

应用商店或订阅之外的付费软件,尤其是那些多年前通过电子邮件发送给你的密钥。在重装前妥善记录下来;不要依赖“它在我收件箱的某个地方”的记忆。

2. 双因素认证和恢复码:

如果你的身份验证器应用(Google Authenticator、Aegis、andOTP)或本地密码管理器的 TOTP 存储仅存在于这台机器上,那么在没有事先备份的情况下重装可能会让你无法访问电子邮件、银行、GitHub 甚至你的密码管理器本身。

恢复是按服务进行的。有些需要身份验证,可能需要几天时间,而有些账户根本没有恢复路径。

重装前:

  • 导出你的身份验证器应用的数据(大多数都有内置的备份功能,在假设没有之前请先检查)
  • 确认你已为重要账户保存了恢复/备份码,并存储在你即将擦除的机器之外的其他地方
  • 如果不确定某个双因素认证方法是云同步的还是仅本地的,在验证之前请将其视为仅本地的

11. 压缩和验证

如果你想要一个单独的归档文件而不是一个松散的文件夹:

tar -cvJf backup.tar.xz /mnt/backup

然后确认备份实际完成:

du -sh /home/$USER
du -sh /mnt/backup/home

或者进行完整比较:

diff -rq /home/$USER /mnt/backup/home

完整清单

并非每一行都适用于每个人。只需跳过不适合你设置的内容,但请将第 10 行视为不可协商的,无论你的系统定制程度如何。我在这里故意将其列在首位,即使它在上述指南中出现在最后,因为这是在你接触任何其他内容之前值得确认的一个类别。

图形化备份应用

有几个 GUI 备份工具可以使这个过程容易得多,特别是如果你是 Linux 新手。以下是我推荐的工具:

1. Pika Backup

Pika Backup 正在作为 GNOME 生态系统的一部分积极开发。它仍然是 BorgBackup 的现代 GUI 前端,旨在用于个人数据备份,而不是完整的系统映像。功能包括计划备份、加密、去重、本地和远程仓库,以及用于恢复的文件浏览。

最适合:

  • 家目录备份
  • 外部 USB 驱动器
  • NAS 或 SSH 备份
  • 想要现代界面的用户

不适合:

  • 完整的操作系统恢复

状态: 积极维护

GitLab:https://gitlab.gnome.org/World/pika-backup

2. Déjà Dup

Déjà Dup 是一个简单的备份工具。它隐藏了以正确方式(加密、异地、定期)进行备份的复杂性,并在后台使用 Restic。

最适合:

  • 初学者
  • 计划备份
  • 外部驱动器
  • 云存储
  • 恢复单个文件

它仍然是最简单的“设置后就不用管”的备份应用之一。

状态: 积极维护

网站: https://apps.gnome.org/DejaDup/

3. Timeshift

Timeshift 不是个人文件备份程序。它创建你的 Linux 系统的快照,以便你可以在以下情况后回滚:

  • 错误的软件包更新
  • 损坏的驱动程序
  • 失败的升级
  • 配置错误

一个注意事项是,在某些发行版上(特别是 Fedora 的默认 Btrfs 布局),用户通常更喜欢替代方案,因为 Btrfs 子卷布局存在差异。社区讨论在这些情况下经常推荐像 Btrfs Assistant 这样的工具。

状态: 积极维护

GitHub: https://github.com/linuxmint/timeshift

4. Rescuezilla

Rescuezilla 继续被视为 Clonezilla 的图形化替代品。

当你想要以下内容时使用它:

  • 整个磁盘的映像
  • 操作系统 + 文件 + 引导加载程序
  • 轻松恢复到相同驱动器或替换驱动器

它基本上是 Linux 上最接近 Macrium Reflect 或旧版 Norton Ghost 等工具的东西。

状态: 积极维护

GitHub: https://github.com/rescuezilla/rescuezilla

我的偏好:

我给 Linux 新用户的建议:

如果有人问,“我只想重装 Linux 而不丢失我的东西,”我会建议:

  1. 安装 Pika Backup(如果已安装,则使用 Déjà Dup)。
  2. 将你的整个家目录备份到外部驱动器。
  3. 在进行重大系统升级之前,创建一个 Timeshift 快照(或者如果适用,使用你的发行版的原生快照机制)。
  4. 如果你要更换磁盘或想要一个完整的回退方案,创建一个 Rescuezilla 映像。

我们已经审查并发布了更多备份工具。请查看我们的备份工具类别以获取更多详细信息。

常见问题解答

问:如果我正在复制整个家目录,我真的需要单独备份我的 SSH 密钥吗?

答:如果你使用完整的 rsync 命令,~/.ssh 已经包含在内。单独的章节是为那些进行选择性备份而不是完整家目录复制的读者准备的。

问:复制我的 ~/.gnupg 文件夹可以作为 GPG 备份吗?

答:不可靠。自 GnuPG 2.1 起,私钥的存储方式不同,原始复制可能产生一个看起来正常但无法解密或签名的密钥环。请改用 gpg --export-secret-keys --export-options backup 代替。

问:如果我丢失了双因素认证恢复码和我的身份验证器应用,会发生什么?

答:恢复是按服务进行的。有些允许你通过支持验证身份(可能需要几天时间),而有些账户根本没有恢复路径。这就是为什么它被标记为在重装任何东西之前要检查的最高优先级项目。

问:我需要单独备份 Flatpak 和 Snap 应用吗?

答:是的。apt/dnf/pacman 软件包列表不包括 Flatpak 或 Snap 应用。每个都需要自己的导出命令。我们在上面的已安装软件包列表部分已经介绍过。

问:有没有图形化的备份应用可以轻松备份文件?

答:是的,有很多。流行的工具包括 Pika Backup、Deja Dup、BorgBackup 和 Timeshift 等。这些用于文件和文件夹备份。如果你想备份整个系统,请使用像 Rescuezilla 这样的磁盘克隆工具。

关键要点

  • Linux 上的“数据”意味着不仅仅是文件。它包括身份凭证(SSH/GPG/双因素认证)、配置(点文件、环境变量)、系统状态(已安装的软件包)和应用记忆(设置,而不仅仅是数据文件)。
  • 一个单一的 rsync 备份你的家目录可以在一次操作中覆盖大多数个人数据,但不包括已安装的软件包、GPG 密钥环、数据库或任何位于 ~ 之外的内容。
  • Firefox 在 136 版本(2026 年 1 月)更改了其默认配置文件位置。请检查 about:support,而不是假设旧的 ~/.mozilla 路径。
  • 永远不要直接复制 ~/.gnupg。使用 gpg 配合 --export 选项,否则你恢复的密钥环可能会在解密或签名时静默失败。
  • 双因素认证恢复码和许可证密钥是本指南中唯一真正不可恢复的类别。请在备份其他任何内容之前确认这些已备份。
  • 如果你不习惯 Linux 命令行环境,请使用合适的 GUI 备份应用。

推荐阅读: