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 $PATHy también intentaron cambiar $LD_LIBRARY_PATH, $LD_LIBRARY_PATH_64y $LD_RUN_PATHy 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, crlepero 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, mkdiro mvpuesto 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/.../mvsolució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 echoy >o echoy >>para restaurar /usr/lib/ld.so.1? Sé que /usr/lib/ld.so.1probablemente 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.staticestá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_PATHpara que apunte a los directorios que contienen bibliotecas utilizadas por las herramientas básicas del sistema. Eso es al menos/usr/liben un Solaris de 32 bits,/usr/lib/64en 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í.mvno debe ser utilizado, pero un comando que preservar la jerarquía existente comopax,tary los gustos./old/usr/lib/ld.so.1 /old/usr/bin/mvy/old/usr/lib/ld.so.1 /old/usr/bin/cpetcé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/mvy/old/usr/lib/ld.so.1 /old/usr/bin/cpsin espacio, así que no pude usar/old/usr/lib/ld.so.1 /old/usr/bin/cp. Y luego editando$PATHy luego carpeta por carpeta usandomvcon 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_PATHen 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_PATHque están disponibles en Solaris. En este caso:LD_LIBRARY_PATH_32=/old/usr/libyLD_LIBRARY_PATH_64=/old/usr/lib/64. Consulte lald.so.1pá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
/mnto/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
/olddirectorio en otro lugar y luego volver a la última instantánea también podría ser una opción.fuente
mv /mountpoint/old/* /mountpointmvcomando 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,paxocpiopara preservar la jerarquía de directorios de destino.lustatusY 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/staticque se puede utilizar para reparar cualquier problema con la disponibilidad de/usr/lib/ld.so.1que impide el uso de los regulares vinculados dinámicamente/usr/binversiones.No se
mkdirproporciona ninguna estática , pero puede usar la estáticalnpara vincular simbólicamente cualquier directorio que contengalib/ld.so.1en su lugar como/usrtemporalmente, y luego usar el estándarmkdirpara crear los directorios que necesite. Puede cambiar el nombre de los directorios que ya existen utilizando el staticmv.fuente
ld.so.1daña si intentas ejecutarlo manualmente como se muestra en el ejemplo de Gilles