Как гласит заголовок, все или почти все, что важно, поскольку 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
.
Нашел много советов по восстановлению root или / usr / bin и т. Д. Для Linux, но информация о том, что касается Solaris 10 / Unix, не распространена и очень скудна.
Не удается запустить cp
, ln
, mkdir
или с mv
тех пор Cannot find /usr/lib/ld.so.1
. Невозможно войти в систему с другими сеансами на машине. Хотя один сеанс все еще работает, который можно использовать, и это окно останавливается 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
, вероятно, нужно будет восстановить, чтобы команды работали.
Большое спасибо за чтение и хорошего дня =)
источник
mv
. Или точнее:shopt -s extglob; mv !(old) /old
.ln
, если это работает.static
предназначены именно для этой категории проблем, если вы не хотите загружать временные носители.Ответы:
Если у вас больше нет оболочки, работающей от имени пользователя 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
. Таким образом, вы сможете восстановить что-то вроде:источник
/old
, мой комментарий к собственному комментарию Пешке и здесь действителен.mv
не должна использоваться, но команда, которая сохраняет существующую иерархию, какpax
,tar
и любит./old/usr/lib/ld.so.1 /old/usr/bin/mv
и/old/usr/lib/ld.so.1 /old/usr/bin/cp
и так далее. Я посмотрю, что я могу сделать, теперь проблема в том, что мне не хватает места, но я мог бы это исправить./old/usr/lib/ld.so.1 /old/usr/bin/mv
и ,/old/usr/lib/ld.so.1 /old/usr/bin/cp
но нет места , так не могло использовать/old/usr/lib/ld.so.1 /old/usr/bin/cp
. А затем редактирование,$PATH
а затем папку за папкой, используяmv
с измененным$PATH
. Теперь все перемещено назад, поэтому я могу снова войти в систему и набрать df -h и все. Большое спасибо всем. Действительно, большое спасибо тебе, Жиль! Спасибо StackExchange!LD_LIBRARY_PATH
в Solaris сопряжена с некоторыми опасностями, если вам нужно установить ее, чтобы вы могли запускать как 32-, так и 64-битные исполняемые файлы. Было бы лучше использовать 32- и 64-битные версииLD_LIBRARY_PATH
, доступные в Solaris. В этом случае:LD_LIBRARY_PATH_32=/old/usr/lib
иLD_LIBRARY_PATH_64=/old/usr/lib/64
. См.ld.so.1
Справочную страницу : «Каждая переменная среды может быть указана с суффиксом _32 или _64. Это делает переменную среды специфичной, соответственно, для 32-битных или 64-битных процессов».Невозможно создать каталог или скопировать двоичные файлы, используя только встроенные команды оболочки (хотя Жиль описывает в своем ответе умный потенциальный обходной путь ).
Лучший вариант - загрузить Solaris на внешнем носителе (dvd, usb-флешка), смонтировать или импортировать файловую систему (-ы) и исправить ситуацию следующим образом:
Загрузите установочный диск Solaris и выберите запуск оболочки.
Смонтируйте старый корень (и все другие файловые системы, если таковые имеются) в некотором каталоге, например
/mnt
или/a
. Загрузочный диск Solaris может помочь вам сделать это при обнаружении существующих файловых систем.верните файлы в их исходное местоположение с помощью этой команды (при условии, что все смонтировано под
/mnt
):Перезагрузите вашу систему
Если вы используете ZFS и существует недавний моментальный снимок, резервное копирование
/old
каталога в другом месте, а затем возврат к последнему моментальному снимку также может быть вариантом.источник
mv /mountpoint/old/* /mountpoint
mv
команды не было бы моим советом. ОП написала «все или почти все ». Во втором случае переезд сломает все еще существующие каталоги. Скорее всего, я использую утилиту, напримерtar
,pax
илиcpio
для сохранения иерархии целевого каталога.lustatus
И пока не паникуйте. Все данные все еще существуют на диске (ах).Solaris включает в себя статические сборки основных коммунальных услуг (
cp
,ln
,mv
,rcp
, иtar
) в/usr/sbin/static
том , что вы можете использовать , чтобы восстановить любую проблему с наличием того,/usr/lib/ld.so.1
что предотвращает использование регулярных динамически связанных/usr/bin
версий.Статических данных не
mkdir
предусмотрено, но вы можете использовать статическиеln
для символической ссылки на любой каталог,lib/ld.so.1
который/usr
временно находится на месте , а затем использовать стандартmkdir
для создания любых необходимых вам каталогов. Вы можете переименовать каталоги, которые уже существуют, используя статическиеmv
.источник
ld.so.1
сегмент не работает, если вы попытаетесь запустить его вручную, как показано в примере Жиля