如何删除 grub2 中的旧内核(包括文件)?

如何删除 grub2 中的旧内核(包括文件)?

如何删除 Grub2 中的旧内核,包括文件。

使用磁盘使用情况分析器,我发现 Linux 内核位于根目录的 4 个区域:/boot /lib/firmware /lib/modules /usr/src

我们要做的就是,转到每个目录并删除不需要的文件或目录。

对文件使用命令 [rm],对目录使用命令 [rm -r]。您必须使用 [sudo su] 来拥有管理员帐户,或使用 [sudo (command)] 来调用管理员命令。

对于我们的示例,我们将使用 Linux 内核版本 4.4.0-112,您可以选择要删除的版本。

在 /boot = kernels 中所有文件为:abi-4.4.0-112-generic config-4.4.0-112-generic initrd.img-4.4.0-112-generic retpoline-4.4.0-112-generic System.map-4.4.0-112-generic vmliniz-4.4.0-112-generic

(注意:并非所有内核版本都包含上述文件)

在 /lib/firmware = 内核位于子目录中:4.4.0-112-generic

在 /lib/modules = 内核位于子目录中:4.4.0-112-generic

在 /usr/src = 内核位于子目录中:linux-headers-4.4.0-112 linux-headers-4.4.0-112-generic

现在我们需要做的就是使用命令[update-grub]

对于您删除的每个内核,这将释放大约 300MB 的硬盘空间。

请注意,我正在使用 Ubuntu 16.04 Xenial。

如果有人知道如何在 GUI 中删除文件,请告诉我,这会容易得多。

答案1

sudo apt autoremove就可以了。

它将保留两个最新的内核,并删除其余的。它还将删除不再需要的其他软件包,即那些作为其他软件包的依赖项自动安装但后来被卸载的软件包的软件包。

答案2

Ubuntu 18.04 之前版本

列出旧内核:

dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d'

卸载旧内核:

dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d' | xargs sudo apt-get -y purge


Ubuntu 18.04 及更高版本

从 18.04 开始,应该应用这两个行,因为前一个行可能会卸载其他软件包

dpkg --list | grep 'linux-image' | awk '{ print $2 }' | sort -V | sed -n '/'"$(uname -r | sed "s/\([0-9.-]*\)-\([^0-9]\+\)/\1/")"'/q;p' | xargs apt-get -y purge
dpkg --list | grep 'linux-headers' | awk '{ print $2 }' | sort -V | sed -n '/'"$(uname -r | sed "s/\([0-9.-]*\)-\([^0-9]\+\)/\1/")"'/q;p' | xargs apt-get -y purge

卸载内核将运行 grub 重新配置过程

答案3

使用包管理器卸载不再需要的内核,这将处理文件以及 grub 条目,只要您没有进行自定义条目和自定义文件等手动更改。

相关内容