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.