Я пытался удалить старые ядра, но я, должно быть, удалил все ядра на своем ноутбуке Ubuntu 11.04. Есть ли способ исправить это через загрузочный USB-накопитель или смонтировать жесткий диск в другой системе?
Загрузитесь на live CD (или live USB), смонтируйте некоторые системы, запустите chroot в него и установите ядро. После успешной установки ядра размонтируйте файловые системы.
монтирование садо /dev/sdXY /mnt
монтирование специальных разделов:
монтирование садо --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
(необязательно) Когда вы подключены к сети, используйте DNS-серверы из вашего окружения Live (иначе имена хостов могут быть не разрешены):
cp /etc/resolv.conf /mnt/etc/resolv.conf
/mnt
: sudo chroot /mnt
apt-get install linux-image-generic
(sudo не требуется, т.к. вы root после chroot)После успешной установки ядра, выйдите из chroot и размонтируйте некоторые файловые системы:
exit
судо-маунт / мнт/сис
sudo umount /mnt/proc
судо-маунт / мнт/дев
судо-гора
sudo reboot
Эта расширенная процедура учитывает большинство сложностей, которые могут возникнуть, в том числе проблемы с подключением к Интернету в chroot
, не зная, какой пакет ядра установить (до Ubuntu 12. 10, это не всегда будет linux-image-generic
), не зная с самого начала, какой раздел или даже какой физический диск содержит файловую систему /
, и имея отдельный /boot
раздел.
Я не писал этого со ссылкой ни на одну из других процедур здесь, хотя вы заметите некоторое сходство. Я взял за основу процедуру здесь (хотя эти инструкции предназначены для чего-то совершенно другого, я их широко адаптировал, и копируются только некоторые команды, а не проза).
Вы удалили все пакеты с ядром, и Ubuntu не может загружаться без установленного ядра. Таким образом, решение заключается в загрузке с живого CD/DVD/USB, chroot
в установленную систему и установке в нее ядра.
Загрузка с живого CD/DVD Ubuntu или живой USB флешки.
Выберите Попробуйте Ubuntu (а не Установите Ubuntu).
Когда появится рабочий стол, убедитесь, что вы подключены к Интернету. Если это не так, подключитесь к Интернету. Один из способов убедиться в том, что вы подключены к Интернету - это открыть веб-браузер. Вы даже можете следовать остальным инструкциям, поднеся этот ответ Ask Ubuntu вверх в вашем веб-браузере, в системе live CD/DVD/USB. Я настоятельно рекомендую это сделать.
Откройте окно терминала с помощью Ctrl+Alt+T.
В окне терминала выполните эту команду, чтобы перечислить свои разделы:
sudo parted -l
Вы увидите нечто подобное (но это не будет точно так):
Модель: VMware, VMware Virtual S (scsi)
Диск /dev/sda: 21,5 Гб
Размер сектора (логический/физический): 512B/512B
Таблица разделов: мсдос
Количество Начало Размер конца Тип Файловая система Флаги
1 1049kB 20.4GB 20.4GB первичная загрузка ext4
2 20,4 ГБ 21,5 ГБ 1072 МБ расширены
5 20.4 ГБ 21.5 ГБ 1072 МБ логический линукс-своп(v1)
Внимание: Невозможно открыть /dev/sr0 read-write (файловая система только для чтения). /dev/sr0
был открыт только для чтения.
Ошибка: Не может быть раздела за пределами диска!
Изучите полученный результат, чтобы определить имя устройства раздела, содержащего /
файловую систему системы Ubuntu, установленной на жестком диске (который вы ремонтируете).
Если у вас только один ext4
раздел, то, скорее всего, это один.
Если у вас более одного ext4
раздела, то, скорее всего, это первый раздел. Однако, если первый раздел меньше гигабайта, то это может быть отдельный раздел /boot
(запомните и этот раздел).
Обратите внимание, что независимо от того, находится ли boot
в разделе Flags
, он имеет мало общего с тем, является ли раздел отдельным разделом /boot
или нет. Моя система, информация о которой приведена выше, не имеет /boot отдельного раздела /boot
.
Имя устройства для раздела начинается с имени устройства для физического диска, которое указано непосредственно после Disk
во второй строке. Затем просто добавьте номер раздела в конец. Таким образом, имя устройства для раздела, содержащего файловую систему my /
, будет /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
, запомните имя устройства и для этого. )
Установите файловую систему /
на /mnt
и смонтируйте его файловую систему /dev
:
sudo mount /dev/sda1 /mnt
sudo mount --bind /dev /mnt/dev
Проверьте, не имеет ли восстанавливаемая система Ubuntu отдельный раздел /boot
, который должен быть смонтирован отдельно. (Если вы уверены, то можете пропустить это.)
Чтобы проверить, запустите:
ls /mnt/boot
Если есть вывод (например, grub memtest86+.bin memtest86+_multiboot.bin
, но не обязательно), то сломанная система /boot
находится на том же разделе, что и ее /
, и вам не нужно ничего монтировать, чтобы получить к ней доступ.
Но если нет выхода, то вам нужно будет смонтировать файловую систему /boot
:
sudo mount BOOT-PARTITION /mnt/boot
Замените BOOT-PARTITION
на имя устройства раздела /boot
(смотрите шаг 6 выше).
chroot
в сломанную систему, смонтируйте оставшиеся важные виртуальные файловые системы и установите некоторые важные переменные окружения:
sudo chroot /mnt
гора -t proc none /proc
mount -t sysfs none /sys
mount -t devpts none /dev/pts
экспорт HOME=/корень
экспорт LC_ALL=C
Определите, работает ли доступ в Интернет из chroot
с помощью ping
на каком-нибудь надежном хосте, который, как известно, нормально реагирует на пинг:
ping -c 5 www.google.com.
Вы должны увидеть нечто подобное:
PING www.l.google.com (74.125.131.147) 56(84) байт данных.
64 байта из vc-in-f147.1e100.net (74.125.131.147): icmp_req=1 ttl=44 время=61.3 ms
64 байта из vc-in-f147.1e100.net (74.125.131.147): icmp_req=2 ttl=44 время=62.3 мс
64 байта из vc-in-f147.1e100.net (74.125.131.147): icmp_req=3 ttl=44 время=61.8 ms
64 байта из vc-in-f147.1e100.net (74.125.131.147): icmp_req=4 ttl=44 время=63.8 ms
64 байта из vc-in-f147.1e100.net (74.125.131.147): icmp_req=5 ttl=44 время=66.6 ms
--- www.l.google.com пинг-статистика ---
5 переданных пакетов, 5 полученных, 0% потеря пакетов, время 4006мс
rtt мин/авг/макс/мдев = 61,367/63.212/66.608/1,897 мс
Если это выглядит в основном так, и число до % потери пакетов
меньше 100, то Интернет-соединение в chroot
работает:
5 пакетов передано, 5 получено, 0% потери пакетов , время 4006ms
Работает, так что вы можете пропустить шаг 11.
Если это выглядит в основном так, и число до % потери пакетов
равно 100, то соединение нуждается в поиске и устранении неисправностей. Убедитесь, что соединение на живой CD-системе (например, через веб-браузер или запустив ту же команду в отдельном, неchroot
ed Terminal tab/window) работает. Убедитесь, что вы набираете команду правильно. Используйте www.google.com
, если вы этого не делали.
Если вывод выглядит совсем не так, как описано выше, а вместо этого говорит ping: неизвестный хост www.google.com
, то сеть еще не работает в chroot chroot
.
Настройте сеть в chroot chroot
. Пропустите этот шаг, если на шаге 10 выше не обнаружена ошибка неизвестного хоста
.
Для настройки сети создайте резервную копию файла хостов
поврежденной системы и скопируйте ее в файлы хостов
и resolv.conf
системы компакт-дисков с живыми файлами. (Резервное копирование версии resolv.conf
поврежденной системы не требуется, так как этот файл автоматически регенерируется "на лету". )
Откройте новую вкладку Terminal tab (Ctrl+Shift+T) или, если хотите, a новое окно терминала (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
в конце закрывает новую закладку/окон.)
Повторите шаг 10 выше, чтобы убедиться, что доступ в Интернет теперь работает изнутри chroot
. Это должно.
Выяснить, какой пакет ядра должен быть установлен. Обычно это будет linux-image-generic
. Но не всегда.
Если вы не уверены, какой из пакетов установить, это будет зависеть от того, какой релиз Ubuntu вы установили, и отчасти от другой информации. Если вы не уверены в том, какой релиз Ubuntu вы установили, выясните это, запустив эту команду (в chroot
, not в отдельном окне/табе терминала):
lsb_release -r
На Ubuntu 12.10 (следующий релиз Ubuntu, в настоящее время в разработке), он всегда будет линукс-изображение-генерический
. (См. этот, этот, и этот.)
На LTS 12.04 Ubuntu, вероятными возможностями являются linux-image-generic
и linux-image-generic-pae
. (В отличие от предыдущих версий, 12.04 больше не имеет отдельных серверных и настольных ядер.)
Если установленная система Ubuntu (которую вы исправляете) является 64-битной версией, используйте linux-image-generic
. (linux-image-generic-pae
применимо только к 32-битным системам.)
Возможно установить 32-битную систему Ubuntu на 32-битный или 64-битный компьютер. Более того, для исправления 32-битной установленной системы можно использовать 32-битный или 64-битный live CD. Поэтому, если вы не знаете, является ли установленная система Ubuntu 32-битной или 64-битной, проверьте, выполнив данную команду (в chroot
, not в отдельном терминальном окне/табе):
dpkg-архитектура -qDEB_HOST_ARCH_BITS
Выход будет либо 32
, либо 64
.
(Пожалуйста, обратите внимание, что uname -m
is not is a correct way to find this information, because even when run in the chroot
, that will tell you the architecture of the running kernel, which is the live CD system's kernel, а не the installed (broken) system's kernel. )
Если установленная система Ubuntu (которую вы исправляете) является 32-битной версией, то лучшее ядро для использования будет зависеть от того, какой объем оперативной памяти у вас есть. Я рекомендую:
linux-image-generic
если у вас менее 3 Гб оперативной памятиlinux-image-generic-pae
если у вас 3 Гб оперативной памяти и более.(Так программа установки Ubuntu выбирает, какую из них установить, с тех пор как программа установки получила возможность устанавливать PAE ядра. Смотрите разрешение к этой ошибке . Если вы хотите узнать, что такое PAE, смотрите эту статью в Википедии. Если вы хотите узнать о PAE в Ubuntu, см. эту вики-страницу Ubuntu.)
Если вы не знаете, какой объем оперативной памяти у вас есть, запустите эту команду, чтобы узнать:
grep MemTotal /proc/meminfo
Это указано в килобайтах . Для преобразования в гигабайт разделите на 1 048 576 (10242).
О выпуске Ubuntu до 12. 04, вероятными возможностями являются линукс-изображение-генерическое
, линукс-изображение-генерическое-паэ
и линукс-изображение-сервер
.
linux-image-сервер
.Это тот момент, которого вы ждали! Установите ядро в сломанную систему.
(Как и раньше, если не указано иначе, эти команды выполняются в chroot
, а не в отдельном терминальном окне/табе)
apt-get update
apt-get -y установите linux-image-generic
Замените linux-image-generic
любым другим пакетом ядра, который вы решили установить на шаге 12 выше, если он отличается.
Если вам нужно было выполнить шаг 11 для настройки сети в chroot chroot
, восстановите старый файл hosts
. Если вы пропустили шаг 11, пропустите и этот шаг.
Чтобы восстановить его, выполните следующую команду:
cp /etc/hosts.old /etc/hosts.
Размонтировать файловые системы, выйти
из chroot
:
umount /proc || umount -lf /proc
гора /sys /dev/pts
выход
sudo umount /mnt/dev /mnt
Выключите систему live CD/DVD/USB, извлеките из нее live CD/DVD или USB-накопитель. Загрузитесь в систему, установленную на только что отремонтированном жестком диске. Вы установили в него пакет с ядром (и в рамках установки ядро, которое он предоставляет, будет добавлено обратно в загрузочное меню GRUB2). Если все работает правильно, то ваша система должна загружаться без проблем. (Думаю, на этот раз загрузка займет немного больше времени, чем обычно.)
DISCLAIMER: Я не тестировал вышеописанную процедуру на всех возможных Ubuntu системах, так что, возможно, в ней есть ошибка, которую я не обнаружил.
В дальнейшем я рекомендую всегда стараться, чтобы два ядра оставались установленными. Хорошо иметь два, если одно из них по какой-то причине перестанет работать (другое можно выбрать в загрузочном меню GRUB2). Плюс, если вы собираетесь сохранить два ядра и случайно удалите на одно больше, чем планировалось, и перезагрузитесь, у вас все равно останется одно для загрузки.
Когда я удалил свое ядро, я нашел это решение на форумах 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
Теперь Вы корневой "/" в /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
После того, как вчера я удалил старые ядра из Trusty14.04 (FTR: я не удалил два самых последних!) Моя система больше не загружалась. GRUB показал
Error: File not found
Error: You need to load the kernel first
Не знаю почему.
Затем я последовал отличным инструкциям Элиа Кагана , чтобы установить linux-image-generic
с live CD. Было установлено 150 МБ нового ядра, но, к сожалению, это не решило проблему.
К счастью, я нашел эту страницу . Инструмент Boot-Repair
все исправил, моя система снова работает.
. Я просто хотел добавить свой опыт, который я получил сегодня при обновлении до Willy. Я немного прибрался и обнаружил, что у меня только memtest. Google привел меня к выводу, что я удалил ядра. У меня было одно ограничение - медленная сеть, поэтому загрузка полного ISO не была вариантом. Поэтому я использовал Минимальный компакт-диск Ubuntu (только 40 МБ) и загрузился с него. После обнаружения аппаратной опции (которая помогла мне подключиться к беспроводной сети) я перешел к опции оболочки. Я выполнил инструкции @Lekensteyn, и мне это удалось. Однако кое-что: вы должны скопировать resolv.conf
перед тем, как переходить к chroot, иначе ваш DNS будет испорчен, и, поскольку зарегистрированный пользователь не нуждается в sudo нигде.
Я знаю, что это старый, но я думал, что добавление этого ответа повысит ценность тех, кто столкнется с проблемой.