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

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

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

这些也可以手动删除吗?

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

答案1

它是可能的手动删除几乎任何文件,包括内核和初始 RAM 磁盘 (initrds);但是,当文件由软件包安装时(就像这些文件一样),手动删除它们会使软件包系统处于不一致的状态。因此,不建议手动删除文件。我对如何进行有三个建议。


方法 1:

我的第一选择是这样的:

  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.signed传递一个以结尾的内核dpkg -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工作空间。

方法 2:

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


方法 3:

另一种方法是暂时地/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对于这些天来说,尺寸合理。

相关内容