Como diz o título, tudo ou quase tudo que é importante, como raiz sob raiz (/), foi movido para / antigo em uma máquina Solaris 10. Portanto, agora a falha típica ao tentar executar comandos é Cannot find /usr/lib/ld.so.1
(alterada $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). Ontem tentei praticamente tudo para encontrar algo que pudesse ajudar, mas não encontrei nada que realmente alterasse o caminho da biblioteca do Solaris 10, exceto talvez, crle
mas não possa executá-lo desde então Cannot find /usr/lib/ld.so.1
.
Encontrei muitas dicas de recuperação de root ou / usr / bin e assim por diante para Linux, mas as informações sobre o Solaris 10 / Unix não são comuns e muito escassas.
Não é possível executar cp
, ln
, mkdir
ou mv
uma vez Cannot find /usr/lib/ld.so.1
. Não é possível efetuar login com outras sessões na máquina. Embora ainda exista uma sessão que possa ser usada e essa janela esteja sendo interrompida while true; do date; echo hej 1234567; done
. Discutimos a solução para usar um CD de inicialização Solaris e também um dist Linux em uma unidade USB. Discutimos a solução para mudar os discos do disco rígido para outro rack.
A /.../static/.../mv
solução foi testada, mas não funcionou.
Os comandos que ainda podem ser utilizados 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 >>
restaurar /usr/lib/ld.so.1
? Eu sei que mais do que /usr/lib/ld.so.1
provavelmente precisará ser restaurado para que os comandos funcionem.
Muito obrigado pela leitura e tenha um bom dia =)
fonte
mv
. Ou mais precisamente:shopt -s extglob; mv !(old) /old
.ln
, se estiver funcionando.static
estão lá exatamente para esta categoria de problemas, se você não deseja inicializar mídia temporária.Respostas:
Se você não tiver mais um shell em execução como root, precisará reiniciar a mídia de resgate. Qualquer coisa funcionará desde que seja capaz de montar a leitura / gravação do sistema de arquivos raiz.
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 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, prefixe-o 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:fonte
/old
, meu comentário ao próprio comentário de Peschke também é válido aqui.mv
não deve ser usado, mas um comando que preservar a hierarquia existente comopax
,tar
e os gostos./old/usr/lib/ld.so.1 /old/usr/bin/mv
e/old/usr/lib/ld.so.1 /old/usr/bin/cp
e assim por diante. Vou ver o que posso fazer, agora o problema é que estou sem espaço, mas posso consertar isso./old/usr/lib/ld.so.1 /old/usr/bin/mv
e/old/usr/lib/ld.so.1 /old/usr/bin/cp
mas não há espaço, portanto, não poderia utilizar/old/usr/lib/ld.so.1 /old/usr/bin/cp
. E depois editar$PATH
e depois pasta por pasta usandomv
com alterado$PATH
. Agora tudo voltou para que eu possa fazer login novamente e digite df -h e tudo. Muito obrigado a todos. Realmente, muito obrigado a você @Gilles! Obrigado StackExchange!LD_LIBRARY_PATH
no Solaris tem alguns perigos, se você precisar configurá-lo para poder executar os executáveis de 32 e 64 bits. Seria melhor usar as versões específicas de 32 e 64 bitsLD_LIBRARY_PATH
disponíveis no Solaris. Nesse caso:LD_LIBRARY_PATH_32=/old/usr/lib
eLD_LIBRARY_PATH_64=/old/usr/lib/64
. Consulte ald.so.1
página do manual : "Cada variável de ambiente pode ser especificada com um sufixo _32 ou _64. Isso torna a variável de ambiente específica, respectivamente, para processos de 32 ou 64 bits."Não há como criar um diretório ou copiar arquivos binários com apenas comandos internos (embora Gilles descreva uma solução potencial inteligente em sua resposta ).
Sua melhor opção é inicializar o Solaris em uma mídia externa (dvd, pendrive), montar ou importar o (s) sistema (s) de arquivo 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 ao detectar sistemas de arquivos existentes.coloque os arquivos de volta ao seu local original com este comando (supondo que tudo esteja montado abaixo
/mnt
):Reinicie seu sistema
Se você estiver usando o ZFS e existir um instantâneo recente, fazer o backup do
/old
diretório em outro local e, em seguida, reverter para o último instantâneo também poderá ser uma opção.fonte
mv /mountpoint/old/* /mountpoint
mv
comando sugerido não seja meu conselho. O OP escreveu "tudo ou quase tudo ". No segundo caso, a movimentação quebrará os diretórios ainda existentes. Eu provavelmente usar um utilitário comotar
,pax
oucpio
para preservar a hierarquia de diretório de destino.lustatus
E não entre em pânico ainda. Todos os dados ainda existem no (s) disco (s).Solaris inclui estática constrói de serviços básicos (
cp
,ln
,mv
,rcp
, etar
) 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 do regulares dinamicamente ligados/usr/bin
versões.Não há estática
mkdir
fornecida, mas você pode usar a estáticaln
para vincular temporariamente qualquer diretório que contenhalib/ld.so.1
no local/usr
temporariamente e, em seguida, usar o padrãomkdir
para criar os diretórios necessários. Você pode renomear diretórios que já existem usando a estáticamv
.fonte
ld.so.1
segfaults se você tentar executá-lo manualmente, como mostrado na Gilles' exemplo