/ bin / etc / lib64 / root / sbin excluído ou movido pela pasta mv / * / * enquanto su

10

OS são Centos 6.5 de 64 bits

Eu baixei um arquivo tar e queria descompactar e mv dele.

Eu desimpedi e, acidentalmente (como root), executei mv folder/* /* em vez de mv folder/* . bash disse que não poderia sobrescrever alguns arquivos, depois pediu permissão para outros. Eu ctrl-c'd fora.

Eu deixei a sessão do terminal aberta, mas saí de su .

Agora perdi o acesso à maioria dos comandos shell , não consigo ls de nenhum diretório e não consigo voltar para su .

O servidor da Web e os serviços ainda parecem estar em execução. Posso executar muito poucos comandos, cd é um deles e quando tento cd to /etc ou /bin erros com no directory found .

EDIT Apenas notei que todas as pastas ausentes do / ( bin , etc , lib64 , root , sbin ) foram movidas para o diretório /var , I tentou /var/bin/su & pegue: -bash: /var/bin/su: /lib64/ld-linux-x86-64.so.2: bad ELF interpreter: No such file or directory

    
por webaholik 06.04.2014 / 08:51

4 respostas

1

IMPORTANTE Se você está aqui e executou mv incorretamente, não é possível executar comandos shell e pastas ausentes do diretório raiz ( / ), antes de tudo, se você tiver SU , NÃO saia de SU até ser corrigido, porque você não vai recuperá-lo. Se você estiver conectado remotamente, se você desconectar, não será possível ssh , deixe o servidor em paz, não reboot - a maioria dos serviços em execução deve estar OK. Você pode tentar uma das muitas soluções sugeridas por Patrick ... no entanto, você provavelmente precisará de acesso físico se você errar como eu fiz.

Uma vez na frente da máquina, eu reiniciei. Como esperado, recebi um pânico no kernel.

Eu pensei que esta seria uma correção bem fácil, inserir o livecd, entrar no modo de recuperação. ATÉ ESTE PONTO FOI FÁCIL - então eu tive que tentar montar meu diretório raiz. No entanto, eu precisava de mais do que apenas um simples comando de montagem.

Isso porque eu, como muitas pessoas, tinha um sistema de arquivos lvm, e essa foi a primeira vez que tive que lidar com um resgate como esse. Eu tive que pesquisar na web para ver o que eu precisava fazer. Eu consolidou essa informação para este post. Aqui estava o meu processo para corrigir o meu problema.

1) Inserido Centos_6.4_min cd

2) Interface da GUI perguntou o que eu queria fazer, escolha Rescue

3) O Rescue tentou montar o sistema atual, mas indicou que eu não tinha partições Linux

4) Escolheu para inserir shell quando a opção foi dada

Neste ponto eu tentei muitas coisas para montar o sistema, sem sorte, eu tenho certeza que esses são todos os passos que eu tive que dar (por causa do lvm):

5) Analisei meus volumes,

lvmdiskscan

6) Ran lvscan, mostrou todos listados como "inativos"

lvscan

7) módulo de dispositivo de carga

modprobe dm-mod

8) altere os volumes que existem para ativos

vgchange -ay

9) Ran lvscan novamente, agora todos os itens listados como "ativos"

10) Ponto de montagem criado & montou a partição lógica

mkdir /mnt/root

mount /dev/VolGroup00/LogVol00 /mnt/root

11) Transferiu as pastas (você pode precisar de outras):

mv /var/{bin,etc,lib64,mnt,root,sbin} /

12) reboot

13) SUCESSO!

    
por 07.04.2014 / 17:32
21

Se o seu sistema tiver busybox instalado, você poderá usá-lo para reativar as coisas.

busybox é um binário com muitos utilitários padrão embutidos nele. Coisas como mv , sh , ls , etc.

Do seu comentário sobre a resposta de Pavel, parece que tudo acabou em /var . Você pode tentar fazer /var/bin/busybox mv /var/{bin,etc,lib32,lib64,root,sbin,usr} / . Isso deve tornar a maior parte do seu sistema operacional novamente. Existem alguns diretórios como /tmp , que também existem como /var/tmp , então você não pode simplesmente movê-los. Espero que esses sejam os que mv reclamaram e foram deixados em paz.

Obtendo um shell de root

Você também mencionou que perdeu seu shell de root e que su está dando a você um erro na biblioteca ld-linux . Você pode usar o seguinte:

LD_LIBRARY_PATH=/var/lib64 /var/lib64/ld-linux-x86-64.so.2 /var/bin/su

Nota: Ao tentar isso, não funciona. Isso ocorre porque su requer vários arquivos em /etc ( passwd , pam.d e outros). Se /etc ainda estivesse intacto, isso teria uma boa chance de sucesso.

Sem busybox

Se você não tem o busybox disponível, você pode usar o mesmo truque do ld-linux que o su :

LD_LIBRARY_PATH=/var/lib64 /var/lib64/ld-linux-x86-64.so.2 /var/bin/mv /var/{bin,etc,lib32,lib64,root,sbin,usr} /

De um CD ao vivo

Como discutido nos comentários, se você perdeu o shell de root, está praticamente preso. Basicamente, para corrigir isso, você precisa de privilégios de root. A única maneira de chegar lá é ter um utilitário como su ou sudo escalar suas permissões (ambas não funcionais neste momento), ou seqüestrar outro programa já em execução como root (dependendo do que está sendo executado, provavelmente não é possível).

Isso deixa a única opção sendo um live CD. Uma vez inicializado em um CD ao vivo (ou USB ao vivo, ou qualquer outro), apenas monte o volume da raiz e mova os diretórios afetados para fora do /var de volta ao seu local original em / .

Sinopse do que aconteceu

folder/* teria se expandido para algo como folder/foo e folder/bar .
/* teria se expandido para algo como /bin /lib32 /lib64 /etc /home /root /var . Observando que /var é o último item.
Então, quando o shell expandiu todos esses globs, ele teria funcionado assim:

mv folder/foo folder/bar /bin /lib32 /lib64 /etc /home /root /var

Como /var é o último item da lista, tudo foi movido para ele.

Por que /var/bin/su erros com /lib64/ld-linux-x86-64.so.2: bad ELF interpreter: No such file or directory

Quase todos os binários no Linux são dinamicamente vinculados a ld-linux . ld-linux é a biblioteca responsável por carregar as outras bibliotecas necessárias para um binário. No seu sistema, isso fica em /lib64/ld-linux-x86-64.so.2 . Como esse diretório foi movido, qualquer executável vinculado dinamicamente não funcionará mais.

A razão pela qual o busybox funciona é que o busybox está vinculado estaticamente. Não usa ld-linux .

    
por 06.04.2014 / 09:16
10

mv folder/* ./* está errado também. Você deve ter mais cuidado com a semântica dos comandos que você executa. O comando mv com mais de dois argumentos apenas recebe todos os argumentos, exceto o último, e move os caminhos para os quais eles apontam no diretório especificado no último argumento.

Para mover todos os diretórios (exceto os ocultos) da pasta para o diretório atual, você deve usar:

mv folder/* .

Você quebrou seu sistema em execução. Seus comandos shell e internos continuam funcionando. Você terá que inicializar um CD ao vivo e mover os diretórios de volta. Eu não estou ciente de um bash builtin para mover / renomear arquivos que permitem corrigir a situação sem reiniciar, veja a resposta de Patrick para mais detalhes.

    
por 06.04.2014 / 08:56
1

Eu acidentalmente movi / usr para / usr_old e tudo foi para o inferno. Felizmente fiquei no prompt e consegui executar o seguinte comando para restaurar a pasta usr:

LD_LIBRARY_PATH=/usr_old/lib64 /usr_old/lib64/ld-linux-x86-64.so.2 /usr_old/bin/mv /usr_old /usr
    
por 11.02.2015 / 15:38

Tags