正如标题所说,在 Solaris 10 计算机上,root (/) 下的 root 下的所有或几乎所有重要的内容都已移至 /old。所以现在尝试运行命令时的典型错误是Cannot find /usr/lib/ld.so.1
(更改$PATH
并尝试更改$LD_LIBRARY_PATH
,$LD_LIBRARY_PATH_64
和$LD_RUN_PATH
并导出它们,但似乎没有改变真正的库路径)。昨天几乎尝试寻找一些可能有帮助的东西,但发现没有什么可以真正改变 Solaris 10 的库路径,除了可能,crle
但自 以来无法运行它Cannot find /usr/lib/ld.so.1
。
发现了很多针对 Linux 的 root 或 /usr/bin 恢复技巧等,但有关 Solaris 10/Unix 的信息并不丰富且非常稀疏。
无法运行cp
、ln
或自mkdir
以来。也无法使用其他会话登录到该计算机。尽管有一个会话仍在运行,可以使用,但该窗口因.我们已经讨论了使用 Solaris 引导 CD 以及 USB 驱动器上的 Linux 发行版的解决方案。我们已经讨论了将硬盘驱动器磁盘切换到另一个机架的解决方案。mv
Cannot find /usr/lib/ld.so.1
while true; do date; echo hej 1234567; done
该/.../static/.../mv
解决方案已经过测试,但没有成功。
仍然可以使用的命令有(可能还有更多可以使用的命令):echo
, <
, >
, >>
, |
, pwd
, cd
。
有没有办法创建不带目录或文件夹的方法mkdir
?有什么方法可以使用echo
and>
或echo
and>>
来恢复吗/usr/lib/ld.so.1
?我知道可能/usr/lib/ld.so.1
需要恢复的内容才能使命令正常工作。
非常感谢您的阅读,祝您度过愉快的一天 =)
答案1
如果您不再以 root 身份运行 shell,则必须重新启动到应急媒体。只要能够以读写方式挂载根文件系统,任何方法都可以。
如果您仍然可以以 root 身份运行命令,那么一切都会很顺利。设置环境变量LD_LIBRARY_PATH
指向包含基本系统工具使用的库的目录。至少/usr/lib
在 32 位 Solaris 上,/usr/lib/64
在 64 位 Solaris 上,可能还有其他目录(我现在无法访问 Solaris 10 来检查)。要运行可执行文件,请在其前面添加前缀运行时链接器:(/usr/lib/ld.so.1
对于 32 位可执行文件)或/usr/lib/64/ld.so.1
(对于 64 位可执行文件)— 现在移至/old
.因此,您应该能够通过以下方式恢复:
LD_LIBRARY_PATH=/old/usr/lib
export LD_LIBRARY_PATH
/old/usr/lib/ld.so.1 /old/usr/bin/mv /old/* /
答案2
仅使用 shell 内置命令无法创建目录或复制二进制文件(尽管 Gilles 描述了一种聪明的潜在解决方法在他的回复中)。
最好的选择是在外部介质(DVD、U 盘)上启动 Solaris,安装或导入文件系统,然后使用以下命令修复混乱的情况:
引导 Solaris 安装盘并选择运行 shell。
将旧根目录(以及所有其他文件系统,如果有)安装在某个目录下,例如
/mnt
或/a
。当 Solaris 引导磁盘检测到现有文件系统时,它可能会帮助您执行此操作。使用此命令将文件放回其原始位置(假设所有文件都安装在 下
/mnt
):cd /mnt/old find . -depth | cpio -pdlmPV@ /mnt
重新启动您的系统
init 6
如果您使用 ZFS 并且存在最近的快照,/old
则也可以选择在其他位置备份目录,然后恢复到最后一个快照。
答案3
Solaris 包含基本实用程序的静态版本(cp
、ln
、mv
、rcp
和tar
) ,您可以使用它们来修复阻止使用常规动态链接版本的/usr/sbin/static
任何可用性问题。/usr/lib/ld.so.1
/usr/bin
没有mkdir
提供静态,但您可以使用静态ln
将包含的任何目录临时符号链接lib/ld.so.1
到适当的位置/usr
,然后使用标准mkdir
创建您需要的任何目录。您可以使用 static 重命名已存在的目录mv
。
这至少可以追溯到 Solaris 2.5.1,在那里我发现如果您尝试手动运行它,库存 ld.so.1 就会出现段错误,如 Gilles 的示例所示。