Właśnie usunąłem „/ bin”. Jaki jest najlepszy sposób na odzyskanie?


10

Właśnie pobiegłem (nie celowo!) rm -rf /bin.

Uruchomiłem komputer i korzystam z Finnix, aby spróbować go odzyskać. Udało mi się zamontować dysk i potwierdziłem, że tak, cały /binfolder został usunięty.

Czy można to naprawić bez ponownej instalacji systemu operacyjnego?

Myślę, że mógłbym skonfigurować maszynę wirtualną z tym samym systemem operacyjnym i architekturą (Ubuntu Server 11.10 alpha release, x86) i zainstalować wszystkie pakiety, które zainstalowałem na serwerze, a następnie po prostu skopiować /binfolder.

Czy to zadziała? Czy lepiej zacząć od nowa?

Odpowiedzi:


15

Ogólnie rzecz biorąc, skłaniam się ku ponownej instalacji (z kopii zapasowych, które absolutnie powinieneś mieć). Ale czuję się hacked, więc oto inny sposób (zakładając, że twój system jest zamontowany pod /target):

  1. Uzyskaj listę wszystkich zainstalowanych pakietów, które zawierają pliki /bin:

    grep ^/bin/ /target/var/lib/dpkg/info/*.list | sed 's%^.*/\([^/\.]*\).list%\1%' >/tmp/pkglist
    

    (W moim systemie Debian Squeeze jest to łącznie 34 pakiety, z których prawie wszystkie są kluczowe)

  2. Pobierz każdy z tych pakietów (nie mogłem niepokoić się tym skryptem, więc po prostu wejdź na packages.ubuntu.com i pobierz je gdzieś pod /target). Jeśli masz szczęście, niektóre pakiety nadal mogą się unosić /target/var/cache/apt/archives.

  3. Dla każdego pakietu uruchom /target/usr/bin/dpkg -x <package> /target. Jestem całkiem pewien, że w dpkgtych czasach wszystko jest samowystarczalne i nie powinien wzywać do niczego /binsamego.

Po przywróceniu systemu do pracy powinieneś się upewnić i uruchomić apt-get --reinstall install <all the packages from step 1>, ponieważ (ponieważ korzystasz z wersji wstępnej, o której Sysadmin Cat twierdzi, że nie ma jej w systemach produkcyjnych) wersje pakietów właśnie wyodrębnione prawdopodobnie będą się różnić od tych, które były wcześniej w systemie i będziesz chciał się upewnić, że system dokładnie wie, co jest.


Dobra odpowiedź, ale czy coś mi umknęło? Czy nie dpkg-query -S /binzrobiłbyś tego samego niż Twoja grep .. | sedzwrotka? Jeśli lista musi zostać wyczyszczona, aby wyświetlić jedną nazwę pakietu w wierszu, to dpkg-query -S /bin | sed 's/\,\ /\n/g'działa (choć w dodatkowym wierszu ma dodatkowo: / bin).
— Janne Pikkarainen,

1
Tak, chciałbym - starałem się zminimalizować ilość rzeczy uruchamianych w systemie docelowym, na wypadek gdyby cokolwiek było potrzebne /bin, i nie chciałem polegać na czymkolwiek specyficznym dla Debiana w systemie ratunkowym, aby zrobić to jako ogólne jak to możliwe dla przyszłych poszukiwaczy.
— womble

Wygląda na to, że jest to lista tylko podstawowych narzędzi systemowych - czy nie ma też innych pakietów zawierających pliki /bin? Czy powinienem ponownie zainstalować każdy pakiet w moim systemie, czy tylko te wygenerowane w wyniku listy? (Również: dziękuję, kocham cię!)
— Tom Marthenal

1
Zazwyczaj tylko niezbędne pakiety zawierają pliki /bin- większość pakietów powinna umieścić wszystkie swoje dane /usr. W moim systemie tylko kilka nieistotnych pakietów (np. zsh) Znajduje się na liście „ma rzeczy w /bin”. Nawiasem mówiąc, głosy poparcia to świetny sposób na okazywanie miłości ...
— womble

1
Postępowałem zgodnie z instrukcjami i działały one doskonale - mój serwer jest ponownie uruchomiony. Wielkie dzięki za pomoc!
— Tom Marthenal,

5

Chociaż Twoja strategia może działać (istnieją duże szanse na to, więcej, jeśli po skopiowaniu katalogu bin wykonasz apt-get ponowną instalację wszystkich pakietów w systemie), może to powodować problemy w przyszłości, ponieważ możesz uzyskać niestabilny serwer.

Gdyby tak się stało, przeinstalowałbym i przywracałbym z codziennej kopii zapasowej. Masz codzienną kopię zapasową - plan odzyskiwania po awarii - prawda?

Jeśli nie masz planu odzyskiwania po awarii, proponuję wykonać kopię zapasową wszystkich plików konfiguracyjnych i danych, które chcesz zachować, a następnie ponownie zainstalować. W ten sposób będziesz mieć pewność, że skończysz ze stabilnym serwerem.


1
zgadując, odkąd opublikował tutaj, jak odzyskać folder / bin, nie ma kopii zapasowej.
— Goez

Niestety nie mam codziennej kopii zapasowej. Skrypt bash, który wtedy pisałem, był, jak na ironię, codziennym skryptem kopii zapasowej. Wygląda na to, że będę ponownie instalować - dziękuję za radę.
— Tom Marthenal,

Nie ma potrzeby ponownej instalacji; zobacz moją odpowiedź.
— womble

Migawki systemu plików są niezwykle przydatne do odzyskiwania z takich rzeczy. Niestety systemy plików ext2 / 3/4 nie implementują ich, a robienie tego za pomocą LVM ma duży wpływ na wydajność. Jeśli przypadkowo usunę / bin na moim polu FreeBSD, po prostu podłączę wcześniejszą migawkę i skopiuję pliki z powrotem do wersji systemu plików na żywo. Podobno OS X również to ma (nazywa się tam „wehikuł czasu”).
— przyciągnąć

3

Spróbuję utworzyć /binmaszynę wirtualną, a następnie skopiować zawartość na uszkodzoną maszynę. To powinno cię uruchomić. Następnie uruchomić

dpkg --get-selections  | awk '{print $1}' | xargs -l1 aptitude reinstall

który powinien ponownie zainstalować wszystkie pakiety, które były w twoim systemie.


1

Najłatwiejszym sposobem, jeśli masz dostęp do komputera, jest zamontowanie systemu plików, wykonanie kopii zapasowej wszystkich danych (tylko dla zachowania ostrożności).

Następnie możesz ponownie zainstalować ubuntu jak normalną instalację; w zasadzie wszystkie twoje dane (katalog domowy, etc i var) powinny nadal tam być.

Istnieje sposób na ponowną instalację wszystkich pakietów, aby / bin został ponownie wypełniony, ale jest to dość skomplikowane.


0

Pliki zniknęły. Chociaż możesz próbować „cofnąć” usunięcie plików - nie poleciłbym tego.

Uwaga: Nie uruchamiam Ubuntu (od dłuższego czasu nie korzystałem z dystrybucji Debiana). Jednak w przeszłości przeprowadzałem odzyskiwanie różnych dystrybucji, wszystkie według podobnego scenariusza.

Twój najlepszy sposób działania:

  • boot z liveCD
  • używając liveCD zamontuj systemową somplace (powiedzmy /mnt/mint)
  • za pomocą zapytania dpkg wszystkie zainstalowane pakiety:
# dpkg --admindir = / mnt / mint / var / lib / dpkg -l
  • zainstaluj wszystkie te pakiety do miejsca docelowego / mnt / mint za pomocą apt-get, używając:
# apt-get -o RootDir = / mnt / mint .... 
  • (wariant 1) Być może będziesz musiał usunąć deboostrap /mnt/mint- nie jestem pewien
  • (wariant 2) Możesz skopiować /binzawartość liveCD na, /mnt/mint/binale nie wiem, czy liveCD dla mennicy używa busyboksa, co może komplikować sprawy - alternatywa nr 1 w tym przypadku wydaje się bezpieczniejsza.

ogólnie powinno to zwrócić twoje pliki poprzez „brute-install” wszystkiego, co masz. Możesz wykonać nieco więcej „sprytnych” sztuczek i zapytać o wszystkie pakiety, które upuściły pliki binarne w / bin

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.