我的/boot已经满了。apt-get autoremove autoclean不起作用。
我选择手动删除旧的linux-image*。有很多类似的文件:configVERSION, vmlinuzVERSION, initrd.img*VERSION...
这些文件也可以手动删除吗?
VERSION是旧版本(其中一些日期是2012年!)。
这些文件也可以手动删除吗?
VERSION是旧版本(其中一些日期是2012年!)。
我的首选是这个:
uname -r
来查看当前正在运行的内核版本。例如,我的系统之一返回4.8.0-51-generic
。ls /boot/vml*
来查看所有已安装的内核。vmlinuz-4.8.0-46-generic
。dpkg -S /boot/vmlinuz-4.8.0-46-generic
,根据需要更改内核版本。(请注意命令中的大写-S
)。这将显示与该内核关联的软件包名称。在此示例中,它是linux-image-4.8.0-46-generic
。请注意,您不应将以.efi.signed
结尾的内核传递给dpkg -S
;这些内核是以不同的方式安装的,无法使用此命令。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
(删除三个软件包而不是一个)。sudo apt-get autoremove
使用。如果这个方法不起作用,我建议手动删除你没有使用的内核的.efi.signed
版本,如果存在的话。这些文件不是直接安装的;它们是通过将标准内核映像与从另一个软件包安装的小型签名文件合并而创建的。因此,删除它们不会像手动删除非签名内核文件那样影响软件包系统。然而,请注意,如果你的计算机启用了安全启动,或者即使没有启用但GRUB配置为通过.efi.signed
版本的内核引导,删除这个文件将使得无法引导该内核。因此,重要的是不要删除你当前正在使用的内核的.efi.signed
版本。
另一种方法是暂时将/boot
目录从独立分区移到常规根目录(/
)文件系统上。请注意,尽管我曾因其他原因做过类似的操作,但我并没有尝试过针对您的确切原因而进行这个确切的过程;但它应该有效。还请注意,这样做相当有风险;在错误的时间点犯错可能导致无法启动您的系统!如果您愿意冒险,可以按照以下步骤操作:
sudo mkdir /boot2
创建临时存放内核的/boot2
目录。sudo umount /boot/efi
。这个命令在基于BIOS的计算机上会失败,但如果您的计算机通过EFI引导,则是必需的。sudo cp -a /boot/* /boot2/
将/boot
中的所有内容复制到/boot2
。sudo umount /boot
卸载/boot
目录。sudo rm -rf /boot
。这将删除旧的/boot
挂载点和可能意外放置在其下的任何文件。sudo mv /boot2 /boot
。这将根据Linux的观点将副本重命名为原始位置。sudo apt-get autoremove
操作。这应该成功。sudo mv /boot /boot2
将更新后的内核副本移出路径。sudo mkdir /boot
创建一个新的/boot
分区挂载点。sudo mount /boot
恢复原始的/boot
分区。请注意,它仍然会过满。sudo rm -rf /boot/*
删除原始/boot
分区的内容。sudo cp -a /boot2/* /boot/
将修改后的/boot
目录复制到/boot
分区。sudo rm -rf /boot2
删除临时文件。非常重要的是定期执行sudo apt-get autoremove
命令,以防止/boot
分区过度填充。就个人而言,我几乎每次升级软件包时都会执行此操作,尤其是如果我注意到有新的内核被安装。请注意,与此问题相关的有几个官方错误报告:
cp
命令中的-a
选项会进行递归复制,但与-r
不同的是,它会保留所有权和权限。@ubfan1,这是个有趣的想法,而且可能有效。 - Rod Smith
uname -r
可以获取当前执行的版本信息。 - Charles Green