unix - випадково перемістив все під корінь до / old - Solaris 10


13

Як заголовок говорить, що все або майже все важливе, оскільки root під коренем (/) було переміщено в / старий на машині 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, напевно, потрібно буде відновити, щоб команди працювали.

Дякую вам за прочитання та приємний день =)


2
Яку команду використовували для переміщення матеріалів до / old?
schaiba

Стандарт Solaris mv. Або точніше: shopt -s extglob; mv !(old) /old.
пропатія

1
Яка оболонка працює на даний момент? деякі снаряди мають команди
вбудовування

Ви можете виправити це ln, якщо це працює.
Девід Шварц

2
"Рішення /.../static/.../mv перевірено, але воно не спрацювало." Що трапилось? Це помилка завантажувача? Що саме "не працювало"? Бінарні файли staticіснують саме для цієї категорії проблем, якщо ви не хочете завантажувати тимчасові носії інформації.
Ti Strga

Відповіді:


19

Якщо у вас більше не працює оболонка, що працює як root, вам доведеться перезавантажити в рятувальний носій. Все буде робити, доки воно зможе встановити кореневу файлову систему читання-запису.

Якщо ви все ще можете запускати команди як 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/* /

Розумне використання навантажувача. Якщо всю ієрархію не було перенесено /old, мій коментар до власного коментаря Пешке також діє. mvне повинні використовуватися , але команда , яка зберігає існуючу ієрархію , як pax, tarі любить.
jlliagre

1
Дуже дякую за ваше терпіння і знайшли час, щоб написати це. Він працює в даний час виконання команд , як /old/usr/lib/ld.so.1 /old/usr/bin/mvі /old/usr/lib/ld.so.1 /old/usr/bin/cpі так далі. Я побачу, що я можу зробити, зараз проблема полягає в тому, що мені не вистачає місця, але я можу це виправити.
пропатія

@propatience Шкода, що ти і Гілль не розглядали мої коментарі ...
jlliagre

1
Так, БОГ! Мені вдалося перемістити назад все з першим /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 і все. Дуже дякую всім. Дійсно, велике спасибі вам @Gilles! Дякую StackExchange!
пропатія

1
Встановлення LD_LIBRARY_PATHSolaris має певні небезпеки, якщо вам потрібно встановити його, щоб ви могли запускати як 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-бітовим процесам."
Ендрю Генле

16

Немає можливості створити каталог або скопіювати бінарні файли за допомогою просто вбудованих команд оболонок (хоча Жил описує розумний потенційний шлях у своїй відповіді ).

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

  • Завантажте інсталяційний диск Solaris і виберіть для запуску оболонки.

  • Встановіть старий корінь (та всі інші файлові системи, якщо такі є) під деякий каталог, як /mntабо /a. Завантажувальний диск Solaris може допомогти вам зробити це під час виявлення існуючих файлових систем.

  • поверніть файли до їх початкового місця за допомогою цієї команди (при умові, що всі встановлені під /mnt):

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

    init 6
    

Якщо ви використовуєте ZFS і нещодавній знімок існує, резервне копіювання /oldкаталогу в іншому місці, то також можливим є повернення до останнього знімка.


Чудова відповідь. Увімкніть рятувальний USB, встановіть файлову систему та виконайте щось на кшталтmv /mountpoint/old/* /mountpoint
Пешке

1
@Peschke Дякую, хоча сліпо виконання вашої запропонованої mvкоманди не було б моєю порадою. В ОП написали "все або майже все ". У другому випадку переміщення порушить існуючі каталоги. Я , ймовірно , використовувати утиліту на кшталт tar, paxчи cpioзберегти ієрархію каталогів призначення.
jlliagre

Дуже дякую за те, що швидко відреагували та дуже дякую за відповіді. Я можу спробувати це завтра.
пропатія

Зв'язаний з можливим знімком (ZFS або UFS), ви можете завантажуватися до альтернативного BE, якщо ви використовуєте оновлення в реальному часі. lustatus І не панікуйте ще. Усі дані все ще існують на диску (дисках).
сонний сапун

0

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.


Це стосується як мінімум назад, як Solaris 2.5.1, де я виявив, що запас не працює, ld.so.1якщо спробувати запустити його вручну, як показано на прикладі Жиля
rakslice
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.