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

pro*_*nce 13 solaris system-recovery

正如标题所说,在 Solaris 10 机器上,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 的信息并不普遍且非常稀少。

不能运行cplnmkdirmvCannot find /usr/lib/ld.so.1。不能使用其他会话登录到机器。尽管一个会话仍然可以使用,并且该窗口被while true; do date; echo hej 1234567; done. 我们已经讨论了在 USB 驱动器上使用 Solaris 引导 CD 和 Linux dist 的解决方案。我们已经讨论了将硬盘驱动器磁盘切换到另一个机架的解决方案。

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

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

有没有办法创建一个目录或文件夹没有mkdir?有没有办法使用echoand>echoand>>来恢复/usr/lib/ld.so.1?我知道/usr/lib/ld.so.1为了使命令起作用,可能需要恢复的不仅仅是更多。

非常感谢您的阅读,祝您有美好的一天 =)

Gil*_*il' 19

如果您不再有以 root 身份运行的 shell,则必须重新启动进入应急媒体。只要它能够以读写方式挂载根文件系统,任何事情都可以。

如果您仍然可以以 root 身份运行命令,那么一切都将变得简单。将环境变量设置LD_LIBRARY_PATH为指向包含基本系统工具使用的库的目录。至少/usr/lib在 32 位 Solaris、/usr/lib/6464 位 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/* /
Run Code Online (Sandbox Code Playgroud)


jll*_*gre 16

仅使用 shell 内置命令无法创建目录或复制二进制文件(尽管 Gilles在他的回复中描述了一个聪明的潜在解决方法)。

您最好的选择是在外部媒体(dvd、USB 记忆棒)上引导 Solaris,安装或导入文件系统,并使用以下内容修复混乱:

  • 引导 Solaris 安装盘并选择运行 shell。

  • 将旧根目录(以及所有其他文件系统,如果有的话)挂载在某个目录下,例如/mnt/a。Solaris 引导盘在检测到现有文件系统时可能会帮助您做到这一点。

  • 使用此命令将文件放回其原始位置(假设所有文件都安装在 下/mnt):

    cd /mnt/old
    find . -depth | cpio -pdlmPV@ /mnt
    
    Run Code Online (Sandbox Code Playgroud)
  • 重新启动系统

    init 6
    
    Run Code Online (Sandbox Code Playgroud)

如果您正在使用 ZFS 并且存在最近的快照,则在/old别处备份目录然后恢复到最后一个快照也可能是一个选项。