Я использую Ubuntu 14.04 и всегда регулярно обновляюсь (почти каждый день). Сегодня, 8 июля, обновление Ubuntu повело себя не так, как обычно. Оно сказало: «Не все обновления могут быть установлены» и предложило «Частичное обновление». Никогда этого не пробовал, но я доверяю Ubuntu. Одной из вещей, которую я заметил в списке обновлений, был загрузчик GRUB, но, эй, я доверяю Ubuntu.
После завершения он попросил меня перезагрузиться, и когда я это сделал, он загрузился прямо в Windows. То есть GRUB фактически удален, и у меня нет выбора, хочу ли я загрузить Ubuntu сейчас. Я не акула ни в Linux, ни в Windows, но я чувствую себя гораздо более ущербным в Windows 8 (она просто была в комплекте).
Ubuntu все еще присутствует на ноутбуке? Если да, как мне вернуться к нему как можно скорее? (У меня презентация на выходных, а настройка новой системы и получение резервных копий данных занимает много времени).
Не удалось установить grub после ответа Кристиана Бенке
Сейчас я тестирую систему с помощью USB-накопителя Ubuntu.
ubuntu@ubuntu:~$ sudo parted -l
Model: ATA TOSHIBA THNSNJ25 (scsi)
Disk /dev/sda: 256GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Number Start End Size File system Name Flags
1 1049kB 1075MB 1074MB ntfs Basic data partition hidden, diag
2 1075MB 1180MB 105MB fat32 Basic data partition boot
3 1180MB 1314MB 134MB ntfs Basic data partition msftres
4 1314MB 44.7GB 43.4GB ntfs Basic data partition msftdata
6 44.7GB 46.7GB 2000MB linux-swap(v1)
7 46.7GB 244GB 197GB ext4
5 244GB 256GB 12.1GB ntfs Basic data partition hidden, diag
Быстрое выполнение команды «sudo mkdir /media/[mountpoint]» с последующим выполнением «sudo mount /dev/sda[X] /media/[mountpoint]» позволило проверить разделы:
/dev/sda1 Windows boot files
/dev/sda2 EFI files
/dev/sda3 Empty
/dev/sda4 Windows system
/dev/sda5 Toshiba recovery
/dev/sda6 Ubuntu swap partition (not mountable)
/dev/sda7 Ubuntu system
Очевидно, я хочу продолжить с /dev/sda7.
ubuntu@ubuntu:~$ sudo mkdir /media/oldroot
ubuntu@ubuntu:~$ sudo mount /dev/sda7 /media/oldroot
ubuntu@ubuntu:~$ sudo mount --bind /dev /media/oldroot/dev
ubuntu@ubuntu:~$ sudo mount --bind /proc /media/oldroot/proc
ubuntu@ubuntu:~$ sudo mount --bind /sys /media/oldroot/sys
ubuntu@ubuntu:~$ sudo chroot /media/oldroot /bin/sh
# lsb_release -d
Description: Ubuntu 14.04.2 LTS
# grub-install /dev/sda
Installing for x86_64-efi platform.
grub-install: error: cannot find EFI directory.
# exit
Очевидно, grub-install не нашел файлы EFI в /dev/sda2, но предварительное монтирование их в /media/oldroot/boot/efi, похоже, сработало нормально:
ubuntu@ubuntu:~$ sudo mount /dev/sda2 /media/oldroot/boot/efi
ubuntu@ubuntu:~$ sudo chroot /media/oldroot /bin/sh
# lsb_release -d
Description: Ubuntu 14.04.2 LTS
# grub-install /dev/sda
Installing for x86_64-efi platform.
Installation finished. No error reported.
# update-grub
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.16.0-43-generic
Found initrd image: /boot/initrd.img-3.16.0-43-generic
Found linux image: /boot/vmlinuz-3.16.0-41-generic
Found initrd image: /boot/initrd.img-3.16.0-41-generic
Found linux image: /boot/vmlinuz-3.16.0-40-generic
Found initrd image: /boot/initrd.img-3.16.0-40-generic
Found linux image: /boot/vmlinuz-3.16.0-39-generic
Found initrd image: /boot/initrd.img-3.16.0-39-generic
Found linux image: /boot/vmlinuz-3.16.0-38-generic
Found initrd image: /boot/initrd.img-3.16.0-38-generic
Found linux image: /boot/vmlinuz-3.16.0-37-generic
Found initrd image: /boot/initrd.img-3.16.0-37-generic
Found linux image: /boot/vmlinuz-3.16.0-36-generic
Found initrd image: /boot/initrd.img-3.16.0-36-generic
Found linux image: /boot/vmlinuz-3.16.0-34-generic
Found initrd image: /boot/initrd.img-3.16.0-34-generic
Found linux image: /boot/vmlinuz-3.16.0-33-generic
Found initrd image: /boot/initrd.img-3.16.0-33-generic
Adding boot menu entry for EFI firmware configuration
done
# exit
Однако это не решило проблему. После перезагрузки GRUB не появился и снова перешел прямо в Windows? Спасибо, в чем проблема на этот раз?
Не удалось переустановить затронутые пакеты
Как и предлагалось, я просматриваю файл apt/history.log, чтобы узнать, что произошло во время "частичного обновления", из-за которого GRUB перестал работать. К сожалению, в нем нет записи об обновлении от 8 июля:
ubuntu@ubuntu:~$ cat /media/summer7/var/log/apt/history.log
Start-Date: 2015-07-03 09:32:40
Commandline: aptdaemon role='role-commit-packages' sender=':1.79'
Upgrade: lightdm:amd64 (1.10.5-0ubuntu1, 1.10.5-0ubuntu1.1), liblightdm-gobject-1-0:amd64 (1.10.5-0ubuntu1, 1.10.5-0ubuntu1.1)
End-Date: 2015-07-03 09:32:42
Start-Date: 2015-07-05 20:02:01
Commandline: aptdaemon role='role-commit-packages' sender=':1.85'
Upgrade: libxcomp3:amd64 (3.5.0.31-0~605~ubuntu14.04.1, 3.5.0.32-0~668~ubuntu14.04.1), nxproxy:amd64 (3.5.0.31-0~605~ubuntu14.04.1, 3.5.0.32-0~668~ubuntu14.04.1), irqbalance:amd64 (1.0.6-2ubuntu0.14.04.1, 1.0.6-2ubuntu0.14.04.2)
End-Date: 2015-07-05 20:02:04
Start-Date: 2015-07-07 20:00:24
Commandline: aptdaemon role='role-commit-packages' sender=':1.81'
Install: linux-image-3.16.0-43-generic:amd64 (3.16.0-43.58~14.04.1), linux-headers-3.16.0-43:amd64 (3.16.0-43.58~14.04.1), linux-headers-3.16.0-43-generic:amd64 (3.16.0-43.58~14.04.1), linux-image-extra-3.16.0-43-generic:amd64 (3.16.0-43.58~14.04.1), linux-signed-image-3.16.0-43-generic:amd64 (3.16.0-43.58~14.04.1)
Upgrade: linux-signed-image-generic-lts-utopic:amd64 (3.16.0.41.33, 3.16.0.43.34), libfontembed1:amd64 (1.0.52-0ubuntu1.4, 1.0.52-0ubuntu1.5), linux-image-generic-lts-utopic:amd64 (3.16.0.41.33, 3.16.0.43.34), cups-browsed:amd64 (1.0.52-0ubuntu1.4, 1.0.52-0ubuntu1.5), linux-signed-generic-lts-utopic:amd64 (3.16.0.41.33, 3.16.0.43.34), cups-filters-core-drivers:amd64 (1.0.52-0ubuntu1.4, 1.0.52-0ubuntu1.5), cups-filters:amd64 (1.0.52-0ubuntu1.4, 1.0.52-0ubuntu1.5), libgtksourceview2.0-0:amd64 (2.10.5-1ubuntu2, 2.10.5-1ubuntu2.14.04.1), linux-generic-lts-utopic:amd64 (3.16.0.41.33, 3.16.0.43.34), linux-libc-dev:amd64 (3.13.0-55.94, 3.13.0-57.95), libgtksourceview2.0-common:amd64 (2.10.5-1ubuntu2, 2.10.5-1ubuntu2.14.04.1), linux-headers-generic-lts-utopic:amd64 (3.16.0.41.33, 3.16.0.43.34), libcupsfilters1:amd64 (1.0.52-0ubuntu1.4, 1.0.52-0ubuntu1.5)
End-Date: 2015-07-07 20:01:11
На самом деле, кажется, что он немного коротковат по длине, не так ли? Кроме того, последняя запись была сделана на 2 часа позже по сравнению с тем, когда файл был затронут в последний раз:
ubuntu@ubuntu:~$ ls -l /media/summer7/var/log/apt/history.log
-rw-r--r-- 1 root root 1925 Jul 7 18:01 /media/summer7/var/log/apt/history.log
Так может быть, мы имеем дело с повреждением файла? Ну ладно, я попробовал обновить apt-get, и это не сработало:
ubuntu@ubuntu:~$ sudo mount --bind /dev /media/oldroot/dev
ubuntu@ubuntu:~$ sudo mount --bind /proc /media/oldroot/proc
ubuntu@ubuntu:~$ sudo mount --bind /sys /media/oldroot/sys
ubuntu@ubuntu:~$ sudo chroot /media/oldroot apt-get update
Все не удалось загрузить с ошибкой «не удалось разрешить», похожей наэтот вопрос. Следующее не удается
ubuntu@ubuntu:~$ sudo chroot /media/oldroot ping dk.archive.ubuntu.com
ping: unknown host dk.archive.ubuntu.com
и файл /media/oldroot/etc/resolv.conf полностью пуст. Это плохой знак?
решение1
У меня была та же проблема в тот же день, что и у вас. Я работал над некоторыми вещами, Ubuntu предложил частичное обновление, я выполнил его, а затем провел большую часть вчерашнего дня, пытаясь переустановить grub (безрезультатно).
Моя установка была с двойной загрузкой с Windows 8.1, поэтому помимо разделов Windows у меня было три раздела Linux: один для системы ("/"), один для дома ("/home") и один для подкачки. Я не смог переустановить grub с помощью boot-repair, поэтому я загрузился с помощью флешки Ubuntu и запустил установщик.
Когда он спросил меня, что я хочу сделать, я выбрал что-то другое. Затем я установил свой исходный системный каталог "/" в качестве корневого раздела и сказал установщику отформатировать его, я установил swap как swap, а свой домашний каталог как "/home", но я сказал установщику не форматировать домашний каталог.
Я также сказал установщику установить загрузчик на диск (/dev/sda в моем случае), а не на раздел. Установка завершена, при перезагрузке появился grub, и я смог перезагрузиться в ubuntu и windows 8.1.
Мой домашний каталог был полностью цел, фон рабочего стола и .bashrc загружались автоматически, и как только я начинал переустанавливать программы, я автоматически входил обратно в TeamViewer, Chrome и т. д.
Если у вас есть отдельные разделы /home и system, это может быть лучшим решением. Никакой потери данных, и переустановка не займет много времени.
решение2
Вы можете использовать небольшую загрузочную live-систему, напримерГрмли командаchrootчтобы вернуться в старую систему и исправить сломанный загрузчик.
После загрузки с live-cd вы хотите получить доступ к файловой системе установленной Linux-системы. Поэтому первое, что вы делаете, это монтируете корневой раздел установленного Linux (как пользователь root в вашей среде live-cd):
# mkdir /media/oldroot
# mount /dev/sda1 /media/oldroot
Если вы не уверены, какой из разделов является вашим Linux-разделом, смонтируйте все доступные разделы и проверьте, какой из них является вашим корневым разделом.
Следующим шагом для получения функциональной chroot-среды является монтирование псевдофайловых систем (/dev,/проц,/сис) из среды live-cd внутри корневого раздела, который мы только что смонтировали:
# mount --bind /dev /media/oldroot/dev
# mount --bind /proc /media/oldroot/proc
# mount --bind /sys /media/oldroot/sys
Теперь наша система готова к chroot-изменению, что означает, что вы «замените» среду вашего live-cd установленной системой (мы также говорим ей использовать/bin/шв командной строке установленной среды:
# chroot /media/oldroot /bin/sh
#
Убедитесь, что вы используете старую установленную версию Linux:
# lsb_release -d
Description: Ubuntu 14.04.2 LTS
Из chroot попробуйте запустить
# grub-install /dev/sda
переустановить загрузчик grub в главной загрузочной записи жесткого диска.
Если grub2 действительно был удален и grub-install не существует, вы можете переустановить его, скопировав пакет grub2 на USB-накопитель:
Загрузите deb-файл с сайтаhttp://packages.ubuntu.com/trusty/grub2и скопируйте его на usb-флешку. Смонтируйте usb-флешку внутри вашего chroot (используйте Alt-F2, чтобы получить второй tty в среде live-cd для монтирования USB-флешки, затем переключитесь обратно в chroot-среду с помощью Alt-F1):
-- Press <Alt-F2> to get to the second tty of the live-cd-env
# mkdir /media/oldroot/media/<yourusername>/usb_stick
# mount /dev/sdb1 /media/oldroot/media/<youruser>/usb_stick
-- Press <Alt-F1> to get back to the first tty to our chroot
# cd /media/<yourusername>/usb_stick
# ls
dpkg -i grub2_2.02~beta2-9_amd64.de
# dpkg -i grub2_2.02~beta2-9_amd64.deb
После этого продолжайте сgrub-установить.