É possível?
Bem, os utilitários mais triviais e importantes estão instalados /bin
e agora você perdeu o acesso a todos eles. De fato, se você reiniciar, seu sistema não poderá mais inicializar.
De qualquer forma, vamos corrigir o problema e tornar /bin
o conteúdo o mais próximo possível de onde estava. A única diferença seria alguns links simbólicos que também serão corrigidos.
Quão?
Primeiro, devemos chroot
entrar no seu sistema danificado, mas com uma pequena diferença ! Depois disso, obteremos uma lista de pacotes instalados no seu sistema que possuem qualquer arquivo instalado no /bin
diretório, então vamos baixar apenas os pacotes necessários e extrair os arquivos necessários /bin
. Então estaremos prontos.
Por exemplo, depois chroot
, podemos obter uma lista de pacotes que instalaram arquivos /bin
usando:
dpkg --search /bin | cut -f1 -d: | tr ',' '\n'
E também podemos usar:
dpkg --listfiles PACKAGE-NAME | grep "^/bin/" # or awk '$0 ~ "^/bin/
para listar os arquivos instalados por esses pacotes no /bin
.
Em seguida, simplesmente criamos uma lista de todos os pacotes necessários para nós, depois baixamos e extraímos para /bin
algo como:
xargs apt download < list-packages
dpkg-deb -x PACKAGE .
mv ./bin/* /bin
No entanto, devemos usar um script para verificar todos os pacotes instalados em nosso sistema, porque fazê-lo manualmente é apenas loucura.
Então, eu escrevi um script que faz tudo o que precisamos. Ele encontra todos os pacotes necessários para restauração /bin
, mostra o nome de cada pacote e seus arquivos relacionados aos quais pertence /bin
. Aqui está uma captura de tela:
No final, optamos por reinstalar todos os pacotes ou apenas baixar e extrair os arquivos necessários para /bin
(que é a opção recomendada):
Você pode pegar uma cópia desse script ou fazer o download diretamente .
Vamos começar
chroot
Inicialize seu sistema com um disco ativo com a mesma arquitetura do Ubuntu instalado, abra um terminal e obtenha acesso root:
sudo -i
Monte seu root
sistema de arquivos (para mim é /dev/sda1
):
mount /dev/sda1 /mnt
Precisamos de conectividade com a Internet, então copie resolv.conf
do Ubuntu ao vivo para sua partição raiz montada:
cp /etc/resolv.conf /mnt/etc/resolv.conf
Agora copie o script para algum lugar da partição montada, por exemplo:
cp /media/ubuntu/usb/restore-bin.sh /mnt/restore-bin.sh
ou você pode baixá-lo usando wget
etc., como:
wget https://git.io/v9fRm -O /mnt/restore-bin.sh
Monte outros caminhos necessários:
mount --bind /dev /mnt/dev
mount --bind /sys /mnt/sys
mount -t proc /proc /mnt/proc
E aqui está a pequena diferença : como podemos entrar chroot
em um sistema danificado quando não há /bin
diretório lá? Qual shell devemos executar?
Portanto, crie um diretório bin temporário. por exemplo: nomeado bintmp
dentro da raiz do sistema corrompida:
mkdir /mnt/bintmp
Em seguida, vincule a vida /bin
a isso:
mount --bind /bin /mnt/bintmp
Faça chroot no sistema enquanto define o /bintmp/bash
como seu shell de login:
chroot /mnt /bintmp/bash
Exporte a variável de ambiente /bintmp
como PATH
:
export PATH=/bintmp:$PATH
Dê ao script o bit executável:
chmod +x restore-bin.sh
Execute o script:
./restore-bin.sh
Aguarde a pesquisa ser concluída e responda à pergunta que vimos na captura de tela. Ele começará a restaurar o /bin
e estamos quase terminando.
Depois de concluído, use CTRL+ Dpara sair do chroot
ambiente e desmontar os caminhos montados:
umount -R /mnt
Reinicie o sistema.
Restaurando os Links dentro /bin
Agora quase todos os arquivos no /bin
diretório estão de volta, exceto cerca de 5 links simbólicos que são gerenciados por update-alternatives
.
No seu sistema em execução, execute:
sudo update-alternatives --all
Ele faz algumas perguntas; você pode simplesmente pressionar ENTERpara aceitar todos eles.
E agora terminamos.
/bin
Ubuntu não é apenas um link simbólico/usr/bin
atualmente? Então, tudo o que você precisa fazer é colocar o link simbólico de volta?