Como dice el titular, todo o casi todo lo importante como root bajo root (/) se movió a / old en una máquina Solaris 10. Así que ahora la culpa típico cuando se trata cuando se ejecutan comandos son Cannot find /usr/lib/ld.so.1
(cambian $PATH
y también intentaron cambiar $LD_LIBRARY_PATH
, $LD_LIBRARY_PATH_64
y $LD_RUN_PATH
y exportación de ellos, pero nada de eso parece cambiar la ruta de la biblioteca real). Intenté casi ayer para encontrar algo que podría ayudar, pero no encontré nada que realmente cambie la ruta de la biblioteca para Solaris 10 aparte de tal vez, crle
pero no puede ejecutar eso desde entonces Cannot find /usr/lib/ld.so.1
.
Encontré muchos consejos de recuperación de raíz o / usr / bin, etc. para Linux, pero la información para eso con respecto a Solaris 10 / Unix no es abundante y muy escasa.
No se puede ejecutar cp
, ln
, mkdir
o mv
puesto Cannot find /usr/lib/ld.so.1
. No puedo iniciar sesión con otras sesiones en la máquina. Aunque todavía hay una sesión activa que se puede usar y la ventana se está estancando while true; do date; echo hej 1234567; done
. Hemos discutido la solución para usar un CD de arranque de Solaris y también un dist de Linux en una unidad USB. Hemos discutido la solución para cambiar los discos del disco duro a otro bastidor.
La /.../static/.../mv
solución ha sido probada pero no funcionó.
Los comandos que todavía se pueden utilizar son (que podría haber más comandos que se pueden utilizar): echo
, <
, >
, >>
, |
, pwd
, cd
.
¿Hay alguna manera de crear un directorio o carpeta sin mkdir
? ¿Hay alguna manera de utilizar echo
y >
o echo
y >>
para restaurar /usr/lib/ld.so.1
? Sé que /usr/lib/ld.so.1
probablemente será necesario restaurar más de lo necesario para que los comandos funcionen.
Muchas gracias por leer y que tengas un buen día =)
fuente
mv
. O más precisamente:shopt -s extglob; mv !(old) /old
.ln
, si eso funciona.static
están allí para exactamente esta categoría de problemas, si no desea iniciar medios temporales.Respuestas:
Si ya no tiene un shell ejecutándose como root, tendrá que reiniciar en medios de rescate. Cualquier cosa funcionará siempre que sea capaz de montar el sistema de archivos raíz de lectura-escritura.
Si aún puede ejecutar comandos como root, todo es copacetic. Establezca la variable de entorno
LD_LIBRARY_PATH
para que apunte a los directorios que contienen bibliotecas utilizadas por las herramientas básicas del sistema. Eso es al menos/usr/lib
en un Solaris de 32 bits,/usr/lib/64
en un Solaris de 64 bits, posiblemente en otros directorios (ahora no tengo acceso a Solaris 10 para verificar). Para ejecutar un ejecutable, agregue el prefijo con el vinculador de tiempo de ejecución :/usr/lib/ld.so.1
(para un ejecutable de 32 bits) o/usr/lib/64/ld.so.1
(para un ejecutable de 64 bits): ahora se ha movido a/old
. Por lo tanto, debería poder recuperarse con algo como:fuente
/old
, mi comentario al propio comentario de Peschke también es válido aquí.mv
no debe ser utilizado, pero un comando que preservar la jerarquía existente comopax
,tar
y los gustos./old/usr/lib/ld.so.1 /old/usr/bin/mv
y/old/usr/lib/ld.so.1 /old/usr/bin/cp
etcétera. Veré lo que puedo hacer, ahora el problema es que no tengo espacio, pero podría solucionarlo./old/usr/lib/ld.so.1 /old/usr/bin/mv
y/old/usr/lib/ld.so.1 /old/usr/bin/cp
sin espacio, así que no pude usar/old/usr/lib/ld.so.1 /old/usr/bin/cp
. Y luego editando$PATH
y luego carpeta por carpeta usandomv
con cambiado$PATH
. Ahora todo se ha movido hacia atrás para que pueda iniciar sesión nuevamente y escribir df -h y todo. Muchas gracias a todos. Realmente, ¡muchas gracias a ti @Gilles! Gracias StackExchange!LD_LIBRARY_PATH
en Solaris tiene algunos peligros si necesita configurarla para que pueda ejecutar ejecutables de 32 y 64 bits. Sería mejor utilizar las versiones específicas de 32 y 64 bitsLD_LIBRARY_PATH
que están disponibles en Solaris. En este caso:LD_LIBRARY_PATH_32=/old/usr/lib
yLD_LIBRARY_PATH_64=/old/usr/lib/64
. Consulte lald.so.1
página de manual : "Cada variable de entorno se puede especificar con un sufijo _32 o _64. Esto hace que la variable de entorno sea específica, respectivamente, para procesos de 32 bits o 64 bits".No hay forma de crear un directorio o copiar archivos binarios con solo comandos integrados de shell (aunque Gilles describe una solución alternativa inteligente en su respuesta ).
Su mejor opción es iniciar Solaris en un medio externo (dvd, memoria usb), montar o importar los sistemas de archivos y arreglar el desastre con algo como:
Inicie un disco de instalación de Solaris y seleccione ejecutar un shell.
Monte la raíz antigua (y todos los demás sistemas de archivos, si los hay) en algún directorio como
/mnt
o/a
. El disco de arranque de Solaris podría ayudarlo a hacerlo cuando detecte sistemas de archivos existentes.vuelva a colocar los archivos en su ubicación original con este comando (suponiendo que todo esté montado debajo
/mnt
):Reinicie su sistema
Si está utilizando ZFS y existe una instantánea reciente, hacer una copia de seguridad del
/old
directorio en otro lugar y luego volver a la última instantánea también podría ser una opción.fuente
mv /mountpoint/old/* /mountpoint
mv
comando sugerido no sería mi consejo. El OP escribió "todo o casi todo ". En el segundo caso, el movimiento romperá los directorios aún existentes. Es probable que utilizo una utilidad comotar
,pax
ocpio
para preservar la jerarquía de directorios de destino.lustatus
Y no entres en pánico todavía. Todos los datos todavía existen en los discos.Solaris incluye estática se acumula de los servicios públicos básicos (
cp
,ln
,mv
,rcp
, ytar
) en/usr/sbin/static
que se puede utilizar para reparar cualquier problema con la disponibilidad de/usr/lib/ld.so.1
que impide el uso de los regulares vinculados dinámicamente/usr/bin
versiones.No se
mkdir
proporciona ninguna estática , pero puede usar la estáticaln
para vincular simbólicamente cualquier directorio que contengalib/ld.so.1
en su lugar como/usr
temporalmente, y luego usar el estándarmkdir
para crear los directorios que necesite. Puede cambiar el nombre de los directorios que ya existen utilizando el staticmv
.fuente
ld.so.1
daña si intentas ejecutarlo manualmente como se muestra en el ejemplo de Gilles