我可以手动删除/boot 中的旧vmlinuz 吗?

Kan*_*nak 1 kernel

我的 /boot 已满。apt-get autoremove autoclean 不起作用。我选择手动删除旧的 linux-image*。有很多文件,例如:config VERSION、vmlinuz VERSION、initrd.img*VERSION...

这些也可以手动删除吗?

VERSION 是旧版本(其中一些是 2012 年的!)。

Rod*_*ith 8

可以手动删除几乎所有的文件,包括内核和初始RAM磁盘(initrd中); 然而,当文件由包安装时(就像这些),手动删除它们会使包系统处于不一致的状态。因此,不建议手动删除文件。我有关于如何进行的三个建议。


方法一:

我的第一选择是这样的:

  1. 键入uname -r以发现您当前正在运行的内核。例如,我的一个系统返回4.8.0-51-generic.
  2. 键入ls /boot/vml*以查看所有已安装的内核。
  3. 从列出的内核中选择一个不是您当前使用的内核,也不是最旧的内核(这可能是内核系列的“基础”)。刚好在您正在运行的内核“之前”出现的内核是一个很好的候选者。vmlinuz-4.8.0-46-generic例如,这可能是。
  4. 键入dpkg -S /boot/vmlinuz-4.8.0-46-generic,根据需要更改内核版本。(请注意,-S这是命令中的大写字母。)这应该会显示与该内核关联的包名称。在这个例子中,它是linux-image-4.8.0-46-generic. 请注意,您应该经过内核与一个名字,在结束.efi.signeddpkg -S; 这些内核以不同的方式安装,不适用于此命令。
  5. 键入sudo dpkg -P linux-image-4.8.0-46-generic(当然是更改内核版本号)。这告诉系统删除​​包。这可能会导致抱怨依赖关系中断。在这种情况下,您应该添加它声称依赖于您说要删除的软件包的软件包。就我而言,我必须发出命令sudo dpkg -P linux-image-4.8.0-46-generic linux-signed-image-4.8.0-46-generic linux-image-extra-4.8.0-46-generic(删除三个包而不是一个)。
  6. 运气好的话,前面的命令将起作用并清理足够的sudo apt-get autoremove工作空间。

方法二:

如果这不起作用,那么我建议手动删除.efi.signed使用的内核版本(如果存在)。这些文件不是直接安装的;它们是通过将标准内核映像与从另一个包安装的小签名文件合并来创建的。因此,删除它们不会像手动删除未签名的内核文件那样破坏软件包系统。但是请注意,如果安全启动在您的计算机上处​​于活动状态,或者即使它不是,但 GRUB 被配置为通过.efi.signed内核版本启动,删除此文件将无法启动该内核。因此,重要的是不要删除.efi.signed当前使用的内核版本。


方法三:

另一种方法是暂时将您的/boot目录从其单独的分区移到常规的根 ( /) 文件系统上。请注意,虽然我出于其他原因做过类似的事情,但我并没有因为你的确切原因尝试过这个确切的程序;但它应该工作。还要注意,这是相当冒险的;在错误的地方犯错可能会导致您的系统无法启动!如果你愿意冒险,程序是:

  1. 键入sudo mkdir /boot2以创建/boot2临时存放内核的目录。
  2. 键入sudo umount /boot/efi。此命令在基于 BIOS 的计算机上将失败,但如果您的计算机通过 EFI 启动,则此命令是必需的。
  3. 键入sudo cp -a /boot/* /boot2/以将所有内容复制/boot/boot2
  4. 键入sudo umount /boot以卸载/boot目录。
  5. 键入sudo rm -rf /boot。这会删除旧的/boot挂载点和任何可能意外放置在它“下方”的文件。
  6. 键入sudo mv /boot2 /boot。就 Linux 而言,这会将您的副本重命名为原始位置。
  7. 继续您的sudo apt-get autoremove操作。这应该会成功。
  8. 键入sudo mv /boot /boot2以将内核的更新副本移开。
  9. 键入sudo mkdir /boot为您的/boot分区创建一个新的挂载点。
  10. 键入sudo mount /boot以恢复原始/boot分区。请注意,它仍然会太满。
  11. 键入sudo rm -rf /boot/*以删除原始/boot分区的内容。
  12. 键入sudo cp -a /boot2/* /boot/以将修改后的/boot目录复制到/boot分区。
  13. 重新启动以确保一切正常。
  14. 键入sudo rm -rf /boot2以删除临时文件。

一个错误(无论是我的还是你的)可能会造成严重的问题,包括完全无法启动系统。因此,这种方法是最后的手段。


向前进

您必须定期执行sudo apt-get autoremove以防止/boot分区过满。就我个人而言,我几乎每次升级软件包时都会这样做,尤其是当我注意到安装了新内核时。请注意,有几个与此问题相关的官方错误:

这些错误中的第一个可以为现有系统修复,但由于各种原因,即使是官方发布的修复程序也不是 100% 有效。第二个错误是关于在系统安装时做出的选择,因此现有系统继续受到/boot分区过小的影响。解决该问题的唯一方法是调整分区大小以增加/boot. 就个人而言,我认为 500 MiB 是这些天的最小合理大小/boot