Acabei de excluir "/ bin". Qual é a melhor maneira de se recuperar?


10

Acabei de correr (não de propósito!) rm -rf /bin.

Inicializei o computador e estou usando o Finnix para tentar se recuperar dele. Consegui montar a unidade e confirmei que sim, a /binpasta inteira foi excluída.

É possível recuperar isso sem reinstalar o sistema operacional?

Eu estou pensando que eu poderia configurar uma VM com o mesmo sistema operacional e arquitetura (Ubuntu Server 11.10 versão alpha, x86) e instalar todos os pacotes que eu tinha instalado no servidor, em seguida, basta copiar a /binpasta.

Isso vai funcionar? Estou melhor apenas começando de novo?

Respostas:


15

Em geral, eu me inclinaria para uma reinstalação (dos backups que você absolutamente deveria ter). Mas estou me sentindo um hack, então aqui está outra maneira (supondo que seu sistema esteja montado abaixo /target):

  1. Obtenha uma lista de todos os pacotes instalados que possuem arquivos em /bin:

    grep ^/bin/ /target/var/lib/dpkg/info/*.list | sed 's%^.*/\([^/\.]*\).list%\1%' >/tmp/pkglist
    

    (No meu sistema Debian Squeeze, há um total de 34 pacotes, praticamente todos os quais são essenciais)

  2. Faça o download de cada um desses pacotes (eu não me incomodei em escrever este bit, então basta clicar em packages.ubuntu.com e fazer o download em algum lugar abaixo /target). Se você tiver sorte, alguns dos pacotes ainda podem estar flutuando /target/var/cache/apt/archives.

  3. Para cada pacote, execute /target/usr/bin/dpkg -x <package> /target. Tenho certeza de que dpkgtudo é autônomo hoje em dia e não deveria chamar nada por /binsi só.

Quando o sistema voltar a funcionar, certifique-se de executar um apt-get --reinstall install <all the packages from step 1>, porque (já que você está executando um pré-lançamento, que o Sysadmin Cat diz ser um não-não-nos sistemas de produção), as versões dos pacotes você acabou de extrair é provável que seja diferente daqueles que estavam no sistema antes e você deseja garantir que o sistema saiba exatamente o que é o quê.


Boa resposta, mas estou faltando alguma coisa? Não dpkg-query -S /binfaria o mesmo que sua grep .. | sedestrofe? Se a lista precisar ser limpa para listar um nome de pacote por linha, dpkg-query -S /bin | sed 's/\,\ /\n/g'funcionará (embora tenha extra: / bin na última linha).
Janne Pikkarainen

1
Sim, seria - eu estava tentando minimizar a quantidade de coisas executadas no sistema de destino, caso o que fosse executado precisasse de algo /bin, e eu não queria confiar em nada específico do Debian no sistema de resgate para fazê-lo como geral possível para futuros descobridores.
womble

Parece que esta é uma lista apenas dos utilitários essenciais do sistema - não existem outros pacotes com arquivos /bin? Devo reinstalar todos os pacotes do meu sistema ou apenas os gerados como resultado da lista? (Também: obrigado, eu te amo!)
Tom Marthenal

1
Normalmente, somente pacotes essenciais terão arquivos /bin- a maioria dos pacotes deve colocar todos os seus dados em baixo /usr. No meu sistema, apenas alguns pacotes não essenciais (por exemplo zsh) estão na lista "tem coisas em /bin". Upvotes são uma ótima maneira de mostrar o amor, a propósito ...
womble

1
Eu segui suas instruções e elas funcionaram perfeitamente - meu servidor está de volta a funcionar. Muito obrigado pela ajuda!
Tom Marthenal

5

Embora sua estratégia possa funcionar (há boas chances de isso, mais se você copiar novamente o diretório bin, fizer uma reinstalação apt-get de todos os pacotes em seu sistema), isso poderá gerar problemas no futuro, pois você poderá obter um servidor instável.

Se isso tivesse acontecido comigo, eu reinstalaria e restauraria a partir do backup diário. Você tem um backup diário - um plano de recuperação de desastre - não tem?

Caso você não tenha um plano de recuperação de desastres, sugiro fazer backup de todos os arquivos de configuração e dos dados que você deseja preservar e prosseguir com a reinstalação. Dessa forma, você terá certeza de que terminará novamente com um servidor estável.


1
adivinhando desde que ele postou aqui como recuperar a pasta / bin, ele não tem um backup.
Goez 4/08/11

Infelizmente, não tenho backup diário. O script bash que eu escrevia na época era, ironicamente, um script de backup diário. Parece que vou reinstalar - obrigado pelo conselho.
Tom Marthenal

Não há necessidade de reinstalar; veja minha resposta.
Womble

As capturas instantâneas do sistema de arquivos são extremamente úteis para recuperar coisas assim. Infelizmente, os sistemas de arquivos ext2 / 3/4 não os implementam e fazê-lo com o LVM tem uma grande penalidade de desempenho. Se eu excluir / bin acidentalmente na minha caixa do FreeBSD, basta montar um instantâneo anterior e copiar os arquivos de volta para a versão ao vivo do sistema de arquivos. O OS X supostamente também tem isso (é chamado de "máquina do tempo").
snap

3

Eu tentaria criar uma VM e copiar o conteúdo da /binsua máquina danificada. Isso deve colocá-lo em funcionamento. Então corra

dpkg --get-selections  | awk '{print $1}' | xargs -l1 aptitude reinstall

que deve reinstalar todos os pacotes que estavam no seu sistema.


1

A maneira mais fácil, se você tiver acesso à máquina, é montar o sistema de arquivos, fazer um backup de todos os seus dados (apenas como precaução).

Então você pode reinstalar o ubuntu como uma instalação normal; em princípio, todos os seus dados (dir home, etc e var) ainda devem estar lá.

Existe uma maneira de reinstalar todos os pacotes para que / bin seja preenchido novamente, mas isso é bastante complicado.


0

Os arquivos sumiram. Embora você possa tentar "cancelar a exclusão" de arquivos - eu não o recomendaria.

Nota: Eu não executo o Ubuntu (e não utilizo as distribuições Debian há algum tempo). No entanto, eu fiz várias recuperações de distros no passado, todas seguindo um cenário semelhante.

Seu melhor curso de ação:

  • inicialize a partir do liveCD
  • usando o liveCD monte seu sistema em algum lugar (digamos /mnt/mint)
  • usando o dpkg consulta todos os pacotes instalados:
# dpkg --admindir = / mnt / mint / var / lib / dpkg -l
  • instale todos esses pacotes no seu destino / mnt / mint usando o apt-get usando:
# apt-get -o RootDir = / mnt / mint .... 
  • (alternativa nº 1) Você pode precisar desbobinar /mnt/mint- não tenho certeza
  • (alternativa nº 2) Você pode copiar o /binconteúdo do liveCD para, /mnt/mint/binmas não sei se o liveCD for mint usa o busybox, o que pode complicar as coisas - a alternativa nº 1 nesse caso parece mais segura.

geralmente isso deve retornar seus arquivos "reinstalar bruto" de tudo que você tem. Você pode fazer truques um pouco mais "inteligentes" e consultar todos os pacotes que deixaram binários em / bin

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.