unix - 意外地将 root 下的所有内容移至 /old - Solaris 10

unix - 意外地将 root 下的所有内容移至 /old - Solaris 10

正如标题所说,在 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 的信息并不丰富且非常稀疏。

无法运行cpln或自mkdir以来。也无法使用其他会话登录到该计算机。尽管有一个会话仍在运行,可以使用,但该窗口因.我们已经讨论了使用 Solaris 引导 CD 以及 USB 驱动器上的 Linux 发行版的解决方案。我们已经讨论了将硬盘驱动器磁盘切换到另一个机架的解决方案。mvCannot find /usr/lib/ld.so.1while true; do date; echo hej 1234567; done

/.../static/.../mv解决方案已经过测试,但没有成功。

仍然可以使用的命令有(可能还有更多可以使用的命令):echo, <, >, >>, |, pwd, cd

有没有办法创建不带目录或文件夹的方法mkdir?有什么方法可以使用echoand>echoand>>来恢复吗/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 包含基本实用程序的静态版本(cplnmvrcptar) ,您可以使用它们来修复阻止使用常规动态链接版本的/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 的示例所示。

相关内容