为什么今天的内核更新需要半GB磁盘空间?

Mat*_*hew 20 package-management kernel

我收到了 Ubuntu 20.04 更新的通知。我总是检查更新列表,以确定更新之前需要进行多严重的备份。今天的内核更新(5.13.0.28.31~20.04.15)需要半GB额外磁盘空间:

$ sudo apt 升级
...
将安装以下新软件包:
  linux-headers-5.13.0-28-generic linux-hwe-5.13-headers-5.13.0-28
  linux-image-5.13.0-28-generic linux-modules-5.13.0-28-generic
  linux-modules-extra-5.13.0-28-generic
以下软件包将被升级:
  linux-generic-hwe-20.04 linux-headers-generic-hwe-20.04
  linux-image-generic-hwe-20.04 linux-libc-dev
4为升级,5为新安装,0为翻新,0为不升级
需要获取 95.0 MB 的档案。
此操作后,将使用 508 MB 的额外磁盘空间

我知道Ubuntu允许多个内核共存,因此该内核必须使用新的磁盘空间而不是替换现有软件,但它仍然看起来很大。我没有做笔记,但我认为内核更新通常是几百 MB。我之前是否从未注意到内核的大小,或者今天的更新有什么不寻常的地方?

Oli*_*Oli 43

这里会发生一些不同的事情,具体取决于您的好奇心所在......

\n

内核更新作为独立包提供,而不是简单的升级

\n

大多数系统的打包方式都是这样的:当提取升级时,它会替换上一个版本。内核打包时,其版本包含在包名称中。如果出现问题,您可以回退到以前的版本。

\n

您不需要保留旧内核。一旦您知道新的有效,您就可以删除旧的。sudo apt autoremove将为您执行此操作,但请确保新版本首先可以工作。

\n

内核很大(并且正在变得越来越大)

\n

我们已经确定了为什么安装更新的内核会占用额外的空间,但为什么会占用这么多空间呢?

\n

Ubuntu 附带了一个为多种硬件而构建的内核。Canonical 希望它在插入时能够正常工作\xe2\x84\xa2。每个次要版本都添加了更多驱动程序。旧驱动程序被删除的速度通常要慢得多。

\n

因此,随着时间的推移,我们预计内核的大小会逐渐增大。Bionic 的 4.15.0-101.102 大约是 Focal 的 HWE 5.13.0 大小的 60%。这主要是通过更少的模块来表达的,尤其是在modules-extra.

\n

喜欢将其视为进步。对于我们大多数人来说,磁盘空间和带宽都很便宜,因此优先考虑驱动程序支持是有意义的。我不认为我们在这里看到的情况有什么异常。

\n

但为什么他们的包裹这么小呢?94MB 的下载如何占用 508MB 的磁盘空间?

\n

它们压缩得[真的]很好。您可以通过下载软件包并使用一些脚本来公开其解压后的大小来查看这一点。

\n
    \n
  • 获取包:apt download linux-generic-hwe-20.04 linux-headers-generic-hwe-20.04 linux-image-generic-hwe-20.04 linux-headers-5.13.0-28-generic linux-hwe-5.13-headers-5.13.0-28 linux-image-5.13.0-28-generic linux-modules-5.13.0-28-generic linux-modules-extra-5.13.0-28-generic
  • \n
  • 将它们的“物理”大小与内容大小进行比较:for f in *.deb; do stat --printf="%5n\\t%s\\t" "$f"; dpkg -c $f; done
  • \n
\n

那时这还很原始。您可以将其拖入 Calc 以显示总数和百分比:

\n

在此输入图像描述

\n

总磁盘空间略多于 508MB(在 DKMS 之前也是如此),但也许您已经下载了一些软件包。无论哪种方式,您都可以看到一些包要大得多。

\n

我想要更小的内核!

\n

你可以拥有它们。只要查看 module-extra 包内容,我就可以看到数百兆字节的我不需要的东西。唉,有一些我确实需要。

\n

可以(相当容易)构建自己的内核。有构建脚本(我当前正在使用linux-tkg)。目前它在磁盘上有 450MB,但我可以通过一个助手来运行它,比如make localmodconfig将其构建的模块缩减为当前加载的内容。这将删除大约 95% 的模块。

\n

这种方法的问题是它需要 CPU 时间,以及当有更新时我更新它的时间。你只能靠自己了。大多数人使用维护的内核会更好。

\n

  • @AustinHemmelgarn 我同意,你绝对需要提前计划“localmodconfig”。添加回来的东西可能很费力。提前定期运行像 [modprobed-db](https://github.com/graysky2/modprobed-db) 这样的工具对于跟踪您在一段时间内实际使用的模块很有用。但是,是的,即使转储您不使用的网络适配器也可以节省 50MB。冲洗并重复存储控制器、图形适配器,您可以毫不费力地快速达到 150MB。 (2认同)

Err*_*404 22

为什么今天的内核更新需要半GB磁盘空间?

它的内涵远不止表面所见。尽管您看到将使用 508MB 的磁盘,但这是否意味着该存储是永久的?运行一个简单的命令后,将释放近 450MB 的存储空间。

通常,当发生内核升级时,必须放置新的文件和目录。但是,它不会自动删除旧的。因此,磁盘使用量会增加。

升级内核后,您可以通过运行以下命令删除旧内核模块的总和:

sudo apt autoremove
Run Code Online (Sandbox Code Playgroud)

通过删除最旧的内核和模块,总共将释放近 450MB 的磁盘空间。


问答

为什么今天的内核更新需要半GB磁盘空间?

这是因为它必须放置新文件。它不会删除旧文件,从而导致磁盘使用时间延长。

我没有做笔记,但我认为内核更新通常是几百 MB

是的,他们是,事实上,这次升级只有60-80MB。

今天的更新有什么不寻常的地方吗?

是的,这是一个重大的内核升级。您可能不知道 Ubuntu 20.04 很快就会升级到第四阶段。所以你会得到很多像这样的升级。为 Ubuntu 20.04.04 做好准备!!


为什么内核这么大?

Linux 内核管理和控制设备或计算机的硬件资源,如 I/O(网络、存储、图形和各种用户界面设备等)、内存和 CPU。每次新的升级到来时,您都会获得更新的驱动程序和资源,以获得更好的硬件资源。

如果您使用的是带有定制驱动程序的无线卡,那么您必须在新内核启动后重新编译驱动程序。但是,其他模块呢?您不需要的模块仍在您的系统中。iwlwifi为什么我用的时候有rtw99?Linux 内核附带了数千种适用于各种设备的不同驱动程序。默认情况下,apt将安装所有这些。这是您应该自己编译 Linux 内核的主要原因之一。要自己编译 Linux 内核而不做不必要的事情,请参阅此线程,注释#2。


下载大小和安装大小之间的差异。

为什么显示:

需要获取 95.0 MB 的档案。

即使它说“将使用 508 MB 的额外磁盘空间”?

这是因为压缩。

.deb称为“存档”格式,使用无损压缩算法将大量文件容纳在单个文件中,.deb而不会增加其大小。您可以运行以下命令来查看安装大小和下载大小之间的差异。

apt show linux-generic-hwe-20.04 linux-headers-generic-hwe-20.04 linux-image-generic-hwe-20.04 linux-headers-5.13.0-28-generic linux-hwe-5.13-headers-5.13.0-28 linux-image-5.13.0-28-generic linux-modules-5.13.0-28-generic linux-modules-extra-5.13.0-28-generic | egrep "Size|Package" | grep -v APT
Run Code Online (Sandbox Code Playgroud)

这是一个显示差异的表格:

包裹 安装尺寸 下载大小
软件包:linux-generic-hwe-20.04 安装大小:19.5 kB 下载大小:1,928 B
软件包:linux-headers-generic-hwe-20.04 安装大小:19.5 kB 下载大小:2,516 B
软件包:linux-image-generic-hwe-20.04 安装大小:19.5 kB 下载大小:2,628 B
软件包:linux-headers-5.13.0-28-generic 安装大小:24.5 MB 下载大小:2,569 kB
软件包:linux-hwe-5.13-headers-5.13.0-28 安装大小:75.9 MB 下载大小:11.8 MB
软件包:linux-image-5.13.0-28-generic 安装大小:10.2 MB 下载大小:10.0 MB
软件包:linux-modules-5.13.0-28-generic 安装大小:99.3 MB 下载大小:18.3 MB
软件包:linux-modules-extra-5.13.0-28-generic 安装大小:298 MB 下载大小:51.1 MB

我应该删除旧内核吗?

是的,您可以删除旧内核,但这取决于您操作系统的方式。

  • 如果您有每周/每月破坏系统一次的习惯,那么保留多个内核是个好主意。

  • 如果您真诚地使用您的系统而不进行实验,那么删除旧内核是个好主意。

如何完全删除旧内核?

要完全清除所有旧内核:

apt list --installed | grep linux-image | awk '{ print $2 }' | sort -V | sed -n '/'`uname -r`'/q;p' | xargs sudo apt-get -y purge
Run Code Online (Sandbox Code Playgroud)

仅清除 EoSS 内核:

sudo apt autopurge
Run Code Online (Sandbox Code Playgroud)

或者,正如raj 评论的那样,您可以等待软件更新程序弹出并要求删除旧内核。

  • 没有 GUI 就很难使用台式计算机(您将如何浏览网页?):) 并且因为软件更新程序无论如何都会处理更新,所以我没有看到任何异常,因为它要求我安装新的更新和删除旧的未使用的内核。它不会在“很长时间”之后发生,但通常在安装新内核版本后几个小时内发生,有时在安装新内核后立即发生。我认为这是一种正确的操作方式。顺便提一句。与手动运行 `apt` 相比,我绝对更喜欢 Synaptic :) (2认同)