O que fazer depois de cancelado “rm -rf / usr /” no Arch?

4

Então, fiz isso no meu sistema Arch atualizado:

[anna@home ~]$ sudo rm -rf /usr/
^C[anna@home ~]$ ^C
[anna@home ~]$ ^C

Eu terminei o rm muito rapidamente. Não consigo encontrar nada de errado com /usr/ no olho.

Quais opções existem para ver se algum dano foi feito? Existe alguma verificação de integridade do pacman que devo executar? Quaisquer arquivos específicos que eu deveria verificar para ter certeza de que o sistema pode começar de novo?

De agora em diante, vou manter backups do sistema inteiro .

    
por Anna 13.07.2013 / 16:37

2 respostas

4

Acho que Dennis Kaarsemaker escreveu a coisa certa: reinstalar todos os pacotes.

Alguns minutos pesquisando revelaram este artigo wiki do Arch , com uma seção sobre como reinstalar todos os pacotes. Como você não excluiu /var/cache/pacman/pkg , o processo deve acontecer localmente. O comando é assim:

pacman -Qenq | pacman -S -

pacamn -Qeng apenas lista pacotes "explicitamente instalados", "nativos" por grupo. Pode perder alguns pacotes de repositórios "extra" ou "comunitários", ou quaisquer pacotes AUR que você tenha instalado. Eu estou pessoalmente com medo de tentar isso, porque minhas instalações do Arch estão funcionando, mas

pacman -Qn | awk '{print $1}' | pacman -S -

pode reinstalar todos os pacotes possíveis. Não tenho certeza de como lidar com uma dependência que é instalada explicitamente mais tarde no processo. Você pode acabar reinstalando os pacotes que já foram reinstalados como dependência.

Se você conseguiu excluir pacman , acho que o processo pode envolver uma "nova instalação" parcial usando o ISO de instalação do Arch, mas estou com medo de recomendar isso.

    
por 13.07.2013 / 17:14
1

Se você não quiser (re) instalar todos os pacotes, você pode fazer um truque: verifique os subdiretórios /var/lib/pacman/local e seu files , que contém todos os arquivos instalados por pacote.

Portanto, um script simples, não testado (e não perfeito):

cd /var/lib/pacman
for package in *; do
    for file in $(grep ^usr ${package}/files); do
        [ -e "/${file}" ] || echo Bad package: ${package}
    done
done

Você pode melhorar este script (talvez se ${file} não existir, execute pacman -S ${package} e continue) mas acho que a ideia principal não é tão ruim:)

    
por 13.07.2013 / 19:27