unix - przypadkowo przeniósł wszystko pod rootem do / old - Solaris 10

13

Jak mówi nagłówek, wszystko lub prawie wszystko ważne, ponieważ root w root (/) został przeniesiony do / old na komputerze z systemem Solaris 10. Więc teraz, gdy próbuje typowe usterki podczas uruchamiania polecenia są Cannot find /usr/lib/ld.so.1(zmieniła $PATHi również próbował zmianie $LD_LIBRARY_PATH, $LD_LIBRARY_PATH_64a $LD_RUN_PATHich i eksportu, ale nic z tego zdaje się zmienić ścieżkę biblioteki Real). Próbowałem wczoraj znaleźć coś, co może pomóc, ale nie znalazłem niczego, co faktycznie zmieni ścieżkę biblioteki dla Solaris 10, niż być może, crleale od tego czasu nie można uruchomić Cannot find /usr/lib/ld.so.1.

Znalazłem wiele porad dotyczących odzyskiwania roota / / usr / bin i tak dalej dla Linuksa, ale te informacje na temat Solaris 10 / Unix nie są powszechne i bardzo rzadkie.

Nie można uruchomić cp, ln, mkdirlub mvod Cannot find /usr/lib/ld.so.1. Nie można zalogować się przy użyciu innych sesji na komputerze. Chociaż jedna sesja jest nadal aktywna, z której można korzystać, a okno jest zablokowane while true; do date; echo hej 1234567; done. Omówiliśmy rozwiązanie polegające na użyciu rozruchowej płyty CD Solaris, a także dystrybucji Linux na dysku USB. Omówiliśmy rozwiązanie zmiany dysków twardych na inny stojak.

/.../static/.../mvRozwiązanie zostało przetestowane, ale to nie działa.

Te, które nadal mogą być stosowane są polecenia (nie może być więcej poleceń, które mogą być używane): echo, <, >, >>, |, pwd, cd.

Czy istnieje sposób na utworzenie katalogu lub folderu bez mkdir? Czy jest jakiś sposób na użycie echoi >lub echoi >>przywrócenie /usr/lib/ld.so.1? Wiem, że więcej niż /usr/lib/ld.so.1trzeba będzie prawdopodobnie przywrócić, aby polecenia działały.

Dziękuję bardzo za przeczytanie i życzę miłego dnia =)

życzliwość
źródło
2
Jakiego polecenia użyto do przeniesienia rzeczy do / old?
schaiba
Standard Solaris mv. Albo dokładniej: shopt -s extglob; mv !(old) /old.
propatience
1
Jaka powłoka działa w tej chwili? niektóre pociski mają wbudowane polecenia
Ferrybig
Możesz to naprawić ln, jeśli to działa.
David Schwartz
2
„Rozwiązanie /.../static/.../mv zostało przetestowane, ale nie działało”. Co się stało? Czy wystąpił błąd modułu ładującego? Co dokładnie nie działało? Pliki binarne staticznajdują się na dokładnie tę kategorię problemów, jeśli nie chcesz uruchamiać nośnika tymczasowego.
Ti Strga

Odpowiedzi:

19

Jeśli nie masz już powłoki działającej jako root, będziesz musiał ponownie uruchomić komputer na nośniku ratunkowym. Wszystko będzie działać, o ile będzie w stanie zamontować główny system plików do odczytu i zapisu.

Jeśli nadal możesz uruchamiać polecenia jako root, wszystko jest copacetic. Ustaw zmienną środowiskową, LD_LIBRARY_PATHaby wskazywała katalogi zawierające biblioteki używane przez podstawowe narzędzia systemowe. Dotyczy to przynajmniej /usr/lib32-bitowego systemu Solaris, /usr/lib/6464-bitowego systemu Solaris, ewentualnie innych katalogów (nie mam teraz dostępu do systemu Solaris 10, aby to sprawdzić). Aby uruchomić plik wykonywalny, poprzedź go łącznikiem wykonawczym : /usr/lib/ld.so.1(dla 32-bitowego pliku wykonywalnego) lub /usr/lib/64/ld.so.1(dla 64-bitowego pliku wykonywalnego) - teraz przeniesiony do /old. Dlatego powinieneś być w stanie wyzdrowieć za pomocą czegoś takiego:

LD_LIBRARY_PATH=/old/usr/lib
export LD_LIBRARY_PATH
/old/usr/lib/ld.so.1 /old/usr/bin/mv /old/* /
Gilles „SO- przestań być zły”
źródło
Inteligentne korzystanie z modułu ładującego. Jeśli cała hierarchia nie została przeniesiona /old, mój komentarz do własnego komentarza Peschke również jest ważny tutaj. mvNie należy stosować, ale komenda zachować istniejącą hierarchię podobnego pax, tari lubi.
jlliagre
1
Dziękuję bardzo za cierpliwość i poświęcenie czasu na napisanie tego. Działa teraz uruchomione polecenia jak /old/usr/lib/ld.so.1 /old/usr/bin/mvi /old/usr/lib/ld.so.1 /old/usr/bin/cpi tak dalej. Zobaczę, co mogę zrobić, teraz problem polega na tym, że brakuje mi miejsca, ale może uda mi się to naprawić.
propatience
@propatience Szkoda, że ​​ty i Gilles nie rozważaliście moich komentarzy ...
jlliagre
1
BÓG! Udało mi się przenieść z powrotem wszystko z pierwszej /old/usr/lib/ld.so.1 /old/usr/bin/mvi /old/usr/lib/ld.so.1 /old/usr/bin/cp, ale nie ma miejsca, więc nie można użyć /old/usr/lib/ld.so.1 /old/usr/bin/cp. A następnie edycja, $PATHa następnie folder po folderze za mvpomocą zmienionego $PATH. Teraz wszystko zostało cofnięte, dzięki czemu mogę zalogować się ponownie i wpisać df -h i wszystko. Dziękuję bardzo wszystkim. Naprawdę, wielkie dzięki dla ciebie @Gilles! Dziękuję StackExchange!
propatience
1
Ustawienie LD_LIBRARY_PATHw systemie Solaris wiąże się z pewnymi zagrożeniami, jeśli trzeba je ustawić, aby można było uruchamiać zarówno 32-, jak i 64-bitowe pliki wykonywalne. Lepiej byłoby użyć 32- i 64-bitowych wersji LD_LIBRARY_PATHdostępnych w systemie Solaris. W takim przypadku: LD_LIBRARY_PATH_32=/old/usr/libi LD_LIBRARY_PATH_64=/old/usr/lib/64. Zobacz ld.so.1stronę manuala : „Każda zmienna środowiskowa może być podana z przyrostkiem _32 lub _64. Dzięki temu zmienna środowiskowa jest specyficzna odpowiednio dla procesów 32-bitowych lub 64-bitowych.”
Andrew Henle,
16

Nie ma możliwości utworzenia katalogu lub skopiowania plików binarnych za pomocą wbudowanych poleceń powłoki (chociaż Gilles opisuje inteligentne potencjalne obejście w swojej odpowiedzi ).

Najlepszą opcją jest uruchomienie systemu Solaris na nośniku zewnętrznym (dvd, pamięć USB), zamontowanie lub zaimportowanie systemów plików i naprawienie bałaganu za pomocą:

  • Uruchom dysk instalacyjny Solaris i wybierz, aby uruchomić powłokę.

  • Zamontuj stary katalog główny (i wszystkie inne systemy plików, jeśli istnieją) w jakimś katalogu, takim jak /mntlub /a. Dysk rozruchowy Solaris może ci w tym pomóc, gdy wykryje istniejące systemy plików.

  • umieść pliki z powrotem w ich oryginalnej lokalizacji za pomocą tego polecenia (zakładając, że wszystko jest zamontowane pod /mnt):

    cd /mnt/old
    find . -depth | cpio -pdlmPV@ /mnt
    
  • Uruchom ponownie system

    init 6
    

Jeśli korzystasz z ZFS i istnieje ostatnia migawka, utworzenie kopii zapasowej /oldkatalogu w innym miejscu, a następnie powrót do ostatniej migawki może być również opcją.

jlliagre
źródło
Świetna odpowiedź. Uruchom ratunkowy USB, zamontuj system plików, a następnie zrób coś takiegomv /mountpoint/old/* /mountpoint
Peschke
1
@Peschke Dzięki, chociaż oślepiające uruchomienie sugerowanej mvkomendy nie byłoby moją radą. OP napisał „wszystko lub prawie wszystko ”. W drugim przypadku przenoszenie spowoduje uszkodzenie istniejących katalogów. I prawdopodobnie użyć narzędzia podobnego tar, paxalbo cpiozachować hierarchię katalogów przeznaczenia.
jlliagre
Dziękuję bardzo za szybką odpowiedź i bardzo dziękuję za odpowiedzi. Mogę spróbować tego jutro.
propatience
Powiązany z możliwą migawką (ZFS lub UFS), możesz uruchomić się na alternatywnym BE, jeśli używasz aktualizacji na żywo. lustatus I jeszcze nie panikuj. Wszystkie dane nadal istnieją na dyskach.
sleepyweasel
0

Solaris zawiera statyczne buduje podstawowych narzędzi ( cp, ln, mv, rcp, i tar), w /usr/sbin/staticktórych można użyć, aby naprawić żadnych problemów z dostępnością /usr/lib/ld.so.1, który uniemożliwia korzystanie z regularnych dynamicznie powiązanych /usr/binwersjach.

Nie ma statycznego mkdir, ale można użyć statycznego lndo dowiązania symbolicznego dowolnego katalogu lib/ld.so.1na miejscu /usr, a następnie użyć standardowego mkdirdo utworzenia dowolnych katalogów, których potrzebujesz. Możesz zmienić nazwy katalogów, które już istnieją, używając statycznego mv.

Rakslice
źródło
Odnosi się to przynajmniej do wersji Solaris 2.5.1, w której zauważyłem, że zapasy się ld.so.1psują, jeśli spróbujesz uruchomić je ręcznie, jak pokazano w przykładzie Gillesa
rakslice