Você pode usar yum whatprovides /boot/*
para determinar quais kernels ainda estão instalados e aqueles que não pertencem a um pacote que você pode excluir com segurança. No entanto, isso pressupõe que o grub está sendo autoconfigurado.
Eu recentemente reinstalei o CentOS 7 em uma máquina de laboratório / desenvolvimento. Eu queria manter a partição /home
da instalação anterior, então configurei manualmente o particionamento para permitir que eu fizesse isso. No processo, eu acidentalmente também mantive a partição /boot
da instalação anterior.
Após a instalação ser bem sucedida, eu tenho uma tela de inicialização do Grub2 muito ocupada. Além da minha instalação "nova" e limpa do CentOS, todas as minhas imagens antigas do kernel aparecem na tela de inicialização:
CentOS Linux (3.10.0-693.11.1.el7.x86_64) 7 (Core)
CentOS Linux (3.10.0-693.5.2.el7.x86_64) 7 (Core)
CentOS Linux (3.10.0-693.el7.x86_64) 7 (Core) <--- this is the new/reinstalled OS
CentOS Linux (3.10.0-693.11.1.el7.x86_64.debug) 7 (Core)
CentOS Linux (0-rescue-7859fc0fbe934b91b11ea69046b5d787) 7 (Core)
CentOS Linux (0-rescue-6c92bef5457049e5a42e5609c540d753) 7 (Core)
CentOS Linux (0-rescue-e7a05dc4cdda4e778a344945ef1ed391) 7 (Core)
A simples execução de package-cleanup
não funcionará, porque existe realmente apenas um kernel instalado (no que diz respeito ao novo sistema operacional):
$ package-cleanup --oldkernels --count=1
No old kernels to remove
$ uname -r
3.10.0-693.el7.x86_64
$ rpm -qa kernel*
kernel-debug-devel-3.10.0-693.11.6.el7.x86_64
kernel-3.10.0-693.el7.x86_64
kernel-headers-3.10.0-693.11.6.el7.x86_64
kernel-tools-libs-3.10.0-693.el7.x86_64
kernel-tools-3.10.0-693.el7.x86_64
Assim, não acredito que isso seja um truque de "como eu limpo minha partição /boot
?" perguntas (como Como faço com segurança deletar versões antigas do kernel no CentOS 7? )
Normalmente eu estaria bem lidando apenas com um menu bagunçado do Grub2, mas minha partição /boot
tem apenas 11 MiB restantes, então não consigo atualizar meu kernel.
Não tenho certeza do que é seguro excluir da partição /boot
. Como faço para limpá-lo quando package-cleanup
não vai?
Você pode usar yum whatprovides /boot/*
para determinar quais kernels ainda estão instalados e aqueles que não pertencem a um pacote que você pode excluir com segurança. No entanto, isso pressupõe que o grub está sendo autoconfigurado.
a resposta do jdwolf produziu uma lista de quais pacotes (no sistema antigo) que forneciam as entradas em /boot/*
, mas foi um pouco volumoso, e não imediatamente aparente quais arquivos não eram pertinentes à minha reinstalação do CentOS. E exemplo de alguma saída:
$ yum whatprovides /boot/*
kernel-3.10.0-693.5.2.el7.x86_64 : The Linux kernel
Repo : updates
Matched from:
Filename : /boot/config-3.10.0-693.5.2.el7.x86_64
kernel-3.10.0-693.el7.x86_64 : The Linux kernel
Repo : base
Matched from:
Filename : /boot/config-3.10.0-693.el7.x86_64
fwupdate-efi-9-8.el7.x86_64 : UEFI binaries used by libfwup
Repo : base
Matched from:
Filename : /boot/efi
[... truncated output ...]
Mas isso me levou a usar rpm -q --whatprovides /boot/*
, o que foi muito mais útil para determinar se o arquivo era necessário:
$ rpm -q --whatprovides /boot/*
file /boot/config-3.10.0-693.11.1.el7.x86_64 is not owned by any package
file /boot/config-3.10.0-693.11.1.el7.x86_64.debug is not owned by any package
file /boot/config-3.10.0-693.5.2.el7.x86_64 is not owned by any package
kernel-3.10.0-693.el7.x86_64
file /boot/efi is not owned by any package
file /boot/elf-memtest86+-5.01 is not owned by any package
file /boot/grub is not owned by any package
grub2-common-2.02-0.65.el7.centos.2.noarch
[... truncated output ...]
Observe que rpm -q --whatprovides
não imprime o nome do arquivo de entrada se ele corresponder a um pacote que o fornece. Mas ele retorna 0
se o arquivo for fornecido por um pacote e 1
se o arquivo não for fornecido por um pacote. Assim, a solução foi trivialmente:
$ for f in /boot/*; do rpm -q --whatprovides $f || rm -f $f; done
file /boot/config-3.10.0-693.11.1.el7.x86_64 is not owned by any package
file /boot/config-3.10.0-693.11.1.el7.x86_64.debug is not owned by any package
file /boot/config-3.10.0-693.5.2.el7.x86_64 is not owned by any package
kernel-3.10.0-693.el7.x86_64
file /boot/efi is not owned by any package
rm: cannot remove ‘/boot/efi’: Is a directory
file /boot/elf-memtest86+-5.01 is not owned by any package
[... truncated output ...]
$ ls -1 /boot
config-3.10.0-693.el7.x86_64
efi
grub
grub2
initramfs-3.10.0-693.el7.x86_64.img
symvers-3.10.0-693.el7.x86_64.gz
System.map-3.10.0-693.el7.x86_64
vmlinuz-3.10.0-693.el7.x86_64
Depois de executar grub2-mkconfig -o /boot/grub2/grub.cfg
, meu menu do Grub está limpo e eu tenho um diretório /boot
limpo.
Nota: Provavelmente teria sido melhor ou mais seguro usar find /boot -type f -exec ...
(ou talvez find ... -xargs ...
), mas minha solução funcionou bem, pois rm -f
não exclui diretórios.
Tags boot grub2 disk-cleanup