unix – случайно переместил все под root в / old – Solaris 10

Поскольку заголовок говорит, что все или почти все, что важно, как root под root (/), было перенесено на / old на машине Solaris 10. Итак, типичная ошибка при попытке запуска команд: « 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 .

Нашел множество советов по корневому каталогу или / usr / bin и т. Д. Для Linux, но эта информация для Solaris 10 / Unix не распространена и очень скудна.

Не Cannot find /usr/lib/ld.so.1 запустить cp , ln , mkdir или mv поскольку Cannot find /usr/lib/ld.so.1 . Не удается войти в систему с другими сеансами. Хотя один сеанс все еще работает, и это окно застопоривается, while true; do date; echo hej 1234567; done while true; do date; echo hej 1234567; done while true; do date; echo hej 1234567; done . Мы обсудили решение использовать загрузочный компакт-диск Solaris, а также Linux-диск на USB-накопителе. Мы обсудили решение по переключению жестких дисков на другую стойку.

Решение /.../static/.../mv было протестировано, но оно не сработало.

Команды, которые все еще могут быть использованы (может быть больше команд, которые могут быть использованы): echo , < , > , >> , | , pwd , cd .

Есть ли способ создать каталог или папку без mkdir ? Есть ли способ использовать echo и > или echo и >> для восстановления /usr/lib/ld.so.1 ? Я знаю, что больше, чем /usr/lib/ld.so.1 , вероятно, нужно будет восстановить, чтобы команды работали.

Большое спасибо за чтение и очень хороший день =)

Если у вас больше нет оболочки с правами root, вам придется перезагрузиться в аварийный носитель. Все будет сделано до тех пор, пока он способен монтировать корневую файловую систему чтения-записи.

Если вы все еще можете запускать команды с правами 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/* / 

Невозможно создать каталог или скопировать двоичные файлы с помощью только встроенных команд оболочки (хотя Жиль описывает сложный способ обхода проблемы в своем ответе ).

Лучше всего загружать Solaris на внешний носитель (dvd, usb stick), монтировать или импортировать файловую систему (ы) и исправлять беспорядок с чем-то вроде:

  • Загрузите установочный диск Solaris и выберите команду для запуска оболочки.

  • Установите старый корень (и все остальные файловые системы, если они есть) в какой-либо директории, например /mnt или /a . Загрузочный диск Solaris может помочь вам в этом, когда он обнаружит существующие файловые системы.

  • верните файлы в исходное местоположение с помощью этой команды (при условии, что все установлено в /mnt ):

     cd /mnt/old find . -depth | cpio -pdlmPV@ /mnt 
  • Перезагрузите свою систему

     init 6 

Если вы используете ZFS, и существует недавний моментальный снимок, резервное копирование /old директория в другом месте, а также возврат к последнему снимку.