今天我了解到 2023 年 12 月有一个有缺陷的 Debian 内核版本导致 ext4 数据损坏(错误 1057843)。
通过搜索 /var/log/aptitude 和 /var/log/apt 日志,我注意到 /usr/bin/unattended-upgrade 安装了有问题的内核版本一整天。
年表:
- 2023 年 9 月 9 日 17:53 手动重启系统
- 2023 年 10 月 7 日 20:02 通过“aptitude”手动升级:linux-image-amd64:amd64 6.1.52-1 -> 6.1.55-1
- 2023 年 12 月 10 日 06:41 无人值守的“apt”升级:linux-image-amd64:amd64 6.1.55-1 => 6.1.64-1(安装了错误版本)
- 2023 年 12 月 11 日 07:00 无人值守的“apt”升级:linux-image-amd64:amd64 6.1.64-1 => 6.1.66-1(已安装固定版本)
- 2023 年 12 月 16 日 12:23 通过“aptitude”手动升级:linux-image-amd64:amd64 6.1.66-1 -> 6.1.67-1
- 2023 年 12 月 18 日 18:39 手动重启系统
尽管在12月10日安装了有问题的内核版本,但系统并未重新启动。我是否可以假设我不会受到数据损坏错误的影响,因为有问题的内核无法启动?我不能 100% 确定 ext4 文件系统代码是否完全嵌入到内核中,或者对 ext4 模块的更改是否可以应用于正在运行的系统。
答案1
据我了解,您不会受到此错误的影响。
ext4
将模块更改应用于当前运行的无错误内核的唯一方法是首先卸载所有 ext4 文件系统,然后卸载旧ext4
模块并从有问题的内核版本强制加载该模块(覆盖内核的偏好以加载适用于该特定内核版本的旧版本模块),然后重新挂载所有文件系统。如果你的根文件系统是ext4
,那就更复杂了。
我所知道的发行版还没有做过这样的事情,因为它会像重新启动一样对应用程序造成类似的中断,所以不会有任何好处。
ext4
当安装任何文件系统时,当前版本的ext4.ko
内核模块正在使用中并且无法卸载。
Debian 12 内核似乎包含该CONFIG_LIVEPATCH
选项,这将允许正在运行的内核/模块代码的修补,但需要为要修补的特定内核版本提供特定的 livepatch 模块。据我所知,Debian实际上并没有使用过这个功能。
无论如何,如果您应用了任何实时补丁,您应该会看到它们被列为额外的内核模块(大概命名为livepatch-<something>.ko
),并且也在/sys/kernel/livepatch/
.