Debian 13(Trixie)发布后,不少运行 Debian 12(Bookworm)的服务器都可以考虑进行大版本升级。
本文记录一次真实的 Debian 12 → Debian 13 服务器升级过程,包括升级前准备、更换 Trixie 软件源、APT 缓存异常、分阶段升级、OpenSSH 配置文件处理、内核升级以及最终验证。
适用环境: Debian 12 Bookworm、amd64 独立服务器/VPS
目标版本: Debian 13 Trixie
本文测试软件源: 阿里云 Debian 镜像
操作方式: SSH 远程升级
生产服务器操作前务必做好数据备份,并建议准备 IPMI、iDRAC、KVM、VNC 等带外管理方式,避免升级过程中 SSH 或网络异常导致服务器失联。
一、升级前先把 Debian 12 更新到最新
不要直接修改软件源。
首先在 Debian 12 下执行:
apt update
apt upgrade -y
apt full-upgrade -y
本次实际操作中,Bookworm 阶段检测到了 76 个可升级软件包,并安装了新的 linux-image-6.1.0-53-amd64 内核。
升级完成后:
apt autoremove -y
apt clean
检查软件包状态:
dpkg --audit
apt-mark showhold
如果 dpkg --audit 没有输出,一般说明当前没有处于异常状态的软件包。
二、检查第三方软件源
正式跨版本之前执行:
grep -R --line-number -E '^(deb|deb-src|Types:)' \
/etc/apt/sources.list /etc/apt/sources.list.d/ 2>/dev/null
本次测试服务器只有 Debian 官方镜像,没有 Docker、MariaDB、NodeSource 等第三方 APT 源,sources.list.d 也是空目录。
如果你的服务器存在第三方源,不建议直接把所有 bookworm 批量替换成 trixie。应该先确认对应软件仓库是否支持 Debian 13。
三、备份 Debian 12 软件源
执行:
cp /etc/apt/sources.list /etc/apt/sources.list.bookworm
这样出现问题时还有原始 Bookworm 源可以参考。
查看:
cat /etc/apt/sources.list
本次服务器原来的源为:
deb http://mirrors.aliyun.com/debian bookworm main contrib non-free-firmware
deb http://mirrors.aliyun.com/debian bookworm-updates main contrib non-free-firmware
deb http://mirrors.aliyun.com/debian-security bookworm-security main contrib non-free-firmware
四、将 Debian 12 Bookworm 源修改为 Debian 13 Trixie
可以执行:
sed -i 's/bookworm/trixie/g' /etc/apt/sources.list
修改完成后:
cat /etc/apt/sources.list
本次实际使用:
deb http://mirrors.aliyun.com/debian trixie main contrib non-free-firmware
deb http://mirrors.aliyun.com/debian trixie-updates main contrib non-free-firmware
deb http://mirrors.aliyun.com/debian-security trixie-security main contrib non-free-firmware
日志也确认三个软件源均已正确修改为 Trixie。
五、一个很容易踩的坑:修改源后显示 0 upgraded
这次实际升级就遇到了一个比较典型的问题。
修改 /etc/apt/sources.list 后直接执行:
apt upgrade --without-new-pkgs
结果却显示:
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
继续:
apt full-upgrade
仍然是:
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
这并不代表 Debian 12 已经升级成 Debian 13。
实际上,服务器虽然已经修改了软件源,但 APT 软件包索引还没有正确刷新。本次实机确实连续出现了这一现象。
解决方法
清理旧的软件包索引:
rm -rf /var/lib/apt/lists/*
apt clean
apt update
随后 APT 开始正确获取:
trixie InRelease
trixie-updates InRelease
trixie-security InRelease
trixie/main amd64 Packages
重新刷新后,本次服务器立即检测到了:
225 packages can be upgraded
也就是说,225 个软件包等待从 Debian 12 升级到 Debian 13。
因此,如果你换源后看到:
0 upgraded
不要直接认为升级完成。
六、确认 APT 确实指向 Debian 13
推荐执行:
apt policy base-files libc6 systemd
本次服务器得到:
base-files:
Installed: 12.4+deb12u15
Candidate: 13.8+deb13u6
libc6:
Installed: 2.36-9+deb12u14
Candidate: 2.41-12+deb13u3
systemd:
Installed: 252.39-1~deb12u2
Candidate: 257.13-1~deb13u1
而且 Candidate 软件包来源均为:
http://mirrors.aliyun.com/debian trixie/main
这才说明 Debian 13 软件源真正生效了。
七、第一阶段升级
确认软件源没有问题后:
apt upgrade --without-new-pkgs
本次实际情况是:
159 upgraded
0 newly installed
0 to remove
66 not upgraded
这里出现几十个:
kept back
是正常现象。
其中包括:
apt
systemd
openssh-server
linux-image-amd64
lvm2
grub
udev
util-linux
等核心组件。
第一阶段实际升级 159 个软件包,另外 66 个留给后续完整升级处理。
八、执行 Debian 13 完整升级
第一阶段完成后执行:
apt full-upgrade
full-upgrade 会允许 APT 为解决依赖关系安装新包或移除/替换旧包,因此这是完成 Debian 12 → Debian 13 跨版本升级的重要一步。
升级过程中不要关闭 SSH 窗口。
远程服务器建议提前使用:
apt install tmux
tmux
然后再执行升级。
九、遇到 sshd_config 配置文件冲突怎么选?
这是本次升级中非常值得记录的一个地方。
升级 openssh-server 时出现:
A new version of configuration file
/etc/ssh/sshd_config is available,
but the version installed currently
has been locally modified.
系统会提供:
install the package maintainer's version
keep the local version currently installed
对于通过 SSH 远程操作,而且修改过 SSH 配置的服务器,我们选择:
keep the local version currently installed
也就是:
保留服务器当前 SSH 配置。
这样可以避免新的默认配置覆盖原来的 SSH 端口、Root 登录、认证方式等设置。
如果你明确知道自己没有修改 SSH 配置,则可以根据实际情况比较新旧文件后再决定。
十、Locale 警告
本次升级过程中还反复出现:
locale: Cannot set LC_CTYPE to default locale:
No such file or directory
locale: Cannot set LC_MESSAGES to default locale:
No such file or directory
locale: Cannot set LC_ALL to default locale:
No such file or directory
日志中可以看到系统设置了:
LC_ALL="en_US.UTF-8"
但对应 Locale 没有正确生成,因此 Perl 和其他程序不断提示警告。
这种情况本次并没有阻止系统完成 Debian 13 升级,但建议升级完成后修复:
apt install locales
dpkg-reconfigure locales
选择:
en_US.UTF-8 UTF-8
然后检查:
locale
十一、检查升级是否完整
完成 full-upgrade 后不要马上重启。
先执行:
dpkg --audit
apt -f install
apt full-upgrade
本次实机最终结果:
Upgrading: 0
Installing: 0
Removing: 0
Not Upgrading: 0
说明待处理的升级已经完成。
十二、确认 Debian 13 已安装
执行:
cat /etc/os-release
本次服务器实际返回:
PRETTY_NAME="Debian GNU/Linux 13 (trixie)"
VERSION_ID="13"
VERSION="13 (trixie)"
VERSION_CODENAME=trixie
DEBIAN_VERSION_FULL=13.6
说明 Debian 用户空间已经成功升级到 Debian GNU/Linux 13 Trixie。
十三、为什么已经 Debian 13,uname -r 还是 6.1?
这是另一个很容易让人误判的问题。
本次执行:
uname -r
当时返回:
6.1.0-32-amd64
但是系统已经:
Debian GNU/Linux 13 (trixie)
这并不代表 Debian 13 升级失败。
原因是:
Linux 内核只有服务器重启后才会切换。
实际上新的 Debian 13 内核已经安装:
/boot/vmlinuz-6.12.107+deb13-amd64
/boot/initrd.img-6.12.107+deb13-amd64
GRUB 也已经成功识别新的 6.12 内核。
因此升级完成、尚未重启时出现:
Debian 13 + Linux 6.1
是正常的。
十四、检查 SSH 和 systemd 服务
在重启前执行:
systemctl --failed
本次服务器返回:
0 loaded units listed.
说明没有发现 failed unit。
继续:
systemctl status ssh --no-pager
结果为:
Active: active (running)
说明 OpenSSH Server 正常运行。
建议进一步检查:
sshd -t
没有任何输出通常表示 SSH 配置语法检查通过。
然后:
ip addr
ip route
确认服务器 IP、网关和默认路由正常。
十五、清理旧 Debian 12 内核和软件包
确认 Debian 13 已经正常安装以后:
apt autoremove
本次系统识别出旧的:
linux-image-6.1.0-53-amd64
可以清理,并释放约:
410 MB
空间。
清理过程中 GRUB 再次发现:
linux-image-6.12.107+deb13-amd64
linux-image-6.1.0-32-amd64
也就是说,新 Debian 13 内核存在,同时还保留了一套旧 6.1 内核作为备用。
生产服务器不建议手工一次性删除所有旧内核。
至少保留一个能够正常启动的旧内核作为回退方案。
十六、重启进入 Debian 13 新内核
全部检查正常后:
reboot
服务器重新上线后执行:
cat /etc/os-release
uname -r
预期应该是:
Debian GNU/Linux 13 (trixie)
以及类似:
6.12.x+deb13-amd64
再执行:
systemctl --failed
systemctl status ssh --no-pager
ip addr
ip route
确认网络和 SSH 正常。
十七、完整命令流程整理
对于与本文环境类似的纯 Debian 12 服务器,可以参考:
# Debian 12 更新到最新
apt update
apt upgrade -y
apt full-upgrade -y
# 检查软件包
dpkg --audit
apt-mark showhold
# 备份软件源
cp /etc/apt/sources.list /etc/apt/sources.list.bookworm
# Bookworm 修改为 Trixie
sed -i 's/bookworm/trixie/g' /etc/apt/sources.list
# 强制刷新 APT 索引
rm -rf /var/lib/apt/lists/*
apt clean
apt update
# 确认 Debian 13 Candidate
apt policy base-files libc6 systemd
# 第一阶段
apt upgrade --without-new-pkgs
# 完整升级
apt full-upgrade
# 检查
dpkg --audit
apt -f install
apt full-upgrade
# 查看系统
cat /etc/os-release
systemctl --failed
systemctl status ssh --no-pager
# 确认新内核
ls -lh /boot/vmlinuz-*
# 清理
apt autoremove
apt clean
# 重启
reboot
重启后:
cat /etc/os-release
uname -r
systemctl --failed
systemctl status ssh --no-pager
ip addr
ip route
十八、本次升级踩坑总结
这次 Debian 12 → Debian 13 实机升级中,最值得注意的是四个问题:
| 问题 | 实际情况 | 处理方式 |
|---|---|---|
| 修改 Trixie 源后仍显示 0 upgraded | APT 索引没有正确刷新 | 清空 /var/lib/apt/lists/* 后重新 apt update |
OpenSSH 提示 sshd_config 被修改 | 本地 SSH 配置与新版本不同 | 远程服务器选择保留本地配置 |
| 大量 Locale warning | en_US.UTF-8 未正确生成 | 升级后安装/重新配置 locales |
| Debian 13 仍显示 Linux 6.1 | 当前运行的还是重启前内核 | 重启后进入 Debian 13 的 6.12 内核 |
其中第一个问题尤其容易造成误判。本次服务器换成 Trixie 后最初连续显示 0 upgraded,清理 APT 索引并重新执行 apt update 后才正确识别出 225 个可升级软件包。
总结
Debian 12 升级 Debian 13 本身并不复杂,真正需要注意的是软件源、APT 索引、SSH 配置、网络配置和新内核启动。
这次实际升级最终已经成功进入:
Debian GNU/Linux 13 (trixie)
并且升级完成后的 SSH 服务保持 active (running),systemd 没有检测到 failed units。
对于 IDC 独立服务器或者远程 VPS,建议始终准备 IPMI/KVM/VNC 等控制台后再进行大版本升级,避免 SSH 或网络配置异常后无法远程恢复。

评论列表 (0条):
加载更多评论 Loading...