unix - sposta accidentalmente tutto sotto root su / vecchio - Solaris 10


13

Come dice il titolo, tutto o quasi tutto ciò che è importante come root sotto root (/) è stato spostato su / vecchio su una macchina Solaris 10. Così ora l'errore tipico quando si cerca quando in esecuzione comandi sono Cannot find /usr/lib/ld.so.1(cambiato $PATHe anche provato a cambiare $LD_LIBRARY_PATH, $LD_LIBRARY_PATH_64ed $LD_RUN_PATHe li esporta, ma niente di che sembra cambiare il percorso della libreria reale). Ho provato praticamente ieri a trovare qualcosa che potrebbe aiutare, ma non crleho trovato nulla che cambierà il percorso della libreria per Solaris 10 a parte forse, ma non è possibile eseguirlo da allora Cannot find /usr/lib/ld.so.1.

Abbiamo trovato molti suggerimenti per il ripristino di root o / usr / bin e così via per Linux, ma le informazioni relative a Solaris 10 / Unix non sono diffuse e molto scarne.

Non può essere eseguito cp, ln, mkdiro mvdal momento Cannot find /usr/lib/ld.so.1. Impossibile accedere con altre sessioni alla macchina. Sebbene sia ancora attiva una sessione che può essere utilizzata e la finestra è bloccata while true; do date; echo hej 1234567; done. Abbiamo discusso della soluzione per utilizzare un CD di avvio di Solaris e anche una dist Linux su un'unità USB. Abbiamo discusso della soluzione per passare i dischi del disco rigido a un altro rack.

La /.../static/.../mvsoluzione è stata testata ma non ha funzionato.

I comandi che ancora possono essere utilizzati sono (ci potrebbero essere più comandi che possono essere utilizzati): echo, <, >, >>, |, pwd, cd.

C'è un modo per creare una directory o una cartella senza mkdir? C'è un modo per utilizzare echoe >oppure echoe >>per ripristinare /usr/lib/ld.so.1? So che /usr/lib/ld.so.1probabilmente sarà necessario ripristinare più di quanto sia necessario affinché i comandi funzionino.

Grazie mille per la lettura e buona giornata =)


2
Quale comando è stato usato per spostare le cose in / old?
schaiba,

Standard Solaris mv. O più precisamente: shopt -s extglob; mv !(old) /old.
propatience,

1
Quale shell è in esecuzione al momento? alcune shell hanno comandi
inbuild

Potresti risolverlo con ln, se funziona.
David Schwartz,

2
"La soluzione /.../static/.../mv è stata testata ma non ha funzionato." Quello che è successo? Ha dato un errore del caricatore? Cosa "non ha funzionato" esattamente? I binari staticsono lì per esattamente questa categoria di problemi, se non si desidera avviare un supporto temporaneo.
Ti Strga,

Risposte:


19

Se non hai più una shell in esecuzione come root, dovrai riavviare il supporto di ripristino. Tutto farà finché sarà in grado di montare la lettura-scrittura del filesystem di root.

Se puoi ancora eseguire i comandi come root, tutto è copacetico. Impostare la variabile di ambiente LD_LIBRARY_PATHin modo che punti alle directory contenenti le librerie utilizzate dagli strumenti di sistema di base. Questo è almeno /usr/libsu un Solaris a 32 bit, /usr/lib/64su un Solaris a 64 bit, possibilmente in altre directory (non ho accesso a Solaris 10 ora per verificare). Per eseguire un eseguibile, aggiungi il prefisso con il linker di runtime : /usr/lib/ld.so.1(per un eseguibile a 32 bit) o /usr/lib/64/ld.so.1(per un eseguibile a 64 bit) - ora spostato su /old. Quindi dovresti essere in grado di recuperare con qualcosa del tipo:

LD_LIBRARY_PATH=/old/usr/lib
export LD_LIBRARY_PATH
/old/usr/lib/ld.so.1 /old/usr/bin/mv /old/* /

Uso intelligente del caricatore. Se l'intera gerarchia non è stata spostata /old, il mio commento al commento di Peschke è valido anche qui. mvnon deve essere utilizzato, ma un comando che conserva la gerarchia esistente, come pax, tare simili.
jlliagre,

1
Grazie mille per la pazienza e il tempo dedicato a scrivere questo. Ora funziona l'esecuzione di comandi come /old/usr/lib/ld.so.1 /old/usr/bin/mve /old/usr/lib/ld.so.1 /old/usr/bin/cpe così via. Vedrò cosa posso fare, ora il problema è che sono a corto di spazio ma potrei riuscire a risolverlo.
propatienza,

@propatience Peccato che tu e Gilles non abbiate considerato i miei commenti ...
jlliagre,

1
Yay DIO! Sono riuscito a spostare tutto indietro con il primo /old/usr/lib/ld.so.1 /old/usr/bin/mve /old/usr/lib/ld.so.1 /old/usr/bin/cpma nessuno spazio quindi non poteva usare /old/usr/lib/ld.so.1 /old/usr/bin/cp. E poi modificando $PATHe quindi cartella per cartella usando mvcon modificato $PATH. Ora è tutto tornato indietro così posso accedere di nuovo e digitare df -h e tutto. Molte grazie a tutti. Davvero, grazie a te @Gilles! Grazie StackExchange!
propatience

1
L'impostazione LD_LIBRARY_PATHsu Solaris presenta alcuni pericoli se è necessario impostarlo in modo da poter eseguire eseguibili a 32 e 64 bit. Sarebbe meglio usare le versioni specifiche a 32 e 64 bit LD_LIBRARY_PATHdisponibili in Solaris. In questo caso: LD_LIBRARY_PATH_32=/old/usr/libe LD_LIBRARY_PATH_64=/old/usr/lib/64. Vedi la ld.so.1pagina man : "Ogni variabile d'ambiente può essere specificata con un suffisso _32 o _64. Ciò rende la variabile d'ambiente specifica, rispettivamente, a processi a 32 o 64 bit."
Andrew Henle,

16

Non è possibile creare una directory o copiare file binari con i soli comandi incorporati della shell (sebbene Gilles descriva una soluzione alternativa intelligente nella sua risposta ).

L'opzione migliore è avviare Solaris su un supporto esterno (dvd, chiavetta USB), montare o importare i file system e correggere il disordine con qualcosa del tipo:

  • Avviare un disco di installazione di Solaris e selezionare per eseguire una shell.

  • Montare il vecchio root (e tutti gli altri file system se presenti) in una directory come /mnto /a. Il disco di avvio di Solaris potrebbe essere utile quando rileva file system esistenti.

  • rimetti i file nella loro posizione originale con questo comando (supponendo che tutto sia montato sotto /mnt):

    cd /mnt/old
    find . -depth | cpio -pdlmPV@ /mnt
    
  • Riavvia il tuo sistema

    init 6
    

Se si utilizza ZFS ed esiste un'istantanea recente, è anche possibile eseguire il backup della /olddirectory altrove e ripristinare l'ultima istantanea.


Bella risposta. Avvia USB di salvataggio, monta il filesystem e poi fai qualcosa del generemv /mountpoint/old/* /mountpoint
Peschke,

1
@Peschke Grazie, anche se eseguire il mvcomando suggerito in modo accecante non sarebbe il mio consiglio. L'OP ha scritto "tutto o quasi tutto ". Nel secondo caso, lo spostamento interromperà le directory ancora esistenti. Io probabilmente utilizzare un programma di utilità come tar, paxo cpioper preservare la gerarchia di directory di destinazione.
jlliagre,

Grazie mille per aver risposto rapidamente e grazie mille per le tue risposte. Potrei provare questo domani.
propatience,

Legato alla possibile istantanea (ZFS o UFS), è possibile avviare un BE alternativo se si utilizza l'aggiornamento dal vivo. lustatus E non farti prendere dal panico. Tutti i dati esistono ancora sui dischi.
Sleepyweasel,

0

Solaris include statica si basa su servizi di base ( cp, ln, mv, rcp, e tar) in /usr/sbin/staticcui è possibile utilizzare per riparare qualsiasi problema con la disponibilità di /usr/lib/ld.so.1che impedisce l'utilizzo dei normali dinamicamente collegate /usr/binversioni.

Non v'è alcun statica mkdira condizione, ma è possibile utilizzare la statica lndi collegamento simbolico qualsiasi directory contiene lib/ld.so.1al suo posto come /usrtemporaneo, e quindi utilizzare lo standard mkdirdi creare qualsiasi directory che vi serve. È possibile rinominare le directory che già esistono usando lo statico mv.


Questo risale almeno a Solaris 2.5.1, dove ho scoperto che lo stock ld.so.1segfault se si tenta di eseguirlo manualmente come mostrato nell'esempio di Gilles
rakslice,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.