Come ripristinare un sistema dopo aver rimosso accidentalmente tutti i kernel?

65

Stavo cercando di cancellare i vecchi kernel, ma devo aver cancellato tutti i kernel sul mio laptop Ubuntu 11.04. C'è un modo per risolvere questo problema tramite l'avvio USB o il montaggio del disco rigido su un altro sistema?

    
posta user7242 25.02.2011 - 23:31

5 risposte

87

Avvia da un CD live (o USB live), monta alcuni sistemi, esegui il chroot e installa il kernel. Dopo una corretta installazione del kernel, smonta i filesystem.

  1. Apri terminale
  2. Monta la partizione di Ubuntu: sudo mount /dev/sdXY /mnt
  3. Monta alcune partizioni speciali:

    sudo mount --bind /dev /mnt/dev
    sudo mount --bind /proc /mnt/proc
    sudo mount --bind /sys /mnt/sys
    
  4. (opzionale) Quando si è connessi a una rete, utilizzare i server DNS dal proprio ambiente Live (altrimenti i nomi host potrebbero non essere risolti):

    cp /etc/resolv.conf /mnt/etc/resolv.conf
    
  5. Chroot in /mnt : sudo chroot /mnt
  6. Installa il kernel Linux: apt-get install linux-image-generic (non richiesto sudo dato che sei root dopo un chroot)
  7. Dopo una corretta installazione del kernel, estrai il chroot e smonta alcuni filesystem:

    exit
    sudo umount /mnt/sys
    sudo umount /mnt/proc
    sudo umount /mnt/dev
    sudo umount /mnt
    
  8. Riavvia e rimuovi CD o USB: sudo reboot
risposta data Lekensteyn 25.02.2011 - 23:41
52

Questa procedura espansa rappresenta la maggior parte delle complicazioni che potrebbero verificarsi, inclusi i problemi di connessione a Internet in chroot , non sapendo quale pacchetto del kernel installare (prima di Ubuntu 12.10, non sarà sempre essere linux-image-generic ), non sapendo fin dall'inizio quale partizione o anche quale unità fisica contiene il file system / , e con una partizione /boot separata.

Non ho scritto questo con riferimento a nessuna delle altre procedure qui, anche se noterai alcune somiglianze. L'ho basato basicamente su la procedura qui (sebbene quelle istruzioni siano per qualcosa di completamente diverso, le ho adattate ampiamente e solo alcuni comandi, non la prosa, vengono copiati.

Hai rimosso tutti i pacchetti del kernel e Ubuntu non può essere avviato senza un kernel installato. Quindi la soluzione è quella di avviare da un CD / DVD / USB live, chroot nel sistema installato e installare un kernel in esso.

  1. Avvio da un CD / DVD live di Ubuntu o da un'unità flash USB live.

  2. Seleziona Prova Ubuntu (non Installa Ubuntu ).

  3. Quando viene visualizzato il desktop, assicurati di essere connesso a Internet. Se non lo sei, connettiti a Internet. Un modo per vedere se sei connesso a Internet è aprire un browser web. Puoi anche seguire il resto delle istruzioni portando questa risposta a Ask Ubuntu nel tuo browser web, nel sistema live CD / DVD / USB. Consiglio vivamente di farlo.

  4. Apri una finestra di terminale con Ctrl + Alt + T .

  5. Nella finestra Terminale, esegui questo comando per elencare le tue partizioni:

     sudo parted -l
    

    Vedrai qualcosa di simile (ma non sarà esattamente come questo):

    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. Esamina l'output che hai ottenuto, per determinare il nome del dispositivo della partizione che contiene il / filesystem del Sistema Ubuntu installato sul disco rigido (che stai riparando).

    • Se hai solo una partizione ext4 , quella è quella.

    • Se hai più di una partizione di ext4 , probabilmente è la prima. Tuttavia, se il primo è molto piccolo - meno di un gigabyte - allora quella potrebbe essere una partizione /boot separata (ricordati anche quella).

      Si noti che se boot è elencato sotto Flags ha molto poco a che fare con se una partizione è o meno una partizione /boot separata. Il mio sistema, le cui informazioni sono elencate sopra, non ha una partizione /boot separata.

    • Il nome del dispositivo per la partizione inizia con il nome del dispositivo per l'unità fisica, indicato immediatamente dopo Disk nella seconda riga. Quindi aggiungi il numero della partizione alla fine di quello. Pertanto, il nome del dispositivo per la partizione che contiene il mio / file system è /dev/sda1 . Ecco le due righe in cui ho trovato quell'informazione:

      Disk /dev/sda: 21.5GB
       1      1049kB  20.4GB  20.4GB  primary   ext4            boot
    • Se hai più di una unità fisica, otterrai più di una lista come mostrato sopra. Ma se non hai installato un altro sistema simile a Unix, probabilmente avrai solo un'unità che contiene ext4 partizioni, almeno senza averle create intenzionalmente su un'altra unità. Se disponi di più unità con partizioni ext4 , la partizione ext4 che contiene il tuo file system / è probabilmente su un'unità che anche contiene una partizione linux-swap .

    • È possibile che il filesystem / del tuo sistema Ubuntu si trovi su una partizione di tipo diverso da ext4 . Quando ciò accade, è quasi sempre ext3 , e quasi sempre su un sistema piuttosto vecchio. È molto raro che ciò avvenga, a meno che tu non abbia intenzionalmente impostato le cose in questo modo.

    Ricorda il nome del dispositivo della partizione che conteneva il tuo file system / (o annotalo). Se è diverso da /dev/sda1 , sostituirai /dev/sda1 con i seguenti passaggi.

    (Se sembra che tu abbia una partizione /boot separata, ricorda anche il nome del dispositivo.)

  7. Monta il file system / in /mnt e monta il suo filesystem /dev :

    sudo mount /dev/sda1 /mnt
    sudo mount --bind /dev /mnt/dev
  8. Controlla se il sistema Ubuntu danneggiato che stai riparando ha una partizione /boot separata che deve essere montata separatamente. (Se sei sicuro non lo fa, puoi saltarlo.)

    Per verificare, esegui:

    ls /mnt/boot
    

    Se c'è un output (come grub memtest86+.bin memtest86+_multiboot.bin , ma non necessariamente esattamente questo), il /boot del sistema danneggiato si trova sulla stessa partizione del suo / e non devi montare nulla per accedervi.

    Ma se non c'è output, dovrai montare il filesystem /boot :

    sudo mount BOOT-PARTITION /mnt/boot

    Sostituisci BOOT-PARTITION con il nome del dispositivo della partizione /boot (vedere il passaggio 6 sopra).

  9. chroot nel sistema danneggiato, montare il resto virtuale importante filesystem e imposta alcune importanti variabili d'ambiente:

    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. Determina se l'accesso a Internet funziona all'interno di chroot da ping

    ping -c 5 www.google.com
    

    Dovresti vedere qualcosa di simile a questo:

    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
    
    • Se sembra più che altro, e il numero precedente a % packet loss è inferiore a 100, la connessione Internet in chroot funziona:

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

      Funziona, quindi puoi saltare il passaggio 11 .

    • Se sembra più che altro, e il numero precedente a % packet loss è 100, la connessione richiede una risoluzione dei problemi. Assicurati che la connessione sul sistema di CD live (ad esempio, tramite un browser Web o eseguendo lo stesso comando in una scheda / finestra separata, non in chroot Terminal) funzioni. Assicurati di digitare correttamente il comando. Usa www.google.com se non sei stato.

    • Se l'output non assomiglia a quanto sopra, ma invece dice ping: unknown host www.google.com , la rete non funziona ancora in chroot .

  11. Imposta la rete in chroot . Salta questo passaggio a meno che non si sia verificato un errore unknown host nel passaggio 10 precedente.

    Per configurare la rete, eseguire il backup del file hosts del sistema danneggiato e copiare i file hosts e resolv.conf del sistema CD live. (Non è necessario eseguire il backup della versione del sistema rotta di resolv.conf , poiché tale file viene rigenerato automaticamente al volo.)

    Apri una nuova scheda Terminale ( Ctrl + Maiusc + T ) o, se preferisci, un nuova finestra di Terminale ( Ctrl + Maiusc + N , o solo Ctrl + < kbd> Alt + T ). Esegui questi comandi al suo interno:

    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
    

    (Il comando exit alla fine chiude la nuova scheda / finestra.)

    Ripeti il ​​passaggio 10 per assicurarti che l'accesso a Internet funzioni ora da chroot . Dovrebbe.

  12. Scopri quale pacchetto del kernel dovrebbe essere installato. Di solito, questo sarà linux-image-generic . Ma non sempre.

    Se non sei sicuro di quale installare, dipenderà in parte dalla versione di Ubuntu che hai installato e in parte da altre informazioni. Se non sei sicuro di quale versione di Ubuntu hai installato, scopri eseguendo questo comando (in chroot , non in una finestra / scheda Terminale separata):

    lsb_release -r
    
    • Su Ubuntu 12.10 (la prossima versione di Ubuntu, attualmente in sviluppo), sempre sarà linux-image-generic . (Vedi questo , questo e questo .)

    • Su Ubuntu 12.04 LTS, le probabili possibilità sono linux-image-generic e linux-image-generic-pae . (A differenza delle versioni precedenti, 12.04 non ha più kernel server e desktop separati.)

      • Se il sistema Ubuntu installato (che stai riparando) è la versione a 64 bit, usa linux-image-generic . ( linux-image-generic-pae si applica solo ai sistemi a 32 bit.)

        È possibile avere un sistema Ubuntu a 32 bit installato su un computer a 32 o 64 bit. Inoltre, potresti utilizzare un live CD a 32 o 64 bit per correggere un sistema installato a 32 bit. Quindi, se non sai se il sistema Ubuntu installato è a 32 o 64 bit, controlla eseguendo questo comando (in chroot , non in un finestra / scheda Terminale separata):

        dpkg-architecture -qDEB_HOST_ARCH_BITS
        

        L'output sarà o 32 o 64 .

        (Tieni presente che uname -m è non un modo corretto per trovare queste informazioni, perché anche quando viene eseguito in chroot , ciò ti dirà l'architettura di kernel in esecuzione , che è il kernel del sistema live CD e non il kernel del sistema installato (rotto).

      • Se il sistema Ubuntu installato (che stai riparando) è la versione a 32 bit, il miglior kernel da usare dipenderà dalla quantità di RAM che hai. Raccomando:

        • linux-image-generic se hai meno di 3 GB di RAM
        • linux-image-generic-pae se hai 3 GB di RAM o più.

        (Questo è il modo in cui l'installatore di Ubuntu sceglie quale configurare da quando l'installer ha acquisito la capacità di installare i kernel PAE. Vedi la risoluzione a questo bug . Se vuoi impara cos'è il PAE, vedi questo articolo di Wikipedia .Se vuoi conoscere PAE in Ubuntu, vedi questa pagina wiki di Ubuntu .)

        Se non sai quanta RAM hai, esegui questo comando per scoprire:

        grep MemTotal /proc/meminfo
        

        Questo è elencato in kilobyte . Per convertire in gigabyte , dividi per 1.048.576 (1024 2 ).

        • 3 concerti = 3.145.728 kB
    • Su Ubuntu rilascia prima 12.04, le probabili possibilità sono linux-image-generic , linux-image-generic-pae e linux-image-server .

      • Se stai utilizzando un sistema Ubuntu Server, usa linux-image-server .
      • Altrimenti, segui i consigli sopra riportati per i sistemi 12.04.
  13. Questo è il momento che stavi aspettando! Installa un kernel nel sistema danneggiato.

    (Come prima, eccetto dove diversamente indicato esplicitamente, questi comandi vengono eseguiti in chroot , non in una finestra / scheda Terminale separata.)

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

    Sostituisci linux-image-generic con qualsiasi altro pacchetto del kernel che hai deciso di installare nel passaggio 12, se diverso.

  14. Se dovessi eseguire il passaggio 11 per configurare il networking in chroot , ripristina il vecchio file hosts . Se hai saltato il passaggio 11, salta questo passaggio.

    Per ripristinarlo, esegui questo comando:

    cp /etc/hosts.old /etc/hosts
    
  15. Smonta filesystem, exit out di chroot :

    umount /proc || umount -lf /proc
    umount /sys /dev/pts
    exit
    sudo umount /mnt/dev /mnt
    
  16. Spegni il sistema live CD / DVD / USB, rimuovendo il CD / DVD live o l'unità flash USB. Avviare nel sistema installato sul disco rigido, che hai appena riparato. Hai installato un pacchetto del kernel (e come parte dell'installazione, il kernel fornito verrà aggiunto al menu di avvio di GRUB2). Se tutto funziona correttamente, il sistema dovrebbe avviarsi senza problemi. (Penso che sia possibile che ci vorrà un po 'più tempo del solito, questa volta.)

NOTA BENE: Non ho provato la procedura sopra su ogni possibile sistema Ubuntu, quindi è possibile che ci sia un errore che non ho identificato.

In futuro, consiglio sempre di mantenere installati due kernel. È bene averne due nel caso in cui uno di essi smetta di funzionare per qualsiasi motivo (è possibile selezionare l'altro nel menu di avvio di GRUB2). Inoltre, se intendi conservare due kernel e ne disinstalli accidentalmente uno in più di quanto avevi intenzione di riavviare, ne rimane ancora uno da cui avviare.

    
risposta data Eliah Kagan 20.07.2012 - 17:58
0

Volevo solo aggiungere la mia esperienza che ho passato oggi con l'aggiornamento a Willy. Ho pulito un po 'e mi sono ritrovato con solo memtest. google mi ha portato a capire che avevo rimosso i kernel. Un vincolo che ho avuto è una rete lenta e quindi il download di ISO completo non era un'opzione. Così ho usato Ubuntu Minimal CD (solo 40MB) e avviato su di esso. Dopo aver rilevato l'opzione hardware (che mi ha aiutato a connettermi al wireless) sono entrato nell'opzione di shell. Ho seguito le istruzioni di @Lekensteyn e ci sono riuscito. poche cose però: devi copiare resolv.conf prima di andare in chroot altrimenti il ​​tuo DNS sarà svitato e dato che l'utente che ha effettuato l'accesso non ha bisogno di sudo ovunque.

So che è vecchio, ma ho pensato che l'aggiunta di questa risposta aggiungesse valore a chi avrebbe incontrato il problema.

    
risposta data Stefano Mtangoo 14.04.2016 - 22:28
0

Quando ho rimosso il mio kernel ho trovato questa soluzione su Ubuntu Forums. Ho seguito ogni passaggio e il sistema è stato ripristinato. Spero ti possa aiutare.

Un chroot potrebbe funzionare, chroot significa che quando si avvia un sistema si modifica il file system di root. Ad esempio, hai iniziato da un CD live ma hai cambiato la radice "/" in cui è installato il tuo ubuntu.

Diciamo che la tua ubuntu è installata su / dev / sda2, quindi puoi provare i seguenti comandi:

Codice:

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

ora sei root "/" è su / dev / sda2, prova ad installare il kernel

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

Ho dovuto fare un po 'di congetture qui dato che non ho mai dovuto farlo prima, ma dovrebbe esserlo. Non so se ricevi un avviso di errore fstab (come se non trovassi la root).

Ora è necessario pulire alcune cose e smontare le partizioni montate: Codice:

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

E puoi riavviare per vedere se ha funzionato.

URL per il thread: link

    
risposta data Melvin 26.02.2011 - 13:23
0

Dopo aver rimosso i vecchi kernel da Trusty14.04 ieri (FTR: ho non rimosso i due più recenti!) il mio sistema non si avviava più. GRUB ha mostrato

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

Non ho idea del perché.

Ho seguito quindi le eccellenti istruzioni di Eliah Kagan per installare linux-image-generic da un CD live. Ha installato 150 MB di nuovo kernel, ma purtroppo non ha risolto il problema.

Fortunatamente ho trovato questa pagina . Lo strumento Boot-Repair ha funzionato correttamente, il mio sistema è di nuovo in esecuzione.

    
risposta data leftaroundabout 16.07.2015 - 13:00

Leggi altre domande sui tag