Vraag Hoe een systeem te herstellen na het per ongeluk verwijderen van alle kernels?


Ik probeerde oude kernels te verwijderen, maar ik heb alle kernels op mijn Ubuntu 11.04-laptop verwijderd. Is er een manier om dit te verhelpen via USB-opstart of harde schijf op een ander systeem?


65
2018-02-25 22:31


oorsprong


Verwant: Hoe verwijderde bestanden terugzetten in / boot? (vmlinuz ontbreekt, systeem start niet op) - Eliah Kagan


antwoorden:


Start een live CD op (of live USB), mount sommige systemen, chroot erin en installeer de kernel. Na een succesvolle installatie van de kernel, ontkoppel je de bestandssystemen.

  1. Open Terminal
  2. Mount de Ubuntu-partitie: sudo mount /dev/sdXY /mnt
  3. Monteer een aantal speciale partities:

    sudo mount --bind /dev /mnt/dev
    sudo mount --bind /proc /mnt/proc
    sudo mount --bind /sys /mnt/sys
    
  4. (optioneel) Wanneer u bent verbonden met een netwerk, gebruikt u de DNS-servers van uw Live-omgeving (anders kunnen hostnamen mogelijk niet worden opgelost):

    cp /etc/resolv.conf /mnt/etc/resolv.conf
    
  5. Chroot in de /mnt: sudo chroot /mnt
  6. Installeer de Linux-kernel: apt-get install linux-image-generic (geen sudo vereist omdat je root bent na een chroot)
  7. Na een succesvolle installatie van de kernel, verlaat je de chroot en ontkoppel je enkele bestandssystemen:

    exit
    sudo umount /mnt/sys
    sudo umount /mnt/proc
    sudo umount /mnt/dev
    sudo umount /mnt
    
  8. Herstart en verwijder CD of USB: sudo reboot

88
2018-02-25 22:41



Het is wat ik had voorgesteld. Ik snap niet waarom het niet zou werken. - Oli♦
Ok, bedankt voor het bevestigen. Ik heb ook de finalisatiestappen toegevoegd, unmounting /mnt. Ubuntu zorgt meestal voor het ontkoppelen / synchroniseren van de bestandssystemen, maar dit ziet er schoner uit. - Lekensteyn
@MaheshKatta U moet de RAID eerst koppelen. Dus in plaats van stap twee (waar je een enkele schijf aankoppelt), breng je een a in kaart /dev/mdxxx rijden - ervan uitgaande dat het mdadm is. - Oli♦
@James Bewerken /etc/resolv.conf (verwijder het als het een symlink is) en plaats zoiets als nameserver 8.8.8.8 erin (openbare DNS-server van Google). Vervang deze indien nodig. - Lekensteyn
Nvm. Het lijkt erop dat ik het bestand in chroot zelf moest bewerken. Misschien moet je toevoegen aan het antwoord cp /etc/resolv.conf /mnt/etc/resolv.conf voordat je in chroot gaat. Dat werkte sowieso voor mij - Peter Raeves


Deze uitgebreide procedure is verantwoordelijk voor de meeste complicaties die kunnen optreden, waaronder problemen met de verbinding met internet in de chroot, niet wetend welk kernelpakket moet worden geïnstalleerd (vóór Ubuntu 12.10 zal dit niet het geval zijn altijd worden linux-image-generic), niet wetende vanaf het begin welke partitie of zelfs welke fysieke schijf de bevat / bestandssysteem, en met een afzonderlijke /boot partitie.

Ik heb dit niet geschreven met verwijzing naar een van de andere procedures hier, hoewel je enkele overeenkomsten zult opmerken. Ik baseerde het, losjes, op de procedure hier (hoewel die instructies voor iets heel anders zijn, heb ik ze uitgebreid aangepast en worden slechts enkele commando's, geen proza, gekopieerd).

Je hebt alle kernelpakketten verwijderd en Ubuntu kan niet opstarten zonder dat een kernel is geïnstalleerd. Dus de oplossing is om op te starten van een live CD / DVD / USB, chroot in het geïnstalleerde systeem en installeer er een kernel in.

  1. Start op vanaf een Ubuntu live-cd / dvd of een live USB-flashstation.

  2. kiezen Probeer Ubuntu (niet Installeer Ubuntu).

  3. Wanneer het bureaublad verschijnt, controleert u of u bent verbonden met internet. Als u dat niet bent, maakt u verbinding met internet. Een manier om te zien of u verbonden bent met internet, is door een webbrowser te openen. Je kunt zelfs de rest van de instructies volgen door dit Ask Ubuntu-antwoord in je webbrowser op het live CD / DVD / USB-systeem te plaatsen. Ik adviseer sterk om dat te doen.

  4. Open een Terminal-venster met Ctrl+alt+T.

  5. Voer in het venster Terminal deze opdracht uit om uw partities weer te geven:

     sudo parted -l
    

    Je zult zoiets zien (maar dat zal niet zo zijn) precies soortgelijk):

    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. Bestudeer de uitvoer die u hebt gekregen om de apparaatnaam van de partitie die de bevat te bepalen / bestandssysteem van het Ubuntu-systeem dat op de harde schijf is geïnstalleerd (dat u aan het repareren bent).

    • Als je er maar een hebt ext4 partitie, dat is het.

    • Als je meer dan één hebt ext4 partitie, het is waarschijnlijk de eerste. Als de eerste echter erg klein is - minder dan een gigabyte - dan kan dat een afzonderlijke zijn /boot partitie (onthoud die ook).

      Houd er rekening mee dat of niet boot staat vermeld onder Flags heeft heel weinig te maken met het al dan niet scheiden van een partitie /boot partitie. Mijn systeem, waarvan de informatie hierboven wordt vermeld, wel niet hebben een aparte /boot partitie.

    • De apparaatnaam voor de partitie begint met de apparaatnaam voor de fysieke schijf die onmiddellijk daarna wordt vermeld Disk in de tweede regel. Voeg vervolgens het partitienummer toe aan het einde daarvan. Dus de apparaatnaam voor de partitie die deze bevat mijn  / bestandssysteem is /dev/sda1. Hier zijn de twee regels waar ik die informatie vond:

      Disk / Dev / sda: 21.5GB
       1      1049kB  20.4GB  20.4GB  primary   ext4            boot
    • Als je meer dan één fysieke schijf hebt, krijg je meer dan één vermelding zoals hierboven. Maar tenzij je een ander Unix-achtig systeem hebt geïnstalleerd, heb je waarschijnlijk maar één schijf met daarin ext4 partities, althans zonder ze opzettelijk op een andere schijf te hebben gemaakt. Als je meerdere schijven hebt met ext4 partities, dan is de ext4 partitie die uw bevat / bestandssysteem is waarschijnlijk op een schijf die ook bevat een linux-swap partitie.

    • Haar mogelijk dat je Ubuntu-systeem is / bestandssysteem is op een partitie van het type anders dan ext4. Wanneer dit gebeurt, is het bijna altijd ext3, en bijna altijd op een vrij oud systeem. Het is zeer ongewoon dat dit het geval is, tenzij je opzettelijk dingen op deze manier zelf hebt opgezet.

    Onthoud de apparaatnaam van de partitie waarin uw / bestandssysteem (of schrijf het op). Als het anders is /dev/sda1, dan vervang je /dev/sda1 ermee in de onderstaande stappen.

    (Als het er naar uitziet dat je een afzonderlijke hebt /boot partitie, onthoud ook de apparaatnaam.)

  7. Monteer de / bestandssysteem naar /mnten mount zijn /dev bestandssysteem:

    sudo mount / Dev / sda1 /mnt
    sudo mount --bind /dev /mnt/dev
  8. Controleer of het kapotte Ubuntu-systeem dat u repareert, een aparte heeft /boot partitie die afzonderlijk moet worden gemonteerd. (Als je bent zeker het is niet zo, u kunt dit overslaan.)

    Om te controleren, voer:

    ls /mnt/boot
    

    Als er uitvoer is (zoals grub memtest86+.bin memtest86+_multiboot.bin, maar niet noodzakelijk precies dat), dan is het kapotte systeem /boot bevindt zich op dezelfde partitie als de / en je hoeft niets te koppelen om er toegang toe te hebben.

    Maar als er geen uitvoer is, dan moet je de /boot bestandssysteem:

    sudo mount BOOT-PARTITION /mnt/boot

    Vervangen BOOT-PARTITION met de apparaatnaam van de /boot partitie (zie stap 6 hierboven).

  9. chroot in het kapotte systeem, mount de resterende belangrijke virtuele bestandssystemen, en stel een aantal belangrijke omgevingsvariabelen in:

    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. Bepaal of internettoegang werkt vanuit de chroot door pingeen betrouwbare host waarvan bekend is dat deze normaal reageert op pings:

    ping -c 5 www.google.com
    

    Je zou zoiets als dit moeten zien:

    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
    
    • Als het er zo ongeveer uitziet, en het nummer ervoor % packet loss is minder dan 100, dan is de internetverbinding in de chroot werkt:

      5 packets transmitted, 5 received, 0% pakketverlies, time 4006ms

      Het werkt, dus je kunt het sla stap 11 over.

    • Als het er zo ongeveer uitziet, en het nummer ervoor % packet loss is 100, de verbinding moet worden opgelost. Controleer of de verbinding op het live-cd-systeem werkt (bijvoorbeeld via een webbrowser of door hetzelfde commando uit te voeren in een afzonderlijke, niet-chrooted tabblad Terminal / venster) werkt. Zorg ervoor dat u de opdracht correct invoert. Gebruik www.google.com als je dat nog niet bent geweest.

    • Als de uitvoer helemaal niet lijkt op het bovenstaande, maar in plaats daarvan zegt ping: unknown host www.google.com, dan werkt netwerken nog niet in de chroot.

  11. Netwerk instellen in de chroot. Sla deze stap over, tenzij je een hebt unknown host fout in stap 10 hierboven.

    Voor het opzetten van een netwerk, maak een back-up van de kapotte systemen hosts bestand en kopieer deze over de live CD-systemen hosts en resolv.conf bestanden. (U hoeft geen back-up te maken van de versie van het gebroken systeem van resolv.conf, omdat dat bestand automatisch wordt gegenereerd tijdens het spelen.)

    Open een nieuw tabblad Terminal (Ctrl+Verschuiving+T) of, als u daar de voorkeur aan geeft, a nieuw Terminal-venster (Ctrl+Verschuiving+N, of gewoon Ctrl+alt+T). Voer deze opdrachten daarin uit:

    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
    

    (De exit opdracht aan het einde sluit het nieuwe tabblad / venster.)

    Herhaal stap 10 hierboven om ervoor te zorgen dat internettoegang nu werkt vanuit de chroot. Het zou moeten.

  12. Zoek uit welk kernelpakket moet worden geïnstalleerd. Meestal zal dit zijn linux-image-generic. Maar niet altijd.

    Als u niet zeker weet wat u moet installeren, is dit gedeeltelijk afhankelijk van welke Ubuntu-release u hebt geïnstalleerd en deels van andere informatie. Als u niet zeker weet welke Ubuntu-release u hebt geïnstalleerd, ontdek dan door deze opdracht uit te voeren (in de chroot, niet in een apart Terminal-venster / tabblad):

    lsb_release -r
    
    • Op Ubuntu 12.10 (de volgende Ubuntu-uitgave, momenteel in ontwikkeling), het altijd zal zijn linux-image-generic. (Zien deze, deze, en deze.)

    • Op Ubuntu 12.04 LTS zijn de waarschijnlijke mogelijkheden linux-image-generic en linux-image-generic-pae. (In tegenstelling tot eerdere versies bevat 12.04 geen afzonderlijke server- en bureaubladkernels.)

      • Als het geïnstalleerde Ubuntu-systeem (dat u aan het repareren bent) de 64-bits versie is, gebruikt u linux-image-generic. (linux-image-generic-pae is alleen van toepassing op 32-bits systemen.)

        Het is mogelijk om een ​​32-bits Ubuntu-systeem op een 32-bits of 64-bits computer te hebben geïnstalleerd. Verder zou je een 32-bit of 64-bit live-CD kunnen gebruiken om een ​​32-bit geïnstalleerd systeem te repareren. Dus als je niet weet of het geïnstalleerd Ubuntu-systeem is 32-bit of 64-bit, controleer door het uitvoeren van deze opdracht (in de chroot, niet in een apart Terminal-venster / tabblad):

        dpkg-architecture -qDEB_HOST_ARCH_BITS
        

        De uitvoer zal een van beide zijn 32 of 64.

        (Houd er rekening mee dat uname -m is niet een juiste manier om deze informatie te vinden, want zelfs als deze wordt uitgevoerd in de chroot, dat zal je de architectuur van de draaiende kernel, wat de kernel van het live CD-systeem is en niet de kernel van het geïnstalleerde (kapotte) systeem.)

      • Als het geïnstalleerde Ubuntu-systeem (dat u aan het repareren bent) de 32-bits versie is, is de beste te gebruiken kernel afhankelijk van hoeveel RAM u hebt. Ik raad aan:

        • linux-image-genericals je minder dan 3 GB RAM hebt
        • linux-image-generic-pae als je 3 GB RAM of meer hebt.

        (Dit is hoe Ubuntu's installateur kiest welke setup hij moet installeren, vanaf het moment dat het installatieprogramma de mogelijkheid kreeg om PAE-kernels te installeren. de resolutie naar deze bug. Als u wilt weten wat PAE is, kijk dan dit Wikipedia-artikel. Als je meer wilt weten over PAE in Ubuntu, zie dan deze Ubuntu-wiki-pagina.)

        Als u niet weet hoeveel RAM u hebt, voert u deze opdracht uit om te achterhalen:

        grep MemTotal /proc/meminfo
        

        Dat staat vermeld in kilobytes. Omzetten naar gigabytes, deel door 1,048,576 (10242).

        • 3 optredens = 3.145.728 kB
    • Op Ubuntu-releases voor 12.04, waarschijnlijke mogelijkheden zijn linux-image-generic, linux-image-generic-pae, en linux-image-server.

      • Als u een Ubuntu-serversysteem gebruikt, gebruik dan linux-image-server.
      • Volg anders het bovenstaande advies voor 12.04-systemen.
  13. Dit is het moment waarop je hebt gewacht! Installeer een kernel in het gebroken systeem.

    (Zoals eerder, behalve waar expliciet anders aangegeven, worden deze opdrachten uitgevoerd in de chroot, niet in een apart Terminal-venster / tabblad.)

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

    Vervangen linux-image-generic met welk ander kernelpakket dat je hebt besloten te installeren in stap 12 hierboven, indien anders.

  14. Als u stap 11 moet uitvoeren om netwerken in te stellen in de chroot, herstel de oude hosts het dossier. Als u stap 11 hebt overgeslagen, slaat u deze stap ook over.

    Voer deze opdracht uit om het te herstellen:

    cp /etc/hosts.old /etc/hosts
    
  15. Ontkoppel bestandssystemen, exituit de chroot:

    umount /proc || umount -lf /proc
    umount /sys /dev/pts
    exit
    sudo umount /mnt/dev /mnt
    
  16. Sluit het live-CD / DVD / USB-systeem af en verwijder de live CD / DVD of USB-flashdrive. Start het systeem op dat op de harde schijf is geïnstalleerd en dat u zojuist hebt gerepareerd. Je hebt er een kernelpakket in geïnstalleerd (en als onderdeel van de installatie wordt de kernel die het levert toegevoegd aan het opstartmenu van GRUB2). Als alles goed zou werken, zou je systeem zonder problemen moeten opstarten. (Ik denk dat het mogelijk is dat dit iets langer zal duren dan normaal, dit keer.)

DISCLAIMER: Ik heb de bovenstaande procedure niet getest alles mogelijk Ubuntu-systeem, dus het is mogelijk dat er een fout in zit die ik niet heb geïdentificeerd.

In de toekomst raad ik aan altijd te proberen te houden twee kernels geïnstalleerd. Het is goed om er twee te hebben voor het geval dat een van hen om welke reden dan ook stopt met werken (je kunt de andere in het opstartmenu van GRUB2 selecteren). Plus, als u van plan bent om te houden twee kernels en je per ongeluk er nog één verwijdert meer dan je had bedoeld en herstart, je hebt er nog één over om van op te starten.


52
2017-07-20 15:58



Dit is misschien de beste geschreven uitleg over hoe iets complexs te doen in Linux die ik ooit heb gelezen. Bedankt - ZincX
Wauw, dit is zo super behulpzaam! Enorm bedankt! - Rafał Cieślak
Heel erg bedankt, Eliah - na het dom verwijderen van al mijn linux-afbeeldingen, redde je mijn spek. De enige hik die ik had was de volgende stap: sudo cp /etc/resolv.conf /mnt/etc/resolv.conf Ik kreeg een "cp: not writing through bungelende symlink` /mnt/etc/resolv.conf '"fout. ik vond dit draad en volgde de instructies van één poster op: "rm / mnt/etc/resolv.conf" vóór "cp /etc/resolv.conf /mnt/etc/resolv.conf" om het bungelende symlink-probleem op te lossen.
@ xcal400 /etc/resolv.conf wordt tegenwoordig beheerd door resolvconf, het wordt automatisch gegenereerd bij gebruik van NetworkManager en kan veilig worden verwijderd met rm /etc/resolv.conf zoals je ontdekte. - Lekensteyn
Dit zou het geaccepteerde antwoord moeten zijn. Bedankt! - Jean-Michel Garcia


Toen ik mijn kernel verwijderde, vond ik deze oplossing op Ubuntu-fora. Ik volgde elke stap en het systeem werd hersteld. Ik hoop dat het je zou helpen.

Een chroot werkt mogelijk, chroot betekent dat wanneer u een systeem start, u het root-bestandssysteem wijzigt. U bent bijvoorbeeld gestart vanaf een live-cd maar u wijzigt de hoofdmap "/" naar waar uw ubuntu is geïnstalleerd.

Laten we zeggen dat je ubuntu is geïnstalleerd op / dev / sda2, dan kun je de volgende opdrachten proberen:

Code:

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

nu ben je root "/" is op / dev / sda2, probeer de kernel te installeren

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

Ik moest hier wat giswerk doen, omdat ik dit nooit eerder hoefde te doen, maar dit zou het moeten zijn. Weet niet of je wat fstab foutwaarschuwing krijgt (zoals kan root niet vinden).

Nu moet je wat spullen opruimen en de aangekoppelde partities ontkoppelen: Code:

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

En u kunt opnieuw opstarten om te zien of het werkte.

URL voor de thread: http://art.ubuntuforums.org/showthread.php?t=1688928


0
2018-02-26 12:23



Waarom zou je vervangen? /etc/hosts en verwijder /sbin/initctl? Het is daar voor een reden. - Lekensteyn
Dit lijkt uiteindelijk gebaseerd op LiveCDCustomization; sommige stappen zijn niet nodig voor het repareren van een reeds geïnstalleerd systeem. In het bijzonder, hoeft u niets te doen met /sbin/initctl of dbus-uuidgen of dpkg-divert. U macht moet vervangen /etc/hosts om verbinding te maken met internet, maar meestal niet, en als u dat doet, moet u het origineel terugzetten. Op een geïnstalleerd systeem (in plaats van een live-cd die opstart, wordt een squashfs-bestandssysteem uitgepakt), hoeft u niet te lopen update-initramfs of zelfs update-grub na het installeren van de kernel. - Eliah Kagan
Omdat deze procedure geen kernel-metapackage installeert, wordt de kernel mogelijk later niet goed bijgewerkt, tenzij er een metapackage is geïnstalleerd. Voorts linux-image-2.6.32-26-generic zal niet de juiste kernel zijn voor de meeste mensen om te installeren. - Eliah Kagan


Nadat ik gisteren oude kernels van Trusty14.04 had verwijderd (FTR: dat deed ik niet verwijder de twee meest recente!) mijn systeem zou niet meer opstarten. GRUB liet zien

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

Geen idee waarom.

Ik volgde toen De uitstekende instructies van Eliah Kagan installeren linux-image-generic van een live CD. Het installeerde 150 MB nieuwe kernel, maar helaas loste dit het probleem niet op.

Gelukkig vond ik dat deze pagina. De Boot-Repair tool heeft het goed gedaan, mijn systeem draait weer.


0
2017-07-16 11:00





Ik wilde gewoon mijn ervaring toevoegen die ik vandaag heb doorlopen bij het upgraden naar Willy. Ik maakte een klein beetje schoon en ik merkte dat ik alleen met memtest was. Google leidde me om te begrijpen dat ik de kernels had verwijderd. Een beperking die ik had is traag netwerk en dus het downloaden van de volledige ISO was geen optie. Dus ik gebruikte Ubuntu Minimal CD (Alleen 40 MB) en erop gestart. Na het detecteren van de hardware-optie (die me hielp om verbinding te maken met draadloos) ging ik naar shell-optie. Ik volgde @ Lekensteyn instructies en dat is gelukt. maar een paar dingen: je moet kopiëren resolv.conf voordat je chroot gebruikt, anders wordt je DNS genaaid en omdat de ingelogde gebruiker root is, is sudo nergens nodig.

Ik weet dat het oud is, maar ik dacht dat het toevoegen van dit antwoord waarde toevoegt aan degenen die het probleem zouden tegenkomen.


0
2018-04-14 20:28