unix - acidentalmente movido tudo sob root para / old - Solaris 10

13

Como o título diz que tudo ou quase tudo importante como root sob root (/) foi movido para / old em uma máquina Solaris 10. Portanto, agora a falha típica ao tentar executar comandos é Cannot find /usr/lib/ld.so.1 (alterado $PATH e também tentou alterar $LD_LIBRARY_PATH , $LD_LIBRARY_PATH_64 e $LD_RUN_PATH e exportá-los, mas nada disso parece alterar o caminho da biblioteca real). Tentei muito bem ontem para encontrar algo que pudesse ajudar, mas não encontrei nada que mudasse realmente o caminho da biblioteca para o Solaris 10, a não ser talvez crle , mas não posso executá-lo desde Cannot find /usr/lib/ld.so.1 .

Encontrei muitas dicas de recuperação root ou / usr / bin e assim por diante para o Linux, mas as informações para isso relacionadas ao Solaris 10 / Unix não são comuns e muito esparsas.

Não é possível executar cp , ln , mkdir ou mv desde Cannot find /usr/lib/ld.so.1 . Não é possível efetuar login com outras sessões na máquina. Embora uma sessão ainda esteja ativa, essa janela pode ser usada com while true; do date; echo hej 1234567; done . Discutimos a solução para usar um CD de inicialização do Solaris e também um dist do Linux em uma unidade USB. Nós discutimos a solução para trocar os discos do disco rígido para outro rack.

A solução /.../static/.../mv foi testada, mas não funcionou.

Os comandos que ainda podem ser usados são (pode haver mais comandos que podem ser usados): echo , < , > , >> , | , pwd , cd .

Existe uma maneira de criar um diretório ou pasta sem mkdir ? Existe alguma maneira de usar echo e > ou echo e >> para restaurar /usr/lib/ld.so.1 ? Eu sei que mais de /usr/lib/ld.so.1 provavelmente precisará ser restaurado para que os comandos funcionem.

Muito obrigado pela leitura e tenha um ótimo dia =)

    
por propatience 21.02.2017 / 15:37

3 respostas

19

Se você não tiver mais um shell executando como root, será necessário reinicializar a mídia de resgate. Qualquer coisa servirá desde que seja capaz de montar o sistema de arquivos raiz de leitura / gravação.

Se você ainda pode executar comandos como root, tudo é copacético. Defina a variável de ambiente LD_LIBRARY_PATH para apontar para os diretórios que contêm as bibliotecas usadas pelas ferramentas básicas do sistema. Isso é pelo menos /usr/lib em um Solaris de 32 bits, /usr/lib/64 em um Solaris de 64 bits, possivelmente em outros diretórios (não tenho acesso ao Solaris 10 agora para verificar). Para executar um executável, prefixá-lo com o vinculador de tempo de execução : /usr/lib/ld.so.1 (para um executável de 32 bits) ou /usr/lib/64/ld.so.1 (para um executável de 64 bits) - agora movido para /old . Assim, você deve conseguir se recuperar com algo como:

LD_LIBRARY_PATH=/old/usr/lib
export LD_LIBRARY_PATH
/old/usr/lib/ld.so.1 /old/usr/bin/mv /old/* /
    
por 21.02.2017 / 20:12
17

Não há como criar um diretório ou copiar arquivos binários com apenas comandos embutidos no shell (embora Gilles descreva uma solução alternativa inteligente possível na sua resposta ).

A melhor opção é inicializar o Solaris em uma mídia externa (dvd, usb stick), montar ou importar o (s) sistema (s) de arquivos e corrigir a bagunça com algo como:

  • Inicialize um disco de instalação do Solaris e selecione para executar um shell.

  • Monte a raiz antiga (e todos os outros sistemas de arquivos, se houver) em algum diretório como /mnt ou /a . O disco de inicialização do Solaris pode ajudá-lo a fazer isso quando detectar sistemas de arquivos existentes.

  • coloque os arquivos de volta ao local original com este comando (supondo que tudo esteja montado em /mnt ):

    cd /mnt/old
    find . -depth | cpio -pdlmPV@ /mnt
    
  • Reinicie seu sistema

    init 6
    

Se você estiver usando o ZFS e houver um instantâneo recente, fazer backup do diretório /old em outro local e, em seguida, reverter para o último instantâneo também poderá ser uma opção.

    
por 21.02.2017 / 15:47
0

O Solaris inclui compilações estáticas de utilitários básicos ( cp , ln , mv , rcp e tar ) em /usr/sbin/static que você pode usar para reparar qualquer problema com a disponibilidade de /usr/lib/ld.so.1 que impede o uso das versões /usr/bin regulares dinamicamente vinculadas.

Não há static mkdir fornecido, mas você pode usar o ln estático para vincular o diretório que contém lib/ld.so.1 no lugar como /usr temporariamente e usar o mkdir padrão para criar os diretórios que você precisar. Você pode renomear os diretórios que já existem usando o static mv .

    
por 18.07.2018 / 01:15