Como faço para limpar uma partição de inicialização que não pode ser limpa com a limpeza de pacotes?

0

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?

    
por scottbb 05.01.2018 / 22:48

2 respostas

2

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.

    
por 05.01.2018 / 23:00
2

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.

    
por 06.01.2018 / 00:20