Как восстановить систему после случайного удаления всех ядер?

69

Я пытался удалить старые ядра, но я, должно быть, удалил все ядра на своем ноутбуке Ubuntu 11.04. Есть ли способ исправить это через загрузочный USB-накопитель или смонтировать жесткий диск в другой системе?

user7242
источник

Ответы:

93

Загрузитесь с live CD (или live USB), смонтируйте несколько систем, загрузитесь в него и установите ядро. После успешной установки ядра размонтируйте файловые системы.

  1. Открытый терминал
  2. Смонтируйте раздел Ubuntu: sudo mount /dev/sdXY /mnt
  3. Смонтируйте несколько специальных разделов:

    sudo mount --bind /dev /mnt/dev
    sudo mount --bind /proc /mnt/proc
    sudo mount --bind /sys /mnt/sys
    
  4. (необязательно) Когда вы подключены к сети, используйте DNS-серверы из вашей среды Live (в противном случае имена хостов не могут быть разрешены):

    cp /etc/resolv.conf /mnt/etc/resolv.conf
    
  5. Закрепите в /mnt:sudo chroot /mnt
  6. Установите ядро ​​Linux: apt-get install linux-image-generic(sudo не требуется, поскольку вы являетесь пользователем root после chroot)
  7. После успешной установки ядра вытащите chroot и размонтируйте некоторые файловые системы:

    exit
    sudo umount /mnt/sys
    sudo umount /mnt/proc
    sudo umount /mnt/dev
    sudo umount /mnt
    
  8. Перезагрузите и удалите CD или USB: sudo reboot
Lekensteyn
источник
Это то, что я бы предложил. Я не понимаю, почему это не сработает.
Оли
Хорошо, спасибо за подтверждение. Я также добавил этапы завершения, размонтирование /mnt. Ubuntu обычно заботится о размонтировании / синхронизации файловых систем, но для меня это выглядит чище.
Лекенштейн
1
@MaheshKatta Сначала вам нужно смонтировать RAID. Таким образом, вместо второго шага (где вы монтируете один диск) вы будете отображать /dev/mdxxxдиск - предполагая, что это mdadm.
Оли
4
@James Edit /etc/resolv.conf(удалите его, если это символическая ссылка) и вставьте что-то вроде nameserver 8.8.8.8этого (публичный DNS-сервер Google). Замените его при необходимости.
Лекенштейн
3
Nvm. Похоже, мне пришлось редактировать файл в самом chroot. Возможно, вам следует добавить ответ, cp /etc/resolv.conf /mnt/etc/resolv.confпрежде чем переходить к chroot. В любом случае, это сработало для меня
Питер Рейвс
56

Эта расширена процедура учитывает большинство осложнений , которые могут возникнуть, в том числе проблем с подключением к Интернету в chroot, не зная , какое ядро пакет для установки (до Ubuntu 12.10, это не всегда будет linux-image-generic), не зная , с самого начала , какой раздел или даже какой физический диск содержит /файловую систему и имеет отдельный /bootраздел.

Я не писал это со ссылкой на какие-либо другие процедуры здесь, хотя вы заметите некоторые сходства. Я основал это, свободно, на процедуре здесь (хотя эти инструкции для чего-то совершенно другого, я их сильно адаптировал, и копируются только некоторые команды, а не проза).

Вы удалили все пакеты ядра, и Ubuntu не может загрузиться без установленного ядра. Поэтому решение состоит в том, чтобы загрузиться с живого CD / DVD / USB chrootв установленную систему и установить в нее ядро.

  1. Загрузитесь с живого CD / DVD-диска Ubuntu или USB-флешки.

  2. Выберите Попробовать Ubuntu (не устанавливать Ubuntu ).

  3. Когда появится рабочий стол, убедитесь, что вы подключены к Интернету. Если нет, подключитесь к Интернету. Один из способов проверить, подключены ли вы к Интернету, - открыть веб-браузер. Вы даже можете следовать остальным инструкциям, разместив этот ответ Ask Ubuntu в своем веб-браузере, в системе live CD / DVD / USB. Я настоятельно рекомендую это сделать.

  4. Откройте окно терминала с помощью Ctrl+ Alt+ T.

  5. В окне терминала выполните эту команду, чтобы вывести список разделов:

     sudo parted -l
    

    Вы увидите что-то вроде этого (но это будет не совсем так):

    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. Изучите полученный вывод, чтобы определить имя устройства раздела, содержащего /файловую систему системы Ubuntu, которая установлена ​​на жестком диске (который вы восстанавливаете).

    • Если у вас есть только один ext4раздел, это один.

    • Если у вас более одного ext4раздела, вероятно, это первый раздел. Однако, если первый размер очень маленький - меньше гигабайта - тогда это может быть отдельный /bootраздел (помните, что тоже).

      Обратите внимание, что то boot, перечислено в списке или нет Flags, очень мало связано с тем, является ли раздел отдельным /bootразделом. Моя система, чья информация указана выше, не имеет отдельного /bootраздела.

    • Имя устройства для раздела начинается с имени устройства для физического диска, которое указывается сразу после Diskвторой строки. Затем просто добавьте номер раздела в конце этого. Итак, имя устройства для раздела, содержащего мою / файловую систему, таково /dev/sda1. Вот две строки, где я нашел эту информацию:

      Disk /dev/sda: 21.5GB
       1      1049kB  20.4GB  20.4GB  primary   ext4            boot
    • Если у вас есть более одного физического диска, вы получите более одного списка, как показано выше. Но если у вас не установлена ​​другая Unix-подобная система, вероятно, у вас будет только один диск с ext4разделами, по крайней мере, без намеренного создания их на другом диске. Если у вас есть несколько дисков с ext4разделами, то ext4раздел, содержащий вашу /файловую систему, вероятно, находится на диске, который также содержит linux-swapраздел.

    • Это возможно , что ваша система Ubuntu в /файловой системе на перегородке другого типа , чем ext4. Когда это происходит, это почти всегда ext3, и почти всегда в довольно старой системе. Это очень редко случается, если вы не намеренно настроили все таким образом.

    Запомните имя устройства раздела, содержащего вашу /файловую систему (или запишите его). Если он отличается от этого /dev/sda1, вы замените /dev/sda1его в следующих шагах.

    (Если выглядело, как будто у вас есть отдельный /bootраздел, запомните имя устройства для этого тоже.)

  7. Смонтируйте /файловую систему /mntи смонтируйте ее /dev:

    sudo mount /dev/sda1 /mnt
    sudo mount --bind /dev /mnt/dev
  8. Проверьте, имеет ли сломанная система Ubuntu, которую вы восстанавливаете, отдельный /bootраздел, который необходимо монтировать отдельно. (Если вы уверены, что это не так, вы можете пропустить это.)

    Чтобы проверить, запустите:

    ls /mnt/boot
    

    Если есть вывод (например grub memtest86+.bin memtest86+_multiboot.bin, но не обязательно именно так), то сломанная система /bootнаходится в том же разделе, что и ее, /и вам не нужно ничего монтировать для доступа к ней.

    Но если нет выходных данных, вам придется смонтировать /bootфайловую систему:

    sudo mount BOOT-PARTITION /mnt/boot

    Замените BOOT-PARTITIONна имя устройства /bootраздела (см. Шаг 6 выше).

  9. chroot в сломанную систему, смонтируйте оставшиеся важные виртуальные файловые системы и установите некоторые важные переменные среды:

    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. Определить , если доступ в Интернет работает изнутри с chrootпомощью pingING некоторые надежного хозяина , который , как известно, обычно отвечают на пинги:

    ping -c 5 www.google.com
    

    Вы должны увидеть что-то вроде этого:

    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
    
    • Если это выглядит в основном так, а число до этого % packet lossменьше 100, то подключение к Интернету в chrootработает:

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

      Это работает, так что вы можете пропустить шаг 11 .

    • Если это выглядит в основном так, а число перед этим % packet lossравно 100, соединение требует устранения неполадок. Убедитесь, что соединение в системе live CD (например, через веб-браузер или с помощью той же команды в отдельной, не chrootредактируемой вкладке / окне терминала) работает. Убедитесь, что вы вводите команду правильно. Используйте, www.google.comесли вы еще не были.

    • Если выходные данные совсем не похожи на вышеприведенные, а вместо этого говорят ping: unknown host www.google.com, что сеть еще не работает в chroot.

  11. Настройте сеть в chroot. Пропустите этот шаг, если вы не получили unknown hostошибку в шаге 10 выше.

    Для настройки сети создайте резервную копию hostsфайла сломанной системы и скопируйте систему hostsи resolv.confфайлы live CD . (Вам не нужно создавать резервную копию сломанной версии системы resolv.conf, так как этот файл автоматически восстанавливается на лету.)

    Откройте новую вкладку «Терминал» ( Ctrl+ Shift+ T) или, если хотите, новое окно «Терминал» ( Ctrl+ Shift+ Nили просто Ctrl+ Alt+ T). Запустите эти команды в нем:

    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
    

    (Команда exitв конце закрывает новую вкладку / окно.)

    Повторите шаг 10 выше, чтобы убедиться, что доступ к Интернету теперь работает изнутри chroot. Должно.

  12. Выясните, какой пакет ядра должен быть установлен. Обычно так и будет linux-image-generic. Но не всегда.

    Если вы не уверены, какую установку установить, это будет зависеть отчасти от того, какую версию Ubuntu вы установили, а отчасти от другой информации. Если вы не уверены , какой Ubuntu релиз вы установили, узнать, выполнив команду (в chroot, не в терминальном окне / вкладке отдельный):

    lsb_release -r
    
    • На Ubuntu 12.10 (следующий выпуск Ubuntu, который в настоящее время находится в разработке), так будет всегдаlinux-image-generic . (Смотрите это , это и это .)

    • На Ubuntu 12.04 LTS, вероятные возможности есть linux-image-genericи linux-image-generic-pae. (В отличие от предыдущих версий, 12.04 больше не имеет отдельных ядер сервера и рабочего стола.)

      • Если установленная система Ubuntu (которую вы исправляете) является 64-битной версией, используйте linux-image-generic. ( linux-image-generic-paeотносится только к 32-битным системам.)

        Возможно установить 32-битную систему Ubuntu на 32-битном или 64-битном компьютере. Кроме того, вы можете использовать 32-битный или 64-битный live CD для исправления 32-битной установленной системы. Так что, если вы не знаете, является ли установленная система Ubuntu 32-битной или 64-битной, проверьте, выполнив эту команду (в chroot, а не в отдельном окне / вкладке терминала):

        dpkg-architecture -qDEB_HOST_ARCH_BITS
        

        Выход будет либо 32или 64.

        (Обратите внимание , что uname -mэто не правильный путь , чтобы найти эту информацию, потому что даже при запуске в chroot, что расскажет вам архитектуру запущенного ядра , что ядро программы системы Live CD и не установлен (прерывистая) ядро системы.)

      • Если установленная система Ubuntu (которую вы исправляете) является 32-битной версией, лучшее ядро ​​для использования будет зависеть от того, сколько у вас оперативной памяти. Рекомендую:

        • linux-image-generic если у вас менее 3 ГБ оперативной памяти
        • linux-image-generic-pae если у вас 3 ГБ ОЗУ или больше.

        (Это как инсталлятор для Ubuntu выбирает который один для установки, с тех пор установщик получил возможность установить PAE ядра. См разрешение на эту ошибку . Если вы хотите узнать , что PAE это, см статью в Википедии . Если вы хотите узнайте о PAE в Ubuntu, см. эту вики-страницу Ubuntu .)

        Если вы не знаете, сколько у вас ОЗУ, выполните эту команду, чтобы узнать:

        grep MemTotal /proc/meminfo
        

        Это указано в килобайтах . Чтобы преобразовать в гигабайты , разделите на 1 048 576 (1024 2 ).

        • 3 гигабайта = 3 145 728 кБ
    • В Ubuntu выпускает прежде , чем 12.04, вероятно , возможности linux-image-generic, linux-image-generic-paeи linux-image-server.

      • Если вы работаете с системой Ubuntu Server, используйте linux-image-server.
      • В противном случае следуйте приведенным выше советам для систем 12.04.
  13. Это момент, которого вы так долго ждали! Установите ядро ​​в сломанной системе.

    (Как и раньше, за исключением случаев, когда явно указано иное, эти команды выполняются в chroot, а не в отдельном окне / вкладке терминала.)

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

    Замените linux-image-genericдругим пакетом ядра, который вы решили установить на шаге 12 выше, если он отличается.

  14. Если вам пришлось выполнить шаг 11 для настройки сети в chroot, восстановите старый hostsфайл. Если вы пропустили шаг 11, пропустите этот шаг тоже.

    Чтобы восстановить его, запустите эту команду:

    cp /etc/hosts.old /etc/hosts
    
  15. Размонтируйте файловые системы, exitвыполнив следующие действия chroot:

    umount /proc || umount -lf /proc
    umount /sys /dev/pts
    exit
    sudo umount /mnt/dev /mnt
    
  16. Выключите систему live CD / DVD / USB, извлеките live CD / DVD или флэш-накопитель USB. Загрузите систему, установленную на жестком диске, который вы только что отремонтировали. Вы установили в него пакет ядра (и в процессе установки его ядро ​​будет добавлено обратно в загрузочное меню GRUB2). Если все работает правильно, ваша система должна загрузиться без проблем. (Думаю, на этот раз загрузка может занять немного больше времени, чем обычно.)

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я не проверял вышеописанную процедуру на каждой возможной системе Ubuntu, поэтому возможно, что в ней есть ошибка, которую я не идентифицировал.

В будущем я рекомендую всегда пытаться сохранить два установленных ядра. Хорошо иметь два на случай, если один из них перестанет работать по любой причине (вы можете выбрать другой в меню загрузки GRUB2). Кроме того, если вы намереваетесь сохранить два ядра и случайно удалили еще одно ядро ​​и перезагрузиться, у вас все равно остается одно для загрузки.

Элия ​​Каган
источник
1
Это может быть лучшим письменным объяснением того, как сделать что-то сложное в Linux, которое я когда-либо читал. Спасибо
ZincX
Вау, это так супер-полезно! Огромное спасибо!
Rafał Cieślak
2
Большое спасибо, Элия, - тупо удалив все мои образы с Linux, ты спас мне бекон. Единственный сбой, который у меня был, был на шаге: sudo cp /etc/resolv.conf /mnt/etc/resolv.conf Я получил ошибку «cp: не писать через висячую символическую ссылку` /mnt/etc/resolv.conf '». Я нашел эту ветку и следовал инструкциям одного автора: «rm /mnt/etc/resolv.conf» перед «cp /etc/resolv.conf /mnt/etc/resolv.conf» для решения проблемы с символьными ссылками.
@ xcal400 в /etc/resolv.confнастоящее время управляется resolvconf, он будет автоматически генерироваться при использовании NetworkManager и может быть безопасно удален с помощью, rm /etc/resolv.confкак вы узнали.
Лекенштейн
3
Этот должен быть принятым ответом. Спасибо!
Жан-Мишель Гарсия
0

Когда я удалил свое ядро, я нашел это решение на форумах Ubuntu. Я следил за каждым шагом, и система была восстановлена. Надеюсь, это поможет вам.

Chroot может работать, chroot означает, что при запуске системы вы меняете корневую файловую систему. Например, вы начали с живого CD, но изменили корень "/" на тот, где установлена ​​ваша Ubuntu.

Допустим, ваша Ubuntu установлена ​​в / dev / sda2, тогда вы можете попробовать следующие команды:

Код:

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

теперь вы root "/" на / dev / sda2, попробуйте установить ядро

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

Я должен был сделать небольшую догадку здесь, так как я никогда не должен был делать это раньше, но это должно быть об этом. Не знаю, если вы получаете предупреждение об ошибке fstab (например, не могу найти root).

Теперь вам нужно почистить некоторые вещи и размонтировать смонтированные разделы: Код:

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

И вы можете перезагрузиться, чтобы увидеть, сработало ли это.

URL для ветки: http://art.ubuntuforums.org/showthread.php?t=1688928

Melvin
источник
Почему бы вы заменить /etc/hostsи удалить /sbin/initctl? Это там по причине.
Лекенштейн
Кажется, что это в конечном счете основано на LiveCDCustomization ; некоторые шаги не нужны для восстановления уже установленной системы. В частности, не нужно ничего делать с /sbin/initctlили dbus-uuidgenили dpkg-divert. Вы , возможно , потребуется заменить /etc/hostsдля подключения к Интернету, но обычно не, и если вы делаете, вы должны поставить исходное состояние . В установленной системе (а не на live CD, который загружается, а затем распаковывает файловую систему squashfs), вам не нужно запускаться update-initramfsили даже update-grubпосле установки ядра.
Элия ​​Каган
Кроме того, поскольку эта процедура не устанавливает метапакет ядра, ядро ​​может не обновляться должным образом позже, если только метапакет не установлен. Кроме того, linux-image-2.6.32-26-genericбольшинству людей не удастся установить ядро.
Элия ​​Каган
0

После того, как я вчера удалил старые ядра из Trusty14.04 (FTR: я не удалил два самых последних!), Моя система больше не загружалась. GRUB показал

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

Понятия не имею почему.

Затем я последовал прекрасным инструкциям Элии Каган по установке linux-image-genericс live CD. Было установлено 150 МБ нового ядра, но, к сожалению, это не решило проблему.

К счастью, я нашел эту страницу . Boot-RepairИнструмент получил это право, моя система работает снова.

leftaroundabout
источник
0

Я просто хотел добавить свой опыт, который я прошел сегодня в повышении до Вилли. Я немного прибрался, и я обнаружил, что у меня только один тест. Google привел меня к пониманию, что я удалил ядра. У меня было одно ограничение - медленная сеть, поэтому загрузка полного ISO не была вариантом. Поэтому я использовал Ubuntu Minimal CD (только 40 МБ) и загрузился на нем. После определения аппаратной опции (которая помогла мне подключиться к беспроводной сети) я перешел к опции оболочки. Я следовал инструкциям @Lekensteyn, и мне это удалось. Тем не менее, кое-что: вы должны скопировать, resolv.confпрежде чем переходить в chroot, иначе ваш DNS будет испорчен, и, поскольку вошедший в систему пользователь не нуждается ни в каком sudo, ни root.

Я знаю его старый, но я думал, что добавление этого ответа добавит ценность тем, кто столкнется с проблемой.

Стефано Мтангу
источник