Comme le titre l'indique, tout ou presque tout ce qui est important car root sous root (/) a été déplacé vers / old sur une machine Solaris 10. Alors maintenant , la faute typique lorsque vous essayez lorsque les commandes en cours d' exécution sont Cannot find /usr/lib/ld.so.1
(changé $PATH
et aussi essayé de changer $LD_LIBRARY_PATH
, $LD_LIBRARY_PATH_64
et $LD_RUN_PATH
pour les exporter , mais rien qui semble changer le chemin de la bibliothèque réelle). J'ai essayé à peu près hier de trouver quelque chose qui pourrait aider mais n'a rien trouvé qui changerait réellement le chemin de la bibliothèque pour Solaris 10 à part peut-être crle
mais ne peut pas l'exécuter depuis Cannot find /usr/lib/ld.so.1
.
J'ai trouvé beaucoup de conseils de récupération racine ou / usr / bin et ainsi de suite pour Linux, mais les informations concernant Solaris 10 / Unix ne sont pas nombreuses et très rares.
Impossible d' exécuter cp
, ln
, mkdir
ou mv
depuis Cannot find /usr/lib/ld.so.1
. Vous ne pouvez pas non plus vous connecter avec d'autres sessions à la machine. Bien qu'une session soit encore en cours, elle peut être utilisée et cette fenêtre est bloquée while true; do date; echo hej 1234567; done
. Nous avons discuté de la solution pour utiliser un CD de démarrage Solaris et également une dist Linux sur un lecteur USB. Nous avons discuté de la solution pour basculer les disques durs vers un autre rack.
La /.../static/.../mv
solution a été testée mais n'a pas fonctionné.
Les commandes qui peuvent encore être utilisés sont (il pourrait y avoir plus de commandes qui peuvent être utilisées): echo
, <
, >
, >>
, |
, pwd
, cd
.
Existe-t-il un moyen de créer un répertoire ou un dossier sans mkdir
? Existe-t-il un moyen d'utiliser echo
et >
ou echo
et >>
de restaurer/usr/lib/ld.so.1
? Je sais que plus que /usr/lib/ld.so.1
probablement devra être restauré pour que les commandes fonctionnent.
Merci beaucoup d'avoir lu et bonne journée =)
la source
mv
. Ou plus précisément:shopt -s extglob; mv !(old) /old
.ln
, si cela fonctionne.static
sont là pour exactement cette catégorie de problèmes, si vous ne voulez pas démarrer un média temporaire.Réponses:
Si vous n'avez plus de shell en cours d'exécution en tant que root, vous devrez redémarrer sur un support de secours. N'importe quoi fera tant qu'il sera capable de monter le système de fichiers racine en lecture-écriture.
Si vous pouvez toujours exécuter des commandes en tant que root, tout est copacétique. Définissez la variable d'environnement
LD_LIBRARY_PATH
pour pointer vers les répertoires contenant les bibliothèques utilisées par les outils système de base. C'est au moins/usr/lib
sur un Solaris 32 bits,/usr/lib/64
sur un Solaris 64 bits, éventuellement d'autres répertoires (je n'ai pas accès à Solaris 10 pour vérifier). Pour exécuter un exécutable, préfixez-le avec l' éditeur de liens d'exécution :/usr/lib/ld.so.1
(pour un exécutable 32 bits) ou/usr/lib/64/ld.so.1
(pour un exécutable 64 bits) - maintenant déplacé vers/old
. Ainsi, vous devriez pouvoir récupérer avec quelque chose comme:la source
/old
, mon commentaire sur le commentaire de Peschke est également valable ici.mv
ne doit pas être utilisé , mais une commande qui préserve la hiérarchie existante commepax
,tar
et les goûts./old/usr/lib/ld.so.1 /old/usr/bin/mv
et/old/usr/lib/ld.so.1 /old/usr/bin/cp
et ainsi de suite. Je vais voir ce que je peux faire, maintenant le problème est que je suis à court d'espace mais je pourrais peut-être y remédier./old/usr/lib/ld.so.1 /old/usr/bin/mv
et/old/usr/lib/ld.so.1 /old/usr/bin/cp
mais pas d'espace donc je n'ai pas pu utiliser/old/usr/lib/ld.so.1 /old/usr/bin/cp
. Et puis l'édition$PATH
et ensuite dossier par dossier en utilisantmv
avec changé$PATH
. Maintenant, tout est reculé pour que je puisse me reconnecter et taper df -h et tout. Merci beaucoup à tous. Vraiment, merci beaucoup à vous @Gilles! Merci StackExchange!LD_LIBRARY_PATH
de Solaris présente certains risques si vous devez la définir afin de pouvoir exécuter les exécutables 32 et 64 bits. Il serait préférable d'utiliser les versions spécifiques 32 et 64 bitsLD_LIBRARY_PATH
disponibles dans Solaris. Dans ce cas:LD_LIBRARY_PATH_32=/old/usr/lib
etLD_LIBRARY_PATH_64=/old/usr/lib/64
. Voir lald.so.1
page de manuel : "Chaque variable d'environnement peut être spécifiée avec un suffixe _32 ou _64. Cela rend la variable d'environnement spécifique, respectivement, aux processus 32 bits ou 64 bits."Il n'y a aucun moyen de créer un répertoire ou de copier des fichiers binaires avec juste des commandes intégrées au shell (bien que Gilles décrit une solution de contournement potentielle intelligente dans sa réponse ).
La meilleure option est de démarrer Solaris sur un support externe (dvd, clé USB), de monter ou d'importer le (s) système (s) de fichiers et de corriger le désordre avec quelque chose comme:
Démarrez un disque d'installation Solaris et sélectionnez pour exécuter un shell.
Montez l'ancienne racine (et tous les autres systèmes de fichiers le cas échéant) sous un répertoire tel que
/mnt
ou/a
. Le disque de démarrage Solaris peut vous aider à le faire lorsqu'il détecte des systèmes de fichiers existants.remettez les fichiers à leur emplacement d'origine avec cette commande (en supposant que tout est monté sous
/mnt
):Redémarrez votre système
Si vous utilisez ZFS et qu'un instantané récent existe, la sauvegarde du
/old
répertoire ailleurs, puis le retour au dernier instantané peuvent également être une option.la source
mv /mountpoint/old/* /mountpoint
mv
commande suggérée ne soit pas mon conseil. L'OP a écrit "tout ou presque tout ". Dans le second cas, le déplacement cassera les répertoires existants. J'utilise probablement un utilitaire commetar
,pax
oucpio
pour préserver la hiérarchie du répertoire de destination.lustatus
Et ne paniquez pas encore. Toutes les données existent toujours sur le ou les disques.Solaris comprend statique construit des utilitaires de base (
cp
,ln
,mv
,rcp
ettar
) à/usr/sbin/static
ce que vous pouvez utiliser pour réparer tout problème avec la disponibilité de/usr/lib/ld.so.1
qui empêche l'utilisation des réguliers dynamiquement liées/usr/bin
versions.Il n'y a pas statique
mkdir
fourni, mais vous pouvez utiliser l'électricité statiqueln
pour symlink quel que soit le répertoire contientlib/ld.so.1
en place que/usr
temporairement, puis utilisez la normemkdir
pour créer des répertoires dont vous avez besoin tout. Vous pouvez renommer des répertoires qui existent déjà en utilisant le statiquemv
.la source
ld.so.1
segfaults stock si vous essayez de l'exécuter manuellement comme le montre l'exemple de Gilles