Jak przywrócić system po przypadkowym usunięciu wszystkich jąder?

Odpowiedzi:

93

Uruchom na żywo CD (lub na żywo USB), zamontuj niektóre systemy, chroot na nim i zainstaluj jądro. Po pomyślnej instalacji jądra odmontuj systemy plików.

  1. Otwórz terminal
  2. Zamontuj partycję Ubuntu: sudo mount /dev/sdXY /mnt
  3. Zamontuj specjalne partycje:

    sudo mount --bind /dev /mnt/dev
    sudo mount --bind /proc /mnt/proc
    sudo mount --bind /sys /mnt/sys
    
  4. (opcjonalnie) Gdy jesteś podłączony do sieci, użyj serwerów DNS ze swojego środowiska Live (w przeciwnym razie nazwy hosta nie będzie można rozwiązać):

    cp /etc/resolv.conf /mnt/etc/resolv.conf
    
  5. Chroot do /mnt:sudo chroot /mnt
  6. Zainstaluj jądro Linuksa: apt-get install linux-image-generic(nie wymaga sudo, ponieważ jesteś rootem po chroocie)
  7. Po udanej instalacji jądra wyjdź z chroota i odmontuj niektóre systemy plików:

    exit
    sudo umount /mnt/sys
    sudo umount /mnt/proc
    sudo umount /mnt/dev
    sudo umount /mnt
    
  8. Uruchom ponownie i wyjmij dysk CD lub USB: sudo reboot
Lekensteyn
źródło
Tak bym zasugerował. Nie rozumiem, dlaczego to nie zadziała.
Oli
Ok, dzięki za potwierdzenie. Dodałem również kroki końcowe, odmontowywanie /mnt. Ubuntu zwykle zajmuje się odmontowywaniem / synchronizowaniem systemów plików, ale dla mnie wygląda to na czystsze.
Lekensteyn
1
@MaheshKatta Najpierw musisz zainstalować RAID. Więc zamiast kroku drugiego (gdzie montujesz pojedynczy dysk) będziesz mapować /dev/mdxxxdysk - zakładając, że to mdadm.
Oli
4
@James Edytuj /etc/resolv.conf(usuń go, jeśli jest to dowiązanie symboliczne) i umieść nameserver 8.8.8.8w nim coś podobnego (publiczny serwer DNS Google). Wymień go, jeśli to konieczne.
Lekensteyn
3
Nvm. Wygląda na to, że musiałem edytować plik w chroot. Może powinieneś dodać do odpowiedzi cp /etc/resolv.conf /mnt/etc/resolv.confprzed pójściem do chroot. To i tak zadziałało
Peter Raeves,
56

Ta rozszerzona procedura uwzględnia większość komplikacji, które mogą wystąpić, w tym problemy z połączeniem z Internetem w chroot, nie wiedząc, który pakiet jądra zainstalować (przed Ubuntu 12.10, nie zawsze tak będzie linux-image-generic), nie wiedząc od razu, która partycja, a nawet który dysk fizyczny zawiera /system plików i ma osobną /bootpartycję.

Nie napisałem tego w odniesieniu do żadnej z innych procedur tutaj, chociaż zauważysz pewne podobieństwa. Oparłem ją luźno na tej procedurze (chociaż te instrukcje dotyczą czegoś zupełnie innego, obszernie je dostosowałem i tylko niektóre polecenia, nie proza, są kopiowane).

Usunąłeś wszystkie pakiety jądra, a Ubuntu nie może uruchomić się bez zainstalowanego jądra. Rozwiązaniem jest więc uruchomienie z płyty CD / DVD / USB chrootna żywo do zainstalowanego systemu i zainstalowanie w nim jądra.

  1. Uruchom komputer z dysku CD / DVD na żywo Ubuntu lub dysku flash USB na żywo.

  2. Wybierz Wypróbuj Ubuntu (nie instaluj Ubuntu ).

  3. Gdy pojawi się pulpit, upewnij się, że masz połączenie z Internetem. Jeśli nie, połącz się z Internetem. Jednym ze sposobów sprawdzenia, czy masz połączenie z Internetem, jest otwarcie przeglądarki internetowej. Możesz nawet postępować zgodnie z pozostałymi instrukcjami, podnosząc odpowiedź Ask Ubuntu w przeglądarce internetowej, w systemie CD / DVD / USB na żywo. Zdecydowanie polecam to zrobić.

  4. Otwórz okno terminala za pomocą Ctrl+ Alt+ T.

  5. W oknie terminala uruchom to polecenie, aby wyświetlić listę swoich partycji:

     sudo parted -l
    

    Zobaczysz coś takiego (ale nie będzie dokładnie tak):

    Model: VMware, VMware Virtual S (scsi)
    Disk /dev/sda: 21.5GB
    Sector size (logical/physical): 512B/512B
    Partition Table: msdos
    
    Number  Start   End     Size    Type      File system     Flags
     1      1049kB  20.4GB  20.4GB  primary   ext4            boot
     2      20.4GB  21.5GB  1072MB  extended
     5      20.4GB  21.5GB  1072MB  logical   linux-swap(v1)
    
    
    Warning: Unable to open /dev/sr0 read-write (Read-only file system).  /dev/sr0
    has been opened read-only.
    Error: Can't have a partition outside the disk!
    
  6. Sprawdź uzyskane dane wyjściowe, aby określić nazwę urządzenia partycji zawierającej /system plików systemu Ubuntu zainstalowanego na dysku twardym (który naprawiasz).

    • Jeśli masz tylko jedną ext4partycję, to ta.

    • Jeśli masz więcej niż jedną ext4partycję, prawdopodobnie jest to pierwsza. Jeśli jednak pierwszy jest bardzo mały - mniej niż gigabajt - może to być osobna /bootpartycja (pamiętaj też o tym).

      Należy pamiętać, że to, czy bootwymieniono na liście, Flagsma bardzo niewiele wspólnego z tym, czy partycja jest oddzielną /bootpartycją. Mój system, którego informacje wymieniono powyżej, nie ma osobnej /bootpartycji.

    • Nazwa urządzenia dla partycji zaczyna się od nazwy urządzenia dla dysku fizycznego, podanej bezpośrednio Diskw drugim wierszu. Następnie wystarczy dodać numer partycji na końcu tego. Tak więc nazwa urządzenia dla partycji zawierającej mój / system plików to /dev/sda1. Oto dwie linie, w których znalazłem te informacje:

      Disk /dev/sda: 21.5GB
       1      1049kB  20.4GB  20.4GB  primary   ext4            boot
    • Jeśli masz więcej niż jeden dysk fizyczny, otrzymasz więcej niż jedną listę, jak pokazano powyżej. Ale chyba, że ​​masz zainstalowany inny system uniksowy, prawdopodobnie będziesz mieć tylko jeden dysk zawierający ext4partycje, przynajmniej bez celowego tworzenia ich na innym dysku. Jeśli masz wiele dysków z ext4partycjami, ext4partycja zawierająca /system plików prawdopodobnie znajduje się na dysku, który również zawiera linux-swappartycję.

    • Jest możliwe , że system Ubuntu /system plików jest na partycji innej niż typu ext4. Kiedy tak się dzieje, prawie zawsze ext3i prawie zawsze na dość starym systemie. Jest to bardzo rzadkie, chyba że samemu celowo skonfigurujesz takie rozwiązanie.

    Zapamiętaj nazwę urządzenia partycji, która zawierała twój /system plików (lub zapisz go). Jeśli jest inny niż /dev/sda1, zastąpisz /dev/sda1go w poniższych krokach.

    (Jeśli wyglądało na to, że masz oddzielną /bootpartycję, pamiętaj też nazwę tego urządzenia).

  7. Zamontuj /system plików /mnti podłącz jego /devsystem plików:

    sudo mount /dev/sda1 /mnt
    sudo mount --bind /dev /mnt/dev
  8. Sprawdź, czy uszkodzony system Ubuntu, który naprawiasz, ma osobną /bootpartycję, którą należy zamontować osobno. (Jeśli jesteś pewien, że tak nie jest, możesz to pominąć).

    Aby to sprawdzić, uruchom:

    ls /mnt/boot
    

    Jeśli jest wyjście (jak grub memtest86+.bin memtest86+_multiboot.bin, ale niekoniecznie dokładnie to), wtedy uszkodzony system znajduje /bootsię na tej samej partycji co jego /i nie musisz montować niczego, aby uzyskać do niego dostęp.

    Ale jeśli nie ma danych wyjściowych, będziesz musiał zamontować /bootsystem plików:

    sudo mount BOOT-PARTITION /mnt/boot

    Zastąp BOOT-PARTITIONnazwą urządzenia /bootpartycji (patrz krok 6 powyżej).

  9. chroot do uszkodzonego systemu, podłącz pozostałe ważne wirtualne systemy plików i ustaw niektóre ważne zmienne środowiskowe:

    sudo chroot /mnt
    mount -t proc none /proc
    mount -t sysfs none /sys
    mount -t devpts none /dev/pts
    export HOME=/root
    export LC_ALL=C
    
  10. Sprawdź, czy dostęp do Internetu działa od wewnątrz, chrootpoprzez uruchomienie pingpewnego niezawodnego hosta, o którym wiadomo, że normalnie reaguje na polecenia ping:

    ping -c 5 www.google.com
    

    Powinieneś zobaczyć coś takiego:

    PING www.l.google.com (74.125.131.147) 56(84) bytes of data.
    64 bytes from vc-in-f147.1e100.net (74.125.131.147): icmp_req=1 ttl=44 time=61.3 ms
    64 bytes from vc-in-f147.1e100.net (74.125.131.147): icmp_req=2 ttl=44 time=62.3 ms
    64 bytes from vc-in-f147.1e100.net (74.125.131.147): icmp_req=3 ttl=44 time=61.8 ms
    64 bytes from vc-in-f147.1e100.net (74.125.131.147): icmp_req=4 ttl=44 time=63.8 ms
    64 bytes from vc-in-f147.1e100.net (74.125.131.147): icmp_req=5 ttl=44 time=66.6 ms
    
    --- www.l.google.com ping statistics ---
    5 packets transmitted, 5 received, 0% packet loss, time 4006ms
    rtt min/avg/max/mdev = 61.367/63.212/66.608/1.897 ms
    
    • Jeśli wygląda to głównie tak, a liczba poprzednia % packet lossjest mniejsza niż 100, oznacza to, że połączenie internetowe w chroot:

      5 packets transmitted, 5 received, 0% packet loss, time 4006ms

      Działa, więc możesz pominąć krok 11 .

    • Jeśli wygląda tak głównie, a poprzednia liczba % packet lossto 100, połączenie wymaga rozwiązania problemu . Upewnij się, że połączenie w systemie Live CD (na przykład przez przeglądarkę internetową lub uruchamiając to samo polecenie w osobnej, nie chrootedytowanej zakładce / oknie terminala) działa. Upewnij się, że wpisujesz polecenie poprawnie. Użyj, www.google.comjeśli nie byłeś.

    • Jeśli dane wyjściowe wcale nie wyglądają tak, jak powyższe, ale zamiast tego mówi ping: unknown host www.google.com, to sieć nie działa jeszcze w chroot.

  11. Skonfiguruj sieć w chroot. Pomiń ten krok, chyba że wystąpił unknown hostbłąd w kroku 10 powyżej.

    Aby skonfigurować sieć, wykonaj kopię zapasową hostspliku uszkodzonego systemu , a następnie skopiuj na żywo system CD hostsi resolv.confpliki. (Nie trzeba tworzyć kopii zapasowej wersji uszkodzonego systemu resolv.conf, ponieważ plik ten jest automatycznie regenerowany w locie).

    Otwórz nową kartę Terminal ( Ctrl+ Shift+ T) lub, jeśli wolisz, nowe okno Terminal ( Ctrl+ Shift+ Nlub po prostu Ctrl+ Alt+ T). Uruchom w nim następujące polecenia:

    sudo cp /mnt/etc/hosts /mnt/etc/hosts.old
    sudo cp /etc/hosts /mnt/etc/hosts
    sudo cp /etc/resolv.conf /mnt/etc/resolv.conf
    exit
    

    ( exitPolecenie na końcu zamyka nową kartę / okno.)

    Powtórz krok 10 powyżej, aby upewnić się, że dostęp do Internetu działa teraz z poziomu chroot. Powinno.

  12. Zastanów się, który pakiet jądra powinien zostać zainstalowany. Zwykle tak będzie linux-image-generic. Ale nie zawsze.

    Jeśli nie masz pewności, którą zainstalować, będzie to zależeć częściowo od tego, którą wersję Ubuntu zainstalowałeś, a częściowo od innych informacji. Jeśli nie masz pewności, którą wersję Ubuntu zainstalowałeś, dowiedz się, uruchamiając to polecenie (w chroot, a nie w osobnym oknie / zakładce Terminal):

    lsb_release -r
    
    • Na Ubuntu 12.10 (kolejna wersja Ubuntu, obecnie w fazie rozwoju), zawsze tak będzie linux-image-generic. (Zobacz to , to i to .)

    • W systemie Ubuntu 12.04 LTS prawdopodobne są linux-image-generici linux-image-generic-pae. (W przeciwieństwie do poprzednich wersji 12.04 nie ma już oddzielnego jądra serwera i pulpitu).

      • Jeśli zainstalowany system Ubuntu (który naprawiasz) to wersja 64-bitowa, użyj linux-image-generic. ( linux-image-generic-paedotyczy tylko systemów 32-bitowych).

        Możliwe jest zainstalowanie 32-bitowego systemu Ubuntu na komputerze 32-bitowym lub 64-bitowym. Ponadto możesz użyć 32-bitowego lub 64-bitowego dysku CD na żywo do naprawy zainstalowanego 32-bitowego systemu. Jeśli więc nie wiesz, czy zainstalowany system Ubuntu jest 32-bitowy, czy 64-bitowy, sprawdź, uruchamiając to polecenie (w chroot, nie w osobnym oknie / zakładce Terminal):

        dpkg-architecture -qDEB_HOST_ARCH_BITS
        

        Wyjście będzie albo 32albo 64.

        (Należy pamiętać, że nieuname -m jest to poprawny sposób na znalezienie tych informacji, ponieważ nawet gdy zostanie uruchomiony w , poinformuje Cię o architekturze działającego jądra , które jest jądrem systemu Live CD, a nie jądrem zainstalowanego (uszkodzonego) systemu).chroot

      • Jeśli zainstalowany system Ubuntu (który naprawiasz) jest wersją 32-bitową, najlepsze jądro do użycia będzie zależeć od ilości pamięci RAM. Polecam:

        • linux-image-generic jeśli masz mniej niż 3 GB pamięci RAM
        • linux-image-generic-pae jeśli masz 3 GB pamięci RAM lub więcej.

        (W ten sposób instalator Ubuntu wybiera, który z nich utworzone, odkąd instalator zyskał możliwość instalowania jądra PAE. Zobacz rozdzielczość do tego błędu . Jeśli chcesz dowiedzieć się, co PAE jest zobaczyć ten artykuł w Wikipedii . Jeśli chcesz dowiedz się więcej o PAE w Ubuntu, zobacz stronę wiki Ubuntu .)

        Jeśli nie wiesz, ile masz pamięci RAM, uruchom to polecenie, aby dowiedzieć się:

        grep MemTotal /proc/meminfo
        

        To jest wymienione w kilobajtach . Aby przekonwertować na gigabajty , podziel przez 1 048 576 (1024 2 ).

        • 3 koncerty = 3 145 728 kB
    • Na Ubuntu zwalnia przed 12,04, możliwości są prawdopodobne linux-image-generic, linux-image-generic-paei linux-image-server.

      • Jeśli korzystasz z systemu Ubuntu Server, użyj linux-image-server.
      • W przeciwnym razie postępuj zgodnie z powyższymi wskazówkami dla systemów 12.04.
  13. To moment, na który czekałeś! Zainstaluj jądro w uszkodzonym systemie.

    (Tak jak poprzednio, chyba że wyraźnie zaznaczono inaczej, te polecenia są uruchamiane w chrootosobnym oknie / zakładce Terminala).

    apt-get update
    apt-get -y install linux-image-generic

    Zamień na linux-image-genericinny pakiet jądra, który zdecydowałeś się zainstalować w kroku 12 powyżej, jeśli jest inny.

  14. Jeśli musiałeś wykonać krok 11, aby skonfigurować sieć w chroot, przywróć stary hostsplik. Jeśli pominąłeś krok 11, pomiń również ten krok.

    Aby go przywrócić, uruchom następujące polecenie:

    cp /etc/hosts.old /etc/hosts
    
  15. Odmontuj systemy plików, exitwychodząc z chroot:

    umount /proc || umount -lf /proc
    umount /sys /dev/pts
    exit
    sudo umount /mnt/dev /mnt
    
  16. Zamknij system Live CD / DVD / USB, wyjmując Live CD / DVD lub dysk flash USB. Uruchom system zainstalowany na dysku twardym, który właśnie naprawiłeś. Zainstalowałeś w nim pakiet jądra (i jako część instalacji, dostarczone przez niego jądro zostanie dodane z powrotem do menu uruchamiania GRUB2). Jeśli wszystko działało poprawnie, system powinien uruchomić się bez problemów. (Myślę, że tym razem możliwe jest, że uruchomienie zajmie trochę więcej czasu niż zwykle).

OŚWIADCZENIE: Nie testowałem powyższej procedury na każdym możliwym systemie Ubuntu, więc możliwe jest, że istnieje błąd, którego nie zidentyfikowałem.

W przyszłości polecam zawsze starać się, aby dwa jądra były zainstalowane. Dobrze jest mieć dwa, na wypadek, gdyby jeden z nich przestał działać z jakiegokolwiek powodu (możesz wybrać drugi w menu uruchamiania GRUB2). Dodatkowo, jeśli zamierzasz zachować dwa jądra i przypadkowo odinstalujesz jedno z nich więcej niż chciałeś i zrestartujesz komputer, nadal masz jedno z którego chcesz uruchomić system.

Eliah Kagan
źródło
1
To może być najlepsze pisemne wyjaśnienie, jak zrobić coś złożonego w Linuksie, jakie kiedykolwiek czytałem. Dzięki
ZincX,
Wow, to jest bardzo pomocne! Wielkie dzięki!
Rafał Cieślak
2
Dziękuję bardzo Eliaszowi - po głupim usunięciu wszystkich moich obrazów linuksowych uratowałeś mi bekon. Jedyny czkawka, którą miałem, to krok: sudo cp /etc/resolv.conf /mnt/etc/resolv.conf Dostałem błąd „cp: nie pisanie przez wiszące dowiązanie symboliczne` /mnt/etc/resolv.conf ”. Znalazłem ten wątek i wykonałem instrukcje według jednego plakatu: „rm /mnt/etc/resolv.conf” przed „cp /etc/resolv.conf /mnt/etc/resolv.conf”, aby rozwiązać problem z wiszącym dowiązaniem symbolicznym.
@ xcal400 /etc/resolv.confjest obecnie zarządzany przez resolvconf, będzie automatycznie generowany podczas korzystania z NetworkManagera i można go bezpiecznie usunąć przy użyciu, rm /etc/resolv.confjak się dowiedziałeś.
Lekensteyn
3
To powinna być zaakceptowana odpowiedź. Dzięki!
Jean-Michel Garcia
0

Kiedy usunąłem swoje jądro, znalazłem to rozwiązanie na forach Ubuntu. Śledziłem każdy krok i system został odzyskany. Mam nadzieję, że to ci pomoże.

Chroot może działać, chroot oznacza, że ​​po uruchomieniu systemu zmieniasz główny system plików. Na przykład zacząłeś od live CD, ale zmieniasz katalog główny „/” na miejsce, w którym jest zainstalowane twoje Ubuntu.

Powiedzmy, że twój ubuntu jest zainstalowany na / dev / sda2, a następnie możesz wypróbować następujące polecenia:

Kod:

sudo mount /dev/sda2 /mnt
sudo cp /etc/resolv.conf /mnt/etc/
sudo cp /etc/hosts /mnt/etc/
sudo mount --bind /dev/ /mnt/dev
sudo chroot /mnt
mount -t proc none /proc
mount -t sysfs none /sys
mount -t devpts none /dev/pts
export HOME=/root
export LC_ALL=C
dbus-uuidgen > /var/lib/dbus/machine-id
dpkg-divert --local --rename --add /sbin/initctl
ln -s /bin/true /sbin/initctl

teraz jesteś rootem "/" jest na / dev / sda2, spróbuj zainstalować jądro

apt-get update
apt-get install linux-image-2.6.32-26-generic
update-initramfs -cv -k all
update-grub

Musiałem tu trochę zgadnąć, ponieważ nigdy wcześniej nie musiałem tego robić, ale o tym powinno być. Nie wiem, czy pojawi się ostrzeżenie o błędzie fstab (np. Nie można znaleźć roota).

Teraz musisz wyczyścić niektóre rzeczy i odmontować zamontowane partycje: Kod:

rm /etc/resolv.conf
rm /etc/hosts
rm /var/lib/dbus/machine-id
rm /sbin/initctl
dpkg-divert --rename --remove /sbin/initctl
umount /proc # if this doesn't work try umount -lf /proc
umount /sys
umount /dev/pts
exit
sudo umount /mnt

Możesz zrestartować komputer, aby sprawdzić, czy zadziałał.

Adres URL wątku: http://art.ubuntuforums.org/showthread.php?t=1688928

Melvin
źródło
Dlaczego miałbyś wymieniać /etc/hostsi usuwać /sbin/initctl? Jest tam z jakiegoś powodu.
Lekensteyn,
Wydaje się, że ostatecznie opiera się na LiveCDCustomization ; niektóre kroki nie są konieczne do naprawy już zainstalowanego systemu. W szczególności nie musisz nic robić z /sbin/initctllub dbus-uuidgenlub dpkg-divert. Być może trzeba będzie wymienić, /etc/hostsaby połączyć się z Internetem, ale nie zwykle, a jeśli tak, należy odłożyć oryginał. W zainstalowanym systemie (zamiast na żywo CD, który uruchamia się, a następnie rozpakowuje system plików squashfs), nie musisz uruchamiać update-initramfsani nawet update-grubpo instalacji jądra.
Eliah Kagan
Ponadto, ponieważ ta procedura nie instaluje żadnego metapakietu jądra, jądro może nie zostać później poprawnie zaktualizowane, chyba że zostanie zainstalowany metapakiet. Co więcej, linux-image-2.6.32-26-genericnie będzie właściwym jądrem dla większości ludzi do zainstalowania.
Eliah Kagan
0

Po usunąłem stare jądra z Trusty14.04 Wczoraj (FTR: ja nie nie usunąć dwa ostatnie z nich!) Mój system nie będzie już uruchomić. GRUB pokazał

Error: File not found
Error: You need to load the kernel first

Nie mam pojęcia dlaczego.

Następnie wykonałem doskonałe instrukcje Eliaha Kagana, aby zainstalować linux-image-genericz płyty CD na żywo. Zainstalował 150 MB nowego jądra, ale niestety to nie rozwiązało problemu.

Na szczęście znalazłem tę stronę . Boot-RepairNarzędzie dostał to dobrze, mój system jest uruchomiony ponownie.

po lewej stronie
źródło
0

Chciałem tylko dodać moje doświadczenie, które przeszedłem dzisiaj podczas aktualizacji do Willy. Trochę posprzątałem i znalazłem się tylko z memtestem. Google sprawiło, że zrozumiałem, że usunąłem jądra. Jednym z ograniczeń było wolne połączenie sieciowe, więc pobieranie pełnego ISO nie było opcją. Użyłem więc Ubuntu Minimal CD (tylko 40 MB) i uruchomiłem na nim. Po wykryciu opcji sprzętowej (która pomogła mi połączyć się z siecią bezprzewodową) przeszedłem do opcji powłoki. Postępowałem zgodnie z instrukcjami @Lekensteyn i udało mi się. kilka rzeczy: musisz skopiować resolv.confprzed przejściem do chroot, w przeciwnym razie twój DNS zostanie wkręcony, a ponieważ zalogowany użytkownik nie ma roota w sudo.

Wiem, że jest stary, ale pomyślałem, że dodanie tej odpowiedzi doda wartość tym, którzy napotkają problem.

Stefano Mtangoo
źródło