Przypadkowo spakowałem cały serwer

10

W porządku, jeśli ktoś chce grać w boga i czynić cuda, jestem przygnębiony.

Zadanie polegało na stworzeniu skryptu, który znalazł pliki starsze niż 6 miesięcy, spakował je, a następnie usunął. Po drodze, tworząc skrypt Tihs, uruchomiłem to:

find / -type f -mtime -400 ! -mtime -180 | xargs gzip blablabla

Dzięki temu KAŻDY POJEDYNCZY PLIK ma rozszerzenie .gz. Teraz to rozwiązałem, gdy tylko zauważyłem, ale było trochę za późno. Po zakończeniu polecenia żadne z moich poleceń bash nie będzie działać, ponieważ zmienna $ PATH opróżniła się. Próbowałem wielu rzeczy, zanim zdałem sobie sprawę, na czym polega problem.

Więc rozpakuj wszystko, czego wciąż nie mogę uruchomić. Udało mi się go uratować, po czym wykonałem instrukcje online dotyczące:

root (hd0,0)
setup (hd0)
kernel (hd0,0)/boot/vml[...]
initrd (hd0,0)/boot/initrd.im[...]

Po którym mój Linux częściowo uruchamia się, ale daje mi następujące błędy:

Begin : Running /scripts/init-bottom ... mount : mounting /dev on /root/dev failed : No such file or directory
mount: mounting /sys/ on /root/sys failed: No such file or directory
mount: mounting /proc on /root/proc failed : No such file or directory
Target filesystem doesn't have requrested /sbin/init.
No init found. Try passing init= bootarg.

Próbowałem naprawić system plików, uruchomiłem z 3 różnych dysków LiveCD / Rescue, uruchomiłem naprawę rozruchu z 2 różnych dicsc. Zmusiłem fscks ...

Naprawdę brakuje mi pomysłów i POTRZEBUJĘ, aby ten serwer przynajmniej się uruchomił, aby móc odzyskać moje bazy danych SQL. Desperacko potrzebuję pomocy, zapłacę nawet w razie potrzeby.

Przez 3 dni czaję na forach, by znaleźć możliwe rozwiązanie, i wciąż jestem w tym samym punkcie ... Proszę o pomoc?

Dexirian
źródło
3
jeśli są to bazy danych mysql, niekoniecznie musisz się uruchamiać; w takim przypadku spróbowałbym zamontować dysk jako slave i skopiować do katalogu / var / lib / mysql
user16081-JoeT
8
Czysta instalacja na nowych urządzeniach magazynujących. Zamontuj stary dysk, w razie potrzeby przenieś dane. Założę się, że naprawa nie będzie warta wysiłku.
Zoredache,
7
W tym momencie przywracasz dane z kopii zapasowej. I pamiętaj, aby następnym razem nie biegać wokoło, wykonując nieuprzywilejowanych działań jako użytkownik root.
Magellan,
1
because of version differences,zainstaluj ponownie z dokładnie tą samą wersją. we have corruption issues,Twoje dane mogą być uszkodzone. Naprawienie systemu, tak aby można go było uruchomić, nie pomoże, jeśli dane zostaną zniszczone. Jeśli polecenie gzip skompresowało pliki bazy danych podczas korzystania z bazy danych, uszkodzenie jest nieuniknione.
Zoredache
5
Jeśli oprogramowanie DB było uruchomione podczas uruchamiania tych poleceń, odzyskanie DB może nie być możliwe. Gzip chętnie spakowałby plik, a następnie go rozłączył. Ale oprogramowanie DB nadal miało otwarty plik i zatwierdzał zmiany. Gdy tylko się zatrzymał, plik został następnie usunięty.
toppledwagon

Odpowiedzi:

8

Będzie to zależeć od tego, czy systemy plików zostaną wystarczająco naprawione, abyś mógł zamontować te partycje z LiveCD. Nie próbuj jeszcze uruchamiać systemu. Najpierw zamontuj partycje i rozpakuj wszystkie pliki .gz. To da ci robocze kopie plików binarnych init i systemowych. Następnie możesz użyć gruba, aby naprawić sektor rozruchowy. Następnie uruchom system w trybie pojedynczego użytkownika i ponownie sprawdź system plików. Jeśli to zadziała, będziesz mieć działający system. Będziesz także mieć kilka rozpakowanych plików (takich jak strony podręcznika man), które naprawdę powinny zostać skompresowane, ale jest to lepsze niż posiadanie systemu, którego nie można uruchomić.

Jeśli nie możesz zamontować partycji z LiveCD, to niestety nie masz szczęścia. W tym momencie nic nie odzyska systemu.

Michael Martinez
źródło
1
To działało jak urok ... nie mogę ci za to wystarczająco podziękować! MySQL nie chce się uruchomić, ale nie zrobiłem jeszcze --force fsck, mam nadzieję, że to naprawi! DZIĘKI
Dexirian
1
Niesamowite. Cieszę się, że pomogło.
Michael Martinez,
9

Pierwszą rzeczą, którą spróbuję, jest uruchomienie środowiska LiveCD i próba rozpakowania wszystkiego, mając nadzieję, że przywróci to system do rozruchu. Uwaga: martwi mnie potencjalne uszkodzenie danych, jeśli oryginalny proces gzip zostanie przerwany.

W przeciwnym razie spróbuję migrować bazę danych do nowego systemu, jak sugerowali inni, ale jak już zauważyłeś, mogą występować pracochłonne problemy z konfiguracją i zależnościami, które należy rozwiązać indywidualnie.

Bob Barker
źródło
Szybkie pytanie: nie jesteśmy pewni starego serwera bazy danych SQL, a nowszy serwer używa innego Linux Distro. Nowszy serwer działa w CentOS z WHM, a stary serwer to Debian / Unbuntu. Więc moje pytanie brzmi: w jaki sposób mogę skutecznie migrować moje bazy danych SQL bez uszkodzenia i tak dalej?
Dexirian
6

Ogólny konsensus, że należy po prostu zamontować dysk w działającym systemie i uratować pliki, nie jest zły. To rozsądne. Ale z drugiej strony jest więcej zabawy i bardzo edukacyjnych. Wiele się nauczyłem, walcząc z wydostaniem się z chaotycznych sytuacji, w których inni ludzie po prostu poddaliby się i instalowali od nowa. (Nie na serwerze, od którego zależą inne osoby ...)

W każdym razie, jak dotąd masz initramfs (initrd), który działa. To dobry początek. Ale nie może dokończyć przekazania do init, ponieważ init init.gzmoże teraz ? Aby zrobić jakikolwiek postęp, pomógłby dokładnie wiedzieć, jaką masz dystrybucję Linuksa, dzięki czemu możemy sprawdzić, jakie narzędzia są dostępne w jego initramfs do użytku awaryjnego.

Prezentowane komunikaty o błędach wyglądają, jakby mogły pochodzić z initramfs Debiana. Jeśli jest to Debian, powinieneś otrzymać komunikat (initramfs)powłoki w następnym wierszu po ostatnim błędzie. Jeśli tak, powinieneś sprawdzić, co się dzieje z tymi nieudanymi mocowaniami. jest /root/devbrakuje? ( /roottam, gdzie normalne pliki root powinny być zamontowane podczas uruchamiania initramfs)

Jeśli nie otrzymałeś monitu powłoki, to co No init found. Try passing init= bootarg.będzie potem, będzie interesujące. Nawet jeśli był to tylko migający kursor, to wskazówka. Jeśli wydaje się całkowicie zamrożony, spróbuj uzyskać informacje o tym, jakie procesy są w pobliżu, używając magicznego sysrq lub Ctrl + ScrollLock.

Debian initramfs pozwala również zażądać powłoki w kilku specjalnych punktach orientacyjnych, dodając break=parametr do wiersza poleceń jądra. Na przykład, aby uzyskać powłokę przed Running /scripts/init-bottomlinią, użyj break=bottom.

Poza tym: nie wiem, w jaki sposób findkomenda mogła zgzipować każdy plik ... wygląda na to, że wybieram pliki w wieku od 180 do 400 dni.


źródło
Kiedy robię ls pod / root, nic nie znaleziono. Więc mogę znieść, że montaż fs nie jest w porządku przy starcie? Gdzie mogę to zmienić?
Dexirian
1
@Dexirian więc dostaliśmy szybka powłoki (nie trzeba używać break=bottom?) ... tak, do czasu, gdy próbuje zamontować /root/devi /root/proca /root/sys, /rootpowinien być prawdziwy główny system plików. Wcześniej musiał zostać wyświetlony komunikat o błędzie dotyczący niepowodzenia instalacji. Czy podałeś root=parametr w linii poleceń jądra? Moja pamięć jest trochę rozmyta w tym punkcie, ale myślę, że po root (hd0,0)prostu informuje gruba, gdzie znaleźć pliki obsługi, i nadal musisz osobno powiedzieć jądro, gdzie jest root.
Tak, użyłem root =, jądro = initrd = i setup =, nie musiałem używać break = bottom. I nie zauważyłem wcześniejszego komunikatu o nieudanym montażu, ponieważ przewija się on bardzo szybko
Dexirian
@Dexirian Czy dostępne jest przewijanie konsoli? Shift + PgUp. Czy możesz go zamontować od razu (initramfs) , coś w stylu mount -r /dev/sda1 /root? cat /proc/partitionsaby zobaczyć, jakie dyski są dostępne.
1
Witamy w świecie administracji systemem.
Michael Martinez