Wie die Überschrift schon sagt, wurde auf einem Solaris 10-Computer alles oder fast alles, was als root under root (/) wichtig ist, nach / old verschoben. So , jetzt die typische Fehler bei dem Versuch , beim Ausführen von Befehlen sind Cannot find /usr/lib/ld.so.1
(geändert $PATH
und auch zu ändern versucht $LD_LIBRARY_PATH
, $LD_LIBRARY_PATH_64
und $LD_RUN_PATH
und Exportieren von ihnen aber nichts davon scheint die reale Bibliothek Pfad zu ändern). Habe gestern ziemlich oft versucht, etwas zu finden, das helfen könnte, aber nichts gefunden, das den Bibliothekspfad für Solaris 10 tatsächlich ändert, außer vielleicht crle
, dass es seitdem nicht mehr ausgeführt werden kann Cannot find /usr/lib/ld.so.1
.
Habe viele Root- oder / usr / bin-Wiederherstellungstipps usw. für Linux gefunden, aber die entsprechenden Informationen zu Solaris 10 / Unix sind nicht weit verbreitet und sehr spärlich.
Kann nicht ausgeführt werden cp
, ln
, mkdir
oder mv
da Cannot find /usr/lib/ld.so.1
. Sie können sich auch nicht mit anderen Sitzungen am Computer anmelden. Es ist jedoch noch eine Sitzung aktiv, die verwendet werden kann und mit der das Fenster blockiert wird while true; do date; echo hej 1234567; done
. Wir haben die Lösung für die Verwendung einer Solaris-Boot-CD und einer Linux-Distribution auf einem USB-Laufwerk erörtert. Wir haben die Lösung für den Wechsel der Festplatten in ein anderes Rack erörtert.
Die /.../static/.../mv
Lösung wurde getestet, hat aber nicht funktioniert.
Die Befehle , die noch verwendet werden sollen (es könnte mehr Befehle, die verwendet werden können): echo
, <
, >
, >>
, |
, pwd
, cd
.
Gibt es eine Möglichkeit, ein Verzeichnis oder einen Ordner ohne zu erstellen mkdir
? Gibt es eine Möglichkeit, echo
und >
oder echo
und >>
wiederherzustellen /usr/lib/ld.so.1
? Ich weiß, dass /usr/lib/ld.so.1
wahrscheinlich mehr wiederhergestellt werden muss, damit Befehle funktionieren.
Vielen Dank fürs Lesen und einen schönen Tag =)
quelle
mv
. Oder genauer gesagt:shopt -s extglob; mv !(old) /old
.ln
, wenn das funktioniert.static
sind für genau diese Kategorie von Problemen verfügbar, wenn Sie keine temporären Medien booten möchten.Antworten:
Wenn Sie keine Shell mehr als Root ausführen, müssen Sie das Rettungsmedium neu starten. Alles wird funktionieren, solange es in der Lage ist, das Root-Dateisystem mit Lese- und Schreibzugriff zu mounten.
Wenn Sie weiterhin Befehle als root ausführen können, ist alles kopaketisch.
LD_LIBRARY_PATH
Stellen Sie die Umgebungsvariable so ein, dass sie auf die Verzeichnisse verweist, die Bibliotheken enthalten, die von den grundlegenden Systemprogrammen verwendet werden. Das ist zumindest/usr/lib
auf einem 32-Bit-Solaris,/usr/lib/64
auf einem 64-Bit-Solaris, möglicherweise anderen Verzeichnissen (ich habe jetzt keinen Zugriff auf Solaris 10, um dies zu überprüfen). Um eine ausführbare Datei auszuführen, muss der Laufzeitlinker vorangestellt werden :/usr/lib/ld.so.1
(für eine 32-Bit-ausführbare Datei) oder/usr/lib/64/ld.so.1
(für eine 64-Bit-ausführbare Datei) - jetzt verschoben nach/old
. Sie sollten sich also mit etwas wie Folgendem erholen können:quelle
/old
gilt mein Kommentar zu Peschkes eigenem Kommentar auch hier.mv
sollte nicht verwendet werden sondern ein Befehl, der die bestehende Hierarchie beibehält wiepax
,tar
und beibehält./old/usr/lib/ld.so.1 /old/usr/bin/mv
und/old/usr/lib/ld.so.1 /old/usr/bin/cp
und so weiter. Ich werde sehen, was ich tun kann. Jetzt ist das Problem, dass mir der Raum ausgeht, aber ich kann das möglicherweise beheben./old/usr/lib/ld.so.1 /old/usr/bin/mv
und/old/usr/lib/ld.so.1 /old/usr/bin/cp
doch kein Platz konnte so nicht verwenden/old/usr/lib/ld.so.1 /old/usr/bin/cp
. Und dann bearbeiten$PATH
und dann Ordner für Ordnermv
mit geändert$PATH
. Jetzt ist alles zurückgesetzt, sodass ich mich erneut anmelden und df -h und alles eingeben kann. Vielen dank allen. Wirklich, großartig, danke @Gilles! Vielen Dank, dass Sie StackExchange!LD_LIBRARY_PATH
unter Solaris birgt einige Gefahren, wenn Sie es einstellen müssen, damit Sie sowohl 32- als auch 64-Bit-ausführbare Dateien ausführen können. Es ist besser, die 32- und 64-Bit-spezifischen Versionen zu verwendenLD_LIBRARY_PATH
, die in Solaris verfügbar sind. In diesem Fall:LD_LIBRARY_PATH_32=/old/usr/lib
undLD_LIBRARY_PATH_64=/old/usr/lib/64
. Siehe dield.so.1
Manpage : "Jede Umgebungsvariable kann mit einem _32- oder _64-Suffix angegeben werden. Dadurch ist die Umgebungsvariable für 32-Bit- bzw. 64-Bit-Prozesse spezifisch."Es gibt keine Möglichkeit, ein Verzeichnis zu erstellen oder Binärdateien nur mit Shell-Befehlen zu kopieren (obwohl Gilles in seiner Antwort eine intelligente, mögliche Problemumgehung beschreibt ).
Sie können Solaris am besten auf einem externen Datenträger (DVD, USB-Stick) starten, die Dateisysteme einbinden oder importieren und das Durcheinander folgendermaßen beheben:
Booten Sie eine Solaris-Installationsdiskette und wählen Sie, um eine Shell auszuführen.
Hängen Sie das alte Stammverzeichnis (und alle anderen Dateisysteme, falls vorhanden) in ein Verzeichnis wie
/mnt
oder ein/a
. Die Solaris-Startdiskette kann Ihnen dabei helfen, wenn vorhandene Dateisysteme erkannt werden.Bringe die Dateien mit diesem Befehl an ihren ursprünglichen Speicherort zurück (vorausgesetzt, alles ist unter gemountet
/mnt
):Starten Sie Ihr System neu
Wenn Sie ZFS verwenden und ein aktueller Snapshot vorhanden ist,
/old
kann es auch eine Option sein , das Verzeichnis an einer anderen Stelle zu sichern und auf den letzten Snapshot zurückzugreifen.quelle
mv /mountpoint/old/* /mountpoint
mv
es nicht mein Rat wäre , den von Ihnen vorgeschlagenen Befehl blind auszuführen . Das OP schrieb "alles oder fast alles ". Im zweiten Fall werden durch das Verschieben noch vorhandene Verzeichnisse beschädigt. Ich verwende wahrscheinlich ein Hilfsprogramm wietar
,pax
odercpio
, um die Zielverzeichnishierarchie beizubehalten.lustatus
Und noch keine Panik. Alle Daten sind noch auf den Datenträgern vorhanden.Solaris beinhaltet statische Builds von grundlegenden Werkzeugen (
cp
,ln
,mv
,rcp
, undtar
) in/usr/sbin/static
dass Sie ein Problem mit der Verfügbarkeit reparieren können/usr/lib/ld.so.1
die Verwendung der regulären verhindert , dass dynamisch gebundenen/usr/bin
Versionen.Es gibt keine statische
mkdir
vorgesehen, aber man kann die statische verwendenln
zu Symlink was Verzeichnis enthältlib/ld.so.1
die Stelle als/usr
vorübergehend und dann den Standard verwenden ,mkdir
zu schaffen , was Verzeichnisse , die Sie benötigen. Sie können bereits vorhandene Verzeichnisse mit dem Static umbenennenmv
.quelle
ld.so.1
Standardeinstellung fehlerhaft ist, wenn Sie versuchen, sie manuell auszuführen, wie in Gilles 'Beispiel gezeigt