Stavo cercando di eliminare 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?
Stavo cercando di eliminare 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?
Risposte:
Avvia un CD live (o live USB), monta alcuni sistemi, chroot al suo interno e installa il kernel. Dopo una corretta installazione del kernel, smontare i filesystem.
sudo mount /dev/sdXY /mnt
Montare alcune partizioni speciali:
sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
(facoltativo) 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
/mnt
:sudo chroot /mnt
apt-get install linux-image-generic
(non è richiesto sudo poiché sei root dopo un chroot)Dopo una corretta installazione del kernel, esci dal chroot e smonta alcuni filesystem:
exit
sudo umount /mnt/sys
sudo umount /mnt/proc
sudo umount /mnt/dev
sudo umount /mnt
sudo reboot
/mnt
. Ubuntu di solito si occupa di smontare / sincronizzare i filesystem, ma questo mi sembra più pulito.
/dev/mdxxx
un'unità, supponendo che sia mdadm.
/etc/resolv.conf
(rimuovilo se si tratta di un collegamento simbolico) e inserisci qualcosa di simile nameserver 8.8.8.8
(server DNS pubblico di Google). Sostituirlo se necessario.
cp /etc/resolv.conf /mnt/etc/resolv.conf
prima di entrare in chroot. Comunque ha funzionato per me
Questo procedimento ampliato rappresenta la maggior parte delle complicazioni che potrebbero verificarsi, tra cui problemi di connessione a Internet in chroot
, non sapendo quale pacchetto del kernel da installare (prima di Ubuntu 12.10, non sarà sempre essere linux-image-generic
), non sapendo in via preliminare quale partizione o addirittura quale unità fisica contiene il /
filesystem e con una /boot
partizione separata .
Non ho scritto questo con riferimento a nessuna delle altre procedure qui, anche se noterete alcune somiglianze. L'ho basato vagamente sulla procedura qui (anche se quelle istruzioni sono 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 è avviare da un live CD / DVD / USB, chroot
nel sistema installato e installarvi un kernel.
Avvio da un CD / DVD live di Ubuntu o da un'unità flash USB live.
Seleziona Prova Ubuntu (non Installa Ubuntu ).
Quando viene visualizzato il desktop, assicurati di essere connesso a Internet. In caso contrario, connettersi 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 Ask Ubuntu nel tuo browser web, nel sistema live CD / DVD / USB. Consiglio vivamente di farlo.
Apri una finestra Terminale con Ctrl+ Alt+ T.
Nella finestra Terminale, esegui questo comando per elencare le tue partizioni:
sudo parted -l
Vedrai qualcosa del genere (ma non sarà esattamente così):
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!
Esamina l'output 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 ext4
partizione, quella è quella.
Se hai più di una ext4
partizione, è probabilmente la prima. Tuttavia, se il primo è molto piccolo - meno di un gigabyte - allora quella potrebbe essere una /boot
partizione separata (ricordate anche quella).
Si noti che il fatto che sia boot
elencato o meno Flags
ha poco a che fare con se una partizione è o meno una partizione separata /boot
. Il mio sistema, le cui informazioni sono elencate sopra, non ha una /boot
partizione 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 di partizione alla fine. Quindi, il nome del dispositivo per la partizione che contiene il mio /
filesystem è /dev/sda1
. Ecco le due righe in cui ho trovato queste informazioni:
Disk /dev/sda: 21.5GB
1 1049kB 20.4GB 20.4GB primary ext4 boot
Se hai più di un'unità fisica, otterrai più di un elenco come quello mostrato sopra. Ma a meno che tu non abbia 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 hai più unità con ext4
partizioni, probabilmente la ext4
partizione che contiene il tuo /
filesystem si trova su un'unità che contiene anche una linux-swap
partizione.
È possibile che il /
filesystem del tuo sistema Ubuntu sia 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 da solo.
Ricorda il nome del dispositivo della partizione che conteneva il tuo /
filesystem (o scrivilo). Se è diverso da /dev/sda1
, lo sostituirai /dev/sda1
con i passaggi seguenti.
(Se sembra che tu abbia una /boot
partizione separata , ricorda anche il nome del dispositivo per quello.)
Montare il /
filesystem su /mnt
e montare il suo /dev
filesystem:
sudo mount /dev/sda1 /mnt
sudo mount --bind /dev /mnt/dev
Controlla se il sistema Ubuntu rotto che stai riparando ha una /boot
partizione separata che deve essere montata separatamente. (Se sei sicuro di no, puoi saltare questo.)
Per verificare, eseguire:
ls /mnt/boot
Se c'è un output (simile grub memtest86+.bin memtest86+_multiboot.bin
, ma non necessariamente esattamente), il sistema rotto si /boot
trova sulla stessa partizione del suo /
e non è necessario montare nulla per accedervi.
Ma se non c'è output, allora dovrai montare il /boot
filesystem:
sudo mount BOOT-PARTITION /mnt/boot
Sostituire BOOT-PARTITION
con il nome del dispositivo della /boot
partizione (vedere il passaggio 6 sopra).
chroot
nel sistema danneggiato, montare i restanti importanti filesystem virtuali e impostare alcune importanti variabili di 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
Determina se l'accesso a Internet funziona dall'interno chroot
di ping
un host affidabile noto per rispondere normalmente ai ping:
ping -c 5 www.google.com
Dovresti vedere qualcosa del genere:
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 principalmente così, e il numero precedente % packet loss
è inferiore a 100, allora la connessione a Internet chroot
funziona:
5 packets transmitted, 5 received, 0% packet loss, time 4006ms
Funziona, quindi puoi saltare il passaggio 11 .
Se sembra principalmente così, e il numero precedente % packet loss
è 100, la connessione deve essere risolta. Accertarsi che la connessione sul sistema di live CD (ad esempio, tramite un browser Web o eseguendo lo stesso comando in una chroot
scheda / finestra Terminale separata non elaborata) funzioni. Assicurati di digitare correttamente il comando. Usa www.google.com
se non lo sei stato.
Se l'output non assomiglia affatto a quanto sopra, ma invece dice ping: unknown host www.google.com
, allora la rete non funziona ancora in chroot
.
Configurare la rete in chroot
. Saltare questo passaggio a meno che non si sia verificato un unknown host
errore nel passaggio 10 sopra.
Per configurare la rete, eseguire il backup del hosts
file del sistema danneggiato e copiarlo sul sistema hosts
e sui resolv.conf
file del CD live . (Non è necessario eseguire il backup della versione del sistema non funzionante resolv.conf
, poiché quel file viene rigenerato automaticamente al volo.)
Apri una nuova scheda Terminale ( Ctrl+ Shift+ T) o, se preferisci, una nuova finestra Terminale ( Ctrl+ Shift+ No solo Ctrl+ 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 exit
comando alla fine chiude la nuova scheda / finestra.)
Ripetere il passaggio 10 sopra per assicurarsi che l'accesso a Internet funzioni ora dall'interno chroot
. Dovrebbe.
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, scoprilo eseguendo questo comando (nella chroot
, non in una finestra / scheda Terminale separata):
lsb_release -r
Su Ubuntu 12.10 (la prossima versione di Ubuntu, attualmente in fase di sviluppo), lo sarà semprelinux-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 separati per server e desktop.)
Se il sistema Ubuntu installato (che si sta risolvendo) è la versione a 64 bit, utilizzare 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, è possibile che si stia utilizzando un CD live a 32 o 64 bit per riparare un sistema installato a 32 bit. Quindi se non sai se il sistema Ubuntu installato è a 32-bit o 64-bit, controlla eseguendo questo comando (nella chroot
, non in una finestra / scheda Terminale separata):
dpkg-architecture -qDEB_HOST_ARCH_BITS
L'output sarà 32
o 64
.
(Nota che nonuname -m
è un modo corretto di trovare queste informazioni, perché anche quando eseguito nel , ti dirà l'architettura del kernel in esecuzione , che è il kernel del sistema CD live e non il kernel del sistema installato (rotto).)chroot
Se il sistema Ubuntu installato (che stai riparando) è la versione a 32 bit, il miglior kernel da utilizzare dipenderà dalla quantità di RAM che hai. Io raccomando:
linux-image-generic
se hai meno di 3 GB di RAMlinux-image-generic-pae
se hai 3 GB di RAM o più.(Questo è il modo in cui il programma di installazione di Ubuntu sceglie quale impostare, da quando il programma di installazione ha acquisito la capacità di installare i kernel PAE. Vedi la risoluzione di questo bug . Se vuoi imparare cos'è PAE, vedi questo articolo di Wikipedia . Se vuoi scopri 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 , dividere per 1.048.576 (1024 2 ).
Su Ubuntu rilascia prima 12.04, probabili possibilità sono linux-image-generic
, linux-image-generic-pae
e linux-image-server
.
linux-image-server
.Questo è il momento che stavi aspettando! Installa un kernel nel sistema rotto.
(Come prima, tranne dove diversamente indicato esplicitamente, questi comandi vengono eseguiti nella chroot
finestra / scheda Terminale non separata.)
apt-get update
apt-get -y install linux-image-generic
Sostituisci linux-image-generic
con qualsiasi altro pacchetto kernel che hai deciso di installare nel passaggio 12 sopra, se diverso.
Se è necessario eseguire il passaggio 11 per configurare la rete in chroot
, ripristinare il vecchio hosts
file. Se hai saltato il passaggio 11, salta anche questo passaggio.
Per ripristinarlo, esegui questo comando:
cp /etc/hosts.old /etc/hosts
Smonta filesystem, exit
estraendo da chroot
:
umount /proc || umount -lf /proc
umount /sys /dev/pts
exit
sudo umount /mnt/dev /mnt
Arrestare il sistema CD / DVD / USB live, rimuovendo il CD / DVD live o l'unità flash USB. Avvia nel sistema installato sul disco rigido che hai appena riparato. In esso è installato un pacchetto kernel (e come parte dell'installazione, il kernel fornito verrà aggiunto di nuovo al menu di avvio di GRUB2). Se tutto ha funzionato correttamente, il tuo sistema dovrebbe avviarsi senza problemi. (Penso che sia possibile che l'avvio richieda un po 'più tempo del solito, questa volta.)
DISCLAIMER: Non ho testato la procedura sopra descritta su ogni possibile sistema Ubuntu, quindi è possibile che ci sia un errore che non ho identificato.
In futuro, consiglio di provare sempre a mantenere installati due kernel. È utile 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 hai intenzione di mantenere due kernel e ne disinstalli accidentalmente uno più di quello che volevi e riavvia, ne rimani ancora uno da cui avviare.
/etc/resolv.conf
è attualmente gestito da resolvconf
, verrà generato automaticamente quando si utilizza NetworkManager e può essere rimosso in modo sicuro utilizzando rm /etc/resolv.conf
come è stato scoperto.
Quando ho rimosso il mio kernel ho trovato questa soluzione nei forum di Ubuntu. Ho seguito ogni passaggio e il sistema è stato ripristinato. Spero che ti possa aiutare.
Un chroot potrebbe funzionare, chroot significa che quando si avvia un sistema si modifica il file system di root. Ad esempio, sei partito da un CD live ma hai cambiato il root "/" nel punto in cui è installato Ubuntu.
Supponiamo che Ubuntu sia installato 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 a 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 ipotesi qui, dal momento che non ho mai dovuto farlo prima, ma questo dovrebbe essere al riguardo. Non so se ricevi un avviso di errore fstab (come non riesco a trovare il root).
Ora devi ripulire 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 la discussione: http://art.ubuntuforums.org/showthread.php?t=1688928
/etc/hosts
e rimuovere /sbin/initctl
? È lì per un motivo.
/sbin/initctl
o dbus-uuidgen
o dpkg-divert
. Si potrebbe essere necessario sostituire /etc/hosts
per la connessione a Internet, ma di solito non, e se lo fai, si dovrebbe mettere la parte posteriore originale. Su un sistema installato (anziché su un CD live che si avvia e decomprime un filesystem di squashfs), non è necessario eseguire update-initramfs
o anche update-grub
dopo aver installato il kernel.
linux-image-2.6.32-26-generic
non sarà il kernel giusto per la maggior parte delle persone da installare.
Dopo aver rimosso i vecchi kernel da Trusty14.04 ieri (FTR: non ho rimosso i due più recenti!) Il mio sistema non si avvia più. GRUB ha mostrato
Error: File not found
Error: You need to load the kernel first
Non ho idea del perché.
Ho quindi seguito le eccellenti istruzioni di Eliah Kagan per l'installazione linux-image-generic
da un CD live. Ha installato 150 MB di nuovo kernel, ma purtroppo non ha risolto il problema.
Per fortuna, ho trovato questa pagina . Lo Boot-Repair
strumento ha funzionato correttamente, il mio sistema è di nuovo in esecuzione.
Volevo solo aggiungere la mia esperienza che ho vissuto oggi per 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 limite che avevo era la rete lenta e quindi il download di ISO completo non era un'opzione. Quindi ho usato Ubuntu Minimal CD (solo 40 MB) e mi sono avviato. Dopo aver rilevato l'opzione hardware (che mi ha aiutato a connettermi al wireless) sono passato all'opzione shell. Ho seguito le istruzioni di @Lekensteyn e ci sono riuscito. alcune cose però: devi copiare resolv.conf
prima di andare chroot altrimenti il tuo DNS verrà fregato e poiché l'utente che ha effettuato l'accesso non ha root su sudo da nessuna parte.
So che è vecchio ma ho pensato che l'aggiunta di questa risposta aggiungesse valore a coloro che avrebbero riscontrato il problema.