Comment restaurer un système après avoir accidentellement retiré tous les noyaux?

Réponses:

93

Démarrez sur un live CD (ou sur une clé USB), montez des systèmes, chrootez dessus et installez le noyau. Après une installation réussie du noyau, démontez les systèmes de fichiers.

  1. Terminal ouvert
  2. Montez la partition Ubuntu: sudo mount /dev/sdXY /mnt
  3. Monter des partitions spéciales:

    sudo mount --bind /dev /mnt/dev
    sudo mount --bind /proc /mnt/proc
    sudo mount --bind /sys /mnt/sys
    
  4. (facultatif) Lorsque vous êtes connecté à un réseau, utilisez les serveurs DNS de votre environnement Live (sinon, les noms d'hôte ne peuvent éventuellement pas être résolus):

    cp /etc/resolv.conf /mnt/etc/resolv.conf
    
  5. Chroot dans le /mnt:sudo chroot /mnt
  6. Installez le noyau Linux: apt-get install linux-image-generic(pas besoin de sudo car vous êtes root après un chroot)
  7. Après une installation réussie du noyau, sortez le chroot et démontez certains systèmes de fichiers:

    exit
    sudo umount /mnt/sys
    sudo umount /mnt/proc
    sudo umount /mnt/dev
    sudo umount /mnt
    
  8. Redémarrez et retirez le CD ou USB: sudo reboot
Lekensteyn
la source
C'est ce que j'aurais suggéré. Je ne vois pas pourquoi ça ne marcherait pas.
Oli
Ok, merci d'avoir confirmé. J'ai également ajouté les étapes de finalisation, le démontage /mnt. Ubuntu s’occupe généralement de démonter / synchroniser les systèmes de fichiers, mais cela me semble plus propre.
Lekensteyn
1
@MaheshKatta Vous devez d'abord monter le RAID. Ainsi, au lieu de la deuxième étape (où vous montez un seul lecteur), vous allez mapper un /dev/mdxxxlecteur - en supposant qu'il s'agisse de mdadm.
Oli
4
@James Edit /etc/resolv.conf(supprimez-le s'il s'agit d'un lien symbolique) et mettez-y quelque chose de similaire nameserver 8.8.8.8(serveur DNS public Google). Remplacez-le si nécessaire.
Lekensteyn
3
Nvm. Il semble que j'ai dû éditer le fichier dans chroot lui-même. Peut-être devriez-vous ajouter quelque chose à la réponse cp /etc/resolv.conf /mnt/etc/resolv.confavant de vous lancer dans le chroot. Cela a fonctionné pour moi quand même
Peter Raeves
56

Cette procédure étendue est à l’origine de la plupart des complications qui pourraient survenir, notamment des problèmes de connexion à Internet chroot, ne sachant pas quel paquetage du noyau installer (avant Ubuntu 12.10, ce ne sera pas toujours le cas linux-image-generic), ne sachant pas, au départ, quelle partition ou même quel paquet. quel disque physique contient le /système de fichiers et ayant une /bootpartition séparée .

Je n’ai pas écrit cela en faisant référence à aucune des autres procédures ici, bien que vous remarquiez certaines similitudes. Je me suis basé, vaguement, sur la procédure décrite ici (bien que ces instructions soient pour quelque chose de tout à fait différent, je les ai largement adaptées, et seules certaines commandes, pas la prose, sont copiées).

Vous avez supprimé tous les packages du noyau et Ubuntu ne peut pas démarrer sans un noyau installé. La solution consiste donc à démarrer à partir d'un CD / DVD / USB chrooten direct sur le système installé et à y installer un noyau.

  1. Démarrez à partir d'un CD / DVD live Ubuntu ou d'un lecteur flash USB en direct.

  2. Sélectionnez Essayer Ubuntu (pas installer Ubuntu ).

  3. Lorsque le bureau apparaît, assurez-vous d'être connecté à Internet. Si vous ne l'êtes pas, connectez-vous à Internet. Une façon de savoir si vous êtes connecté à Internet consiste à ouvrir un navigateur Web. Vous pouvez même suivre le reste des instructions en plaçant cette réponse Ask Ubuntu dans votre navigateur Web, sur le système de CD / DVD / USB en direct. Je recommande fortement de le faire.

  4. Ouvrez une fenêtre de terminal avec Ctrl+ Alt+ T.

  5. Dans la fenêtre Terminal, exécutez cette commande pour répertorier vos partitions:

     sudo parted -l
    

    Vous verrez quelque chose comme ceci (mais ce ne sera pas exactement comme ça):

    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. Examinez le résultat obtenu pour déterminer le nom de périphérique de la partition contenant le /système de fichiers du système Ubuntu installé sur le disque dur (que vous réparez).

    • Si vous n'avez qu'une seule ext4partition, c'est celle-là.

    • Si vous avez plusieurs ext4partitions, c'est probablement la première. Cependant, si la première est très petite (moins d’un gigaoctet), il s’agit peut-être d’une /bootpartition distincte (souvenez-vous de celle-là aussi).

      Veuillez noter que le fait d’être bootrépertorié sous ou non sous Flagsa très peu à voir avec le fait de savoir si une partition est une /bootpartition séparée . Mon système, dont les informations sont répertoriées ci-dessus, ne possède pas de/boot partition séparée .

    • Le nom de périphérique de la partition commence par le nom de périphérique du lecteur physique, indiqué immédiatement après Diskdans la deuxième ligne. Ensuite, ajoutez simplement le numéro de partition à la fin de celle-ci. Ainsi, le nom de périphérique de la partition contenant mon / système de fichiers est /dev/sda1. Voici les deux lignes où j'ai trouvé cette information:

      Disk /dev/sda: 21.5GB
       1      1049kB  20.4GB  20.4GB  primary   ext4            boot
    • Si vous avez plusieurs lecteurs physiques, vous obtiendrez plus d’une liste comme celle présentée ci-dessus. Mais à moins qu'un autre système de type Unix ne soit installé, vous ne disposerez probablement que d'un lecteur contenant des ext4partitions, du moins sans les avoir créées intentionnellement sur un autre lecteur. Si vous avez plusieurs lecteurs avec des ext4partitions, la ext4partition contenant votre /système de fichiers se trouve probablement sur un lecteur contenant également une linux-swappartition.

    • Il est possible que le système de /fichiers de votre système Ubuntu se trouve sur une partition d'un type autre que ext4. Lorsque cela se produit, c'est presque toujours ext3, et presque toujours sur un système assez ancien. Il est très rare que cela se produise, à moins que vous ne décidiez de le faire vous-même.

    Rappelez-vous le nom de périphérique de la partition contenant votre /système de fichiers (ou écrivez-le). Si c'est différent de /dev/sda1, alors vous allez le remplacer /dev/sda1dans les étapes ci-dessous.

    (Si vous semblez avoir une /bootpartition séparée , rappelez-vous également le nom du périphérique.)

  7. Montez le /système de fichiers sur /mntet montez son /devsystème de fichiers:

    sudo mount /dev/sda1 /mnt
    sudo mount --bind /dev /mnt/dev
  8. Vérifiez si le système Ubuntu défectueux que vous réparez a une /bootpartition séparée qui doit être montée séparément. (Si vous êtes sûr que ce n'est pas le cas, vous pouvez ignorer ceci.)

    Pour vérifier, lancez:

    ls /mnt/boot
    

    S'il y a une sortie (comme grub memtest86+.bin memtest86+_multiboot.bin, mais pas nécessairement exactement cela), le système en panne se /boottrouve sur la même partition que la sienne /et vous n'avez rien à monter pour y accéder.

    Mais s'il n'y a pas de sortie, vous devrez alors monter le /bootsystème de fichiers:

    sudo mount BOOT-PARTITION /mnt/boot

    Remplacez-le BOOT-PARTITIONpar le nom de périphérique de la /bootpartition (voir l'étape 6 ci-dessus).

  9. chroot dans le système endommagé, montez les systèmes de fichiers virtuels importants restants et définissez des variables d’environnement importantes:

    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. Déterminer si l' accès Internet fonctionne à partir du chrootpar pinging un hôte fiable qui est connu pour répondre normalement à pings:

    ping -c 5 www.google.com
    

    Vous devriez voir quelque chose comme ça:

    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
    
    • Si cela ressemble généralement à cela et que le nombre précédent % packet lossest inférieur à 100, la connexion Internet dans le système chrootfonctionne:

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

      Cela fonctionne, vous pouvez donc ignorer l'étape 11 .

    • Si cela ressemble généralement à cela et que le nombre précédent % packet lossest 100, la connexion doit être dépannée. Assurez-vous que la connexion sur le système Live CD (par exemple, via un navigateur Web ou en exécutant la même commande dans un chrootonglet / fenêtre Terminal séparé et non édité) fonctionne. Assurez-vous que vous tapez la commande correctement. Utilisez www.google.comsi vous ne l'avez pas été.

    • Si le résultat ne ressemble pas du tout à ce qui précède, mais indique plutôt ping: unknown host www.google.com, la mise en réseau ne fonctionne pas encore dans le chroot.

  11. Configurez la mise en réseau dans le chroot. Ignorez cette étape sauf si vous avez une unknown hosterreur à l'étape 10 ci-dessus.

    Pour configurer la mise en réseau, sauvegardez le hostsfichier du système endommagé et copiez le système hostset les resolv.conffichiers du CD en direct . (Vous n'avez pas besoin de sauvegarder la version du système endommagé resolv.conf, car ce fichier est automatiquement régénéré à la volée.)

    Ouvrez un nouvel onglet Terminal ( Ctrl+ Shift+ T) ou, si vous préférez, une nouvelle fenêtre Terminal ( Ctrl+ Shift+ N, ou simplement Ctrl+ Alt+ T). Exécutez ces commandes:

    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
    

    (La exitcommande à la fin ferme le nouvel onglet / fenêtre.)

    Répétez l’étape 10 ci-dessus pour vous assurer que l’accès Internet fonctionne maintenant depuis le chroot. Cela devrait.

  12. Déterminez quel package de noyau doit être installé. Habituellement, ce sera linux-image-generic. Mais pas toujours.

    Si vous ne savez pas lequel installer, cela dépendra en partie de la version d'Ubuntu que vous avez installée et en partie d'autres informations. Si vous ne savez pas quelle version d'Ubuntu vous avez installée, découvrez-la en exécutant cette commande (dans la fenêtre / onglet du terminal chroot, pas dans une autre fenêtre):

    lsb_release -r
    
    • Sur Ubuntu 12.10 (la prochaine version d'Ubuntu, actuellement en développement), ce sera toujours le cas linux-image-generic. (Voir ceci , ceci et cela .)

    • Sur Ubuntu 12.04 LTS, les possibilités probables sont linux-image-genericet linux-image-generic-pae. (Contrairement aux versions précédentes, 12.04 n'a plus de noyaux de serveur et de bureau séparés.)

      • Si le système Ubuntu installé (que vous corrigez) est la version 64 bits, utilisez linux-image-generic. ( linux-image-generic-paes'applique uniquement aux systèmes 32 bits.)

        Il est possible d'avoir un système Ubuntu 32 bits installé sur un ordinateur 32 bits ou 64 bits. De plus, vous utilisez peut-être un live CD 32 bits ou 64 bits pour réparer un système installé 32 bits. Donc, si vous ne savez pas si le système Ubuntu installé est 32 bits ou 64 bits, vérifiez en exécutant cette commande (dans le chroot, pas dans une fenêtre / un onglet Terminal séparé):

        dpkg-architecture -qDEB_HOST_ARCH_BITS
        

        La sortie sera soit 32ou 64.

        (Notez que ce uname -mn’est pas un moyen correct de trouver ces informations, car même lorsqu’il est exécuté dans chroot, cela vous indiquera l’architecture du noyau en cours d’exécution , c’est-à-dire le noyau du système Live CD et non le noyau du système installé (endommagé).)

      • Si le système Ubuntu installé (que vous corrigez) est la version 32 bits, le meilleur noyau à utiliser dépendra de la quantité de RAM dont vous disposez. Je recommande:

        • linux-image-generic si vous avez moins de 3 Go de RAM
        • linux-image-generic-pae si vous avez 3 Go de RAM ou plus.

        (C’est ainsi que le programme d’installation d’Ubuntu choisit lequel installer, depuis qu’il a désormais la possibilité d’installer des noyaux PAE. Voir la résolution de ce bogue . Si vous voulez savoir ce qu'est PAE, consultez cet article Wikipedia . en savoir plus sur PAE dans Ubuntu, voir cette page wiki Ubuntu .)

        Si vous ne savez pas combien de RAM vous avez, exécutez cette commande pour découvrir:

        grep MemTotal /proc/meminfo
        

        Cela est répertorié en kilo-octets . Pour convertir en gigaoctets , divisez par 1 048 576 (1024 2 ).

        • 3 concerts = 3 145 728 kB
    • Sur versions d' Ubuntu avant 12.04, les possibilités sont probables linux-image-generic, linux-image-generic-paeet linux-image-server.

      • Si vous utilisez un système Ubuntu Server, utilisez linux-image-server.
      • Sinon, suivez les conseils ci-dessus pour les systèmes 12.04.
  13. C'est le moment que vous attendiez! Installez un noyau dans le système en panne.

    (Comme auparavant, sauf indication explicite contraire, ces commandes sont exécutées dans chroot, et non dans une fenêtre / un onglet de terminal séparé.)

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

    Remplacez-le linux-image-genericpar un autre package de noyau que vous avez décidé d'installer à l'étape 12 ci-dessus, s'il est différent.

  14. Si vous deviez exécuter l'étape 11 pour configurer la mise en réseau dans le chroot, restaurez l'ancien hostsfichier. Si vous avez ignoré l'étape 11, ignorez également cette étape.

    Pour le restaurer, exécutez cette commande:

    cp /etc/hosts.old /etc/hosts
    
  15. Démontez les systèmes de fichiers, exiten dehors du chroot:

    umount /proc || umount -lf /proc
    umount /sys /dev/pts
    exit
    sudo umount /mnt/dev /mnt
    
  16. Arrêtez le système Live CD / DVD / USB et retirez le Live CD / DVD ou le lecteur flash USB. Démarrez dans le système installé sur le disque dur, que vous venez de réparer. Vous avez installé un paquet de noyau dans celui-ci (et lors de l'installation, le noyau qu'il fournit sera rajouté dans le menu de démarrage de GRUB2). Si tout fonctionne correctement, votre système devrait démarrer sans problèmes. (Je pense qu'il est possible que cela prenne un peu plus de temps que d'habitude, cette fois.)

AVERTISSEMENT: Je n'ai pas testé la procédure ci-dessus sur tous les systèmes Ubuntu possibles . Il est donc possible qu'il comporte une erreur que je n'ai pas identifiée.

À l'avenir, je recommande de toujours essayer de garder deux noyaux installés. Il est bon d’en avoir deux si l’un d’entre eux cesse de fonctionner pour une raison quelconque (vous pouvez sélectionner l’autre dans le menu de démarrage de GRUB2). De plus, si vous avez l'intention de conserver deux noyaux et que vous en désinstallez accidentellement un de plus que vous ne vouliez et que vous redémarriez, il vous reste encore un noyau pour démarrer.

Eliah Kagan
la source
1
C'est peut-être la meilleure explication écrite sur la façon de faire quelque chose de complexe sous Linux que j'ai jamais lu. Merci
ZincX
Wow, c'est tellement super utile! Énorme merci!
Rafał Cieślak
2
Merci beaucoup Eliah - après avoir bêtement enlevé toutes mes images Linux, vous avez sauvé mon bacon. Le seul hic que j'ai eu était à l'étape suivante: sudo cp /etc/resolv.conf /mnt/etc/resolv.conf J'ai eu une erreur "cp: n'écrivant pas par le lien symbolique` /mnt/etc/resolv.conf '". J'ai trouvé ce fil et suivi les instructions d'une affiche à l'adresse "rm /mnt/etc/resolv.conf" avant "cp /etc/resolv.conf /mnt/etc/resolv.conf" pour résoudre le problème des liens symboliques non résolus.
@ xcal400 /etc/resolv.confest maintenant géré par resolvconf, il sera automatiquement généré lors de l’utilisation de NetworkManager et peut être supprimé en toute sécurité en utilisant ce rm /etc/resolv.confque vous avez découvert.
Lekensteyn
3
Celui-ci devrait être la réponse acceptée. Merci!
Jean-Michel Garcia
0

Lorsque j'ai retiré mon noyau, j'ai trouvé cette solution sur les forums Ubuntu. J'ai suivi chaque étape et le système a été récupéré. J'espère que cela vous aiderait.

Un chroot peut fonctionner, chroot signifie que lorsque vous démarrez un système, vous modifiez le système de fichiers racine. Par exemple, vous avez commencé à partir d'un CD live, mais vous modifiez la racine "/" pour installer votre ubuntu.

Disons que votre Ubuntu est installé sur / dev / sda2, alors vous pouvez essayer les commandes suivantes:

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

maintenant vous êtes root "/" sur / dev / sda2, essayez d'installer le noyau

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

Je devais faire un peu de devinette ici puisque je n'ai jamais eu à faire cela auparavant, mais cela devrait être à propos. Je ne sais pas si vous recevez un avertissement d'erreur fstab (par exemple, impossible de trouver la racine).

Maintenant, vous devez nettoyer certaines choses et démonter les partitions montées: 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

Et vous pouvez redémarrer pour voir si cela a fonctionné.

URL du fil de discussion: http://art.ubuntuforums.org/showthread.php?t=1688928

Melvin
la source
Pourquoi voudriez-vous remplacer /etc/hostset enlever /sbin/initctl? C'est là pour une raison.
Lekensteyn
Cela semble finalement basé sur LiveCDCustomization ; certaines étapes ne sont pas nécessaires pour réparer un système déjà installé. En particulier, vous n'avez rien à faire avec /sbin/initctlou dbus-uuidgenou dpkg-divert. Vous devrez peut- être remplacer /etc/hostspour vous connecter à Internet, mais pas habituellement, et si vous le faites, vous devriez remettre l'original. Sur un système installé (plutôt que sur un CD live qui démarre, puis décompresse un système de fichiers squashfs), vous n'avez pas à exécuter, update-initramfsni même update-grubaprès avoir installé le noyau.
Eliah Kagan
De plus, comme cette procédure n'installe aucun métapaquet du noyau, il est possible que le noyau ne soit pas correctement mis à jour ultérieurement, à moins qu'un métapaquet ne soit installé. De plus, linux-image-2.6.32-26-genericce ne sera pas le bon noyau à installer pour la plupart des gens.
Eliah Kagan
0

Après avoir retiré les anciens noyaux de Trusty14.04 hier (FTR: je n’ai pas supprimé les deux plus récents!), Mon système ne démarre plus. GRUB a montré

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

Aucune idée pourquoi.

J'ai ensuite suivi les excellentes instructions d' Eliah Kagan pour l'installation à linux-image-genericpartir d'un CD live. Il a effectivement installé 150 Mo de nouveau noyau, mais malheureusement, cela n'a pas résolu le problème.

Heureusement, j'ai trouvé cette page . L' Boot-Repairoutil a bien fonctionné, mon système fonctionne à nouveau.

à gauche autour de
la source
0

Je voulais simplement ajouter à l'expérience que j'ai vécue aujourd'hui la mise à niveau de Willy. J'ai nettoyé un peu et je me suis retrouvé avec seulement memtest. Google m'a fait comprendre que j'avais enlevé les noyaux. Une des contraintes que j'ai eue est la lenteur du réseau et le téléchargement complet de l’ISO n’était donc pas une option. J'ai donc utilisé Ubuntu Minimal CD (40 Mo seulement) et démarré dessus. Après avoir détecté une option matérielle (qui m'a aidé à me connecter au sans fil), je suis passé dans l'option shell. J'ai suivi les instructions de @Lekensteyn et j'ai réussi. quelques choses cependant: vous devez copier resolv.confavant d’aller chroot sinon votre DNS sera foutu et depuis l’utilisateur connecté il n’y a plus besoin de root pour sudo.

Je connais l’ancien, mais j’ai pensé que l’ajout de cette réponse ajouterait de la valeur à ceux qui rencontreraient le problème.

Stefano Mtangoo
la source