从 Debian 10 升级到 Debian 11 (Bullseye) 的完整指南 – wiki基地


从 Debian 10 (Buster) 升级到 Debian 11 (Bullseye) 的终极完整指南

引言

Debian 作为最稳定、最可靠的 Linux 发行版之一,其大版本升级是一项严谨而重要的任务。Debian 11 “Bullseye” 于 2021 年 8 月 14 日正式发布,带来了诸多新特性,包括更新的 Linux 内核 (5.10 LTS)、更新的软件包(如 GCC 10.2, OpenSSH 8.4p1, Nginx 1.18, PostgreSQL 13 等)、改进的 exFAT 文件系统支持以及对打印和扫描的无驱动支持。

将您的服务器或个人电脑从 Debian 10 “Buster” 升级到 “Bullseye”,不仅可以享受到这些新功能和性能提升,更重要的是,可以继续获得长期的安全支持。

本指南将为您提供一个全面、细致、分步的操作流程,旨在最大程度地降低升级风险,确保过程的顺利进行。本指南适用于有一定 Linux 命令行基础的系统管理员和高级用户。

核心原则: 在进行任何重大系统变更之前,备份、备份、再备份! 这是一个不可逾越的黄金法则。虽然 Debian 的升级过程非常成熟和可靠,但硬件故障、网络中断或意外的软件包冲突仍有可能发生。一个完整的、可验证的备份是您唯一的“后悔药”。


第一阶段:全面准备工作(至关重要)

准备工作是整个升级过程中最耗时但也是最重要的阶段。充分的准备可以规避 99% 的潜在问题。

第 1 步:创建并验证全系统备份

在触碰任何系统配置之前,您必须创建一个完整的系统备份。根据您的环境,备份策略可能有所不同:

  • 对于虚拟机(VM): 最简单的方法是关闭虚拟机并创建一个完整的快照(Snapshot)。如果升级失败,您可以瞬间回滚到升级前的状态。
  • 对于物理服务器或云主机:
    1. 关键数据备份: 备份所有重要数据目录。这通常包括:
      • 用户主目录:/home
      • 网站数据:/var/www 或其他自定义路径
      • 数据库转储:使用 mysqldumppg_dumpall 等工具导出所有数据库。
      • 邮件数据:/var/mail/var/vmail
    2. 系统配置备份: 备份 /etc 目录,它包含了您系统中几乎所有的配置文件。
      bash
      sudo tar -czvf /mnt/backup/etc-backup-$(date +%F).tar.gz /etc
    3. 完整磁盘镜像(推荐): 如果条件允许,使用 ddClonezillarsync 创建一个完整的块级或文件级系统镜像。这是最保险的方式。例如,使用 rsync 备份整个根文件系统:
      bash
      sudo rsync -aAXv --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} / /path/to/backup/directory/
  • 软件包列表备份: 保存当前已安装的软件包列表,以备不时之需。
    bash
    dpkg --get-selections | sudo tee /root/buster-packages.list

验证备份: 无论使用何种方法,请务必抽查备份文件的完整性和可读性,确保在需要时能够成功恢复。

第 2 步:将现有 Debian 10 系统更新到最新状态

确保您当前的 Buster 系统是完全更新的,这有助于解决升级过程中可能出现的依赖性问题。

bash
sudo apt update
sudo apt upgrade
sudo apt full-upgrade

执行完毕后,清理不再需要的软件包和缓存:

bash
sudo apt autoremove --purge
sudo apt clean

第 3 步:检查系统健康状况

一个“干净”的系统是成功升级的前提。

  • 检查是否存在“暂存”(held)的软件包: 这些软件包不会被自动升级,可能会导致冲突。
    bash
    apt-mark showhold

    如果输出不为空,请使用 sudo apt-mark unhold <package_name> 解除暂存,除非您有特殊理由要保持它们。

  • 检查是否存在损坏或配置不完整的软件包:
    bash
    sudo dpkg --audit


    bash
    sudo dpkg -C

    如果发现问题,请根据提示尝试使用 sudo apt -f installsudo dpkg --configure -a 来修复它们。

  • 检查并处理第三方源: 第三方软件源(例如来自 PPA 或其他非官方仓库)是升级失败的主要原因之一。在升级前,强烈建议禁用或移除它们。

    1. 检查主源文件:cat /etc/apt/sources.list
    2. 检查源目录下的文件:ls -l /etc/apt/sources.list.d/
    3. 对于每一个第三方源文件,要么在文件名前添加 # 注释掉每一行,要么直接删除该文件。升级成功后,您可以再检查这些源是否支持 Bullseye,并相应地更新它们。

第 4 步:检查磁盘空间

升级过程会下载大量新软件包,因此需要足够的可用磁盘空间。通常,为根分区 //var 分区预留几个 GB 的空间是明智的。

使用 df -h 命令检查可用空间:

bash
df -h

如果空间不足,请清理不必要的文件,或考虑扩展分区。

第 5 步:启动一个安全的终端会话(强烈推荐)

对于通过 SSH 远程升级的服务器,网络中断是致命的。一旦 SSH 连接在升级中途断开,系统可能处于一个不完整且无法使用的状态。为了防止这种情况,请使用 screentmux 终端复用工具。

使用 screen
1. 如果未安装,先安装它:sudo apt install screen
2. 启动一个新的 screen 会话:screen -S debian-upgrade
3. 现在您就在一个新的虚拟终端中了。即使 SSH 断开,这个会话也会在后台持续运行。您可以随时重新连接服务器并使用 screen -r debian-upgrade 命令恢复会话。

使用 tmux
1. 如果未安装,先安装它:sudo apt install tmux
2. 启动一个新的 tmux 会话:tmux new -s debian-upgrade
3. 恢复会话的命令是 tmux attach -t debian-upgrade

从现在开始,请确保后续所有升级命令都在这个 screentmux 会话中执行。


第二阶段:执行系统升级

当所有准备工作就绪,我们可以开始真正的升级过程。

第 6 步:修改 APT 源列表

这是升级的核心步骤:将 APT 的软件源从 buster 指向 bullseye

您可以手动编辑 /etc/apt/sources.list 文件,也可以使用 sed 命令进行全局替换。使用 sed 更快、更不容易出错。

首先,备份当前的源文件:
bash
sudo cp /etc/apt/sources.list /etc/apt/sources.list.buster
sudo cp -r /etc/apt/sources.list.d/ /etc/apt/sources.list.d.buster

然后,使用 sed 替换所有 busterbullseye
bash
sudo sed -i 's/buster/bullseye/g' /etc/apt/sources.list

如果您使用了安全更新源,也要替换 buster/updates
bash
sudo sed -i 's/buster\/updates/bullseye-security/g' /etc/apt/sources.list

别忘了 sources.list.d 目录下的文件(如果您有的话):
bash
sudo sed -i 's/buster/bullseye/g' /etc/apt/sources.list.d/*.list

替换完成后,您的 /etc/apt/sources.list 文件内容应该类似这样:

“`
deb http://deb.debian.org/debian/ bullseye main contrib non-free
deb-src http://deb.debian.org/debian/ bullseye main contrib non-free

deb http://security.debian.org/debian-security bullseye-security main contrib non-free
deb-src http://security.debian.org/debian-security bullseye-security main contrib non-free

deb http://deb.debian.org/debian/ bullseye-updates main contrib non-free
deb-src http://deb.debian.org/debian/ bullseye-updates main contrib non-free
“`

第 7 步:更新软件包列表

修改源之后,立即更新本地的软件包索引,以从新的 Bullseye 源获取信息。

bash
sudo apt update

这个过程会列出大量可以更新的软件包。请仔细查看输出,确保没有明显的错误或警告信息。

第 8 步:执行最小化升级(推荐的两步升级法)

为了让升级过程更平滑,我们分两步进行。第一步是进行最小化升级,只升级那些不需要安装新软件包或删除旧软件包的包。

bash
sudo apt upgrade --without-new-pkgs

这个过程会下载并安装一部分软件包。耐心等待其完成。在过程中,您可能会看到一些关于新配置文件的提示。

第 9 步:执行完整的系统升级

这是最关键的一步,将进行全面的系统升级。full-upgrade 命令会智能地处理依赖关系,包括安装必要的新软件包和移除与新版本冲突的旧软件包。

bash
sudo apt full-upgrade

在执行此命令后,请注意以下几点:

  • 阅读提示: 系统会显示一个将要进行的更改的详细列表:多少软件包将被升级、多少将被新安装、多少将被移除。请仔细阅读这个列表! 如果看到任何关键软件包(如 systemd, libc6, linux-image-* 等)将被移除,这通常是危险信号,意味着可能存在严重的依赖冲突。此时应选择 N 中止升级,并回头检查您的源列表或是否存在暂存/第三方软件包问题。
  • 漫长的等待: 这个过程会下载数百 MB 甚至数 GB 的软件包,并且安装过程会持续很长时间(从 30 分钟到数小时不等,取决于您的网速和机器性能)。
  • 交互式提示:
    • 配置文件冲突: 当一个软件包的新版本包含了一个与您本地修改过的配置文件不同的版本时,dpkg 会询问您如何处理。通常有以下选项:
      • YI:安装软件包维护者的新版本(推荐,除非您有非常重要的自定义配置)。
      • NO:保留您本地的旧版本。
      • D:显示两者差异。
      • Z:启动一个 shell 来检查情况。
        对于大多数系统核心服务,选择接受维护者的新版本是更安全的选择。 您可以在升级后通过比较备份(/etc 的备份)来重新应用您的自定义设置。
    • 服务重启: 升级过程中,一些库(如 libc6)更新后,系统会提示哪些服务需要重启。通常选择自动重启即可。
    • 新闻(News): 有时会显示来自 apt-listchanges 的重要更新信息。建议花时间阅读,特别是关于核心组件的变更。

请保持耐心,让整个过程自然完成。


第三阶段:升级后的清理与验证

升级命令执行完毕并不意味着大功告成,后续的清理和验证同样重要。

第 10 步:重启系统

为了让系统加载新的 Bullseye 内核和所有更新过的服务,必须进行重启。

bash
sudo systemctl reboot

第 11 步:验证升级结果

重启后,重新登录您的系统(如果是远程,记得 SSH 端口、防火墙规则等是否正常)。

  • 检查 Debian 版本:
    bash
    lsb_release -a

    输出应该明确显示 Codename: bullseyeRelease: 11

  • 检查内核版本:
    bash
    uname -r

    输出应该是 5.10.0-xx-amd64 或类似的以 5.10 开头的版本号。

第 12 步:清理过时的软件包

升级完成后,系统中会残留大量来自 Debian 10 的、不再被任何软件包依赖的旧库和软件包。使用 apt autoremove 可以安全地清理它们。

bash
sudo apt autoremove --purge

--purge 选项会一并删除它们的配置文件,彻底释放空间。

第 13 步:重新启用第三方源(可选)

如果您在准备阶段禁用了第三方软件源,现在可以考虑重新启用它们了。
1. 访问这些软件的官方网站,确认它们是否支持 Debian 11 (Bullseye)。
2. 如果支持,编辑相应的 /etc/apt/sources.list.d/ 文件,将 buster 更改为 bullseye
3. 然后再次运行 sudo apt update

第 14 步:检查关键服务状态

最后,全面检查您的核心服务是否正常运行。
* 检查是否有失败的服务单元:
bash
systemctl --failed

如果列表不为空,使用 journalctl -u <service_name>systemctl status <service_name> 来排查问题。

  • 手动测试应用:
    • 如果这是个 Web 服务器,访问您的网站,检查 PHP/Python/Node.js 应用是否正常工作。
    • 如果这是个数据库服务器,尝试连接数据库并执行查询。
    • 检查防火墙规则、SSH 配置、定时任务(Cron jobs)等是否依然符合预期。

常见问题与解决方案 (FAQ)

  • 问:升级过程中 SSH 断开了怎么办?

    • 答:这就是为什么我们强调使用 screentmux。重新登录服务器,然后使用 screen -rtmux attach 恢复会话,升级过程会继续在您眼前进行。
  • 问:我遇到了 “dependency problems – leaving unconfigured” 的错误。

    • 答:这通常意味着有复杂的依赖冲突。首先尝试运行 sudo apt -f install,APT 会尝试自动修复这些问题。如果不行,请仔细阅读错误信息,找出是哪个软件包引发了问题,检查它是否来自第三方源,或者是否有被暂存。
  • 问:升级后我的某个自定义应用无法启动了。

    • 答:这很可能是因为它依赖的某个库版本发生了变化。检查应用的日志文件以获取详细错误。如果是编译安装的应用,您可能需要针对 Bullseye 的新库(如新的 OpenSSL, glibc)重新编译它。

结论

恭喜您!如果一切顺利,您的系统现在已经成功运行在稳定、现代且功能强大的 Debian 11 “Bullseye” 之上。您不仅获得了最新的软件和内核,也为未来几年的系统安全和稳定打下了坚实的基础。

Debian 的大版本升级虽然步骤繁多,但其设计精良,只要遵循官方推荐的最佳实践——充分准备、谨慎操作、仔细验证——整个过程就能如丝般顺滑。记住,在系统管理的世界里,耐心和细致永远是您最好的朋友。

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部