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?

Tom Marthenal
źródło

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.

womble
źródło
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.

hmontoliu
źródło
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.

użytkownik9517
źródło
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.

Joris
źródło
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

Droopy4096
źródło