У меня есть машина, которая использовалась для двойной загрузки Ubuntu (16.04 в настоящее время) и Windows 7 с GRUB Ubuntu в качестве загрузчика.
Теперь я просто добавил Arch Linux в качестве третьей ОС, следуя официальным инструкциям по установке. Я не установил GRUB из Arch, потому что хотел использовать тот, который контролируется Ubuntu. Инструкции содержали команду, mkinitcpio -p linux
которая, вероятно, генерировала некоторые загрузочные файлы, которые я запустил, как описано.
Теперь, когда я пытаюсь загрузить Ubuntu из GRUB через запись по умолчанию, я получаю эту неприятную ошибку (извините за фотографию на экране):
Как uname -a
показывает вывод , он пытается загрузить ядро Arch, но /dev/sda6
это корневой раздел Ubuntu.
Я должен перейти Advanced options for Ubuntu
и выбрать одну из Ubuntu, with Linux 4.4.0-*
записей, чтобы иметь возможность загрузить Ubuntu, но я не смог найти запись, которая бы правильно загружала Arch.
Запуск sudo update-grub
из Ubuntu ( « update-grub
заглушка для запуска grub-mkconfig -o /boot/grub/grub.cfg
для создания файла конфигурации grub2.» ) Ничего не меняет. grub-customizer
Инструмент был также бесполезен в фиксации этого до сих пор.
Что вызывает эту путаницу с GRUB и как я могу это исправить, чтобы каждая версия Linux загружалась с правильным ядром и с правильного раздела?
Похоже, я тупо установил Arch с Ubuntu / boot, поэтому он, вероятно, поместил туда свои загрузочные файлы.
Я в порядке, стирая все связанные с Arch вещи, чтобы снова получить загрузчик Ubuntu и выполнить чистую установку Arch позже.
Обновления (спасибо @terdon за поддержку в чате Ask Ubuntu):
Вот мой /boot/grub/grub.cfg
.
Кажется, что все записи Linux указывают на мой раздел / dev / sda6, который является корнем Ubuntu:
$ grep ' linux /' /boot/grub/grub.cfg
linux /vmlinuz-linux root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro
linux /vmlinuz-linux root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro
linux /vmlinuz-linux root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro
linux /vmlinuz-linux root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro init=/sbin/upstart
linux /vmlinuz-linux root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro recovery nomodeset
linux /vmlinuz-4.4.0-21-generic root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro
linux /vmlinuz-4.4.0-21-generic root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro init=/sbin/upstart
linux /vmlinuz-4.4.0-21-generic root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro recovery nomodeset
linux /vmlinuz-4.2.0-35-generic root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro
linux /vmlinuz-4.2.0-35-generic root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro init=/sbin/upstart
linux /vmlinuz-4.2.0-35-generic root=UUID=eee18451-b607-4875-8a88-c9cb6c6544c8 ro recovery nomodeset
Я попытался обновить конфигурацию GRUB из Ubuntu:
$ sudo grub-mkconfig -o /boot/grub/grub.cfg
Generating grub configuration file ...
dpkg: warning: version 'linux' has bad syntax: version number does not start with a digit
Found linux image: /boot/vmlinuz-linux
Found initrd image: /boot/initramfs-linux.img
Found linux image: /boot/vmlinuz-4.4.0-21-generic
Found initrd image: /boot/initrd.img-4.4.0-21-generic
Found linux image: /boot/vmlinuz-4.2.0-35-generic
Found initrd image: /boot/initrd.img-4.2.0-35-generic
Found memtest86+ image: /memtest86+.elf
Found memtest86+ image: /memtest86+.bin
Found Windows 7 (loader) on /dev/sda1
Found Arch on /dev/sda8
done
Я попытался переустановить GRUB в MBR из Ubuntu:
$ sudo grub-install /dev/sda
Installing for i386-pc platform.
Installation finished. No error reported.
$ sudo grub-install --recheck /dev/sda
Installing for i386-pc platform.
Installation finished. No error reported.
Кстати, это установленные пакеты ядра Ubuntu, я попробовал dpkg-reconfigure
все из них, но без какого-либо влияния на проблему:
$ dpkg -l linux-image* | grep ^ii
ii linux-image-4.2.0-35-generic 4.2.0-35.40 amd64 Linux kernel image for version 4.2.0 on 64 bit x86 SMP
ii linux-image-4.4.0-21-generic 4.4.0-21.37 amd64 Linux kernel image for version 4.4.0 on 64 bit x86 SMP
ii linux-image-extra-4.2.0-35-generic 4.2.0-35.40 amd64 Linux kernel extra modules for version 4.2.0 on 64 bit x86 SMP
ii linux-image-extra-4.4.0-21-generic 4.4.0-21.37 amd64 Linux kernel extra modules for version 4.4.0 on 64 bit x86 SMP
Я также пытался восстановить Ubuntu initramfs:
$ sudo update-initramfs -u -k all
update-initramfs: Generating /boot/initrd.img-4.4.0-21-generic
update-initramfs: Generating /boot/initrd.img-4.2.0-35-generic
Разметка моего раздела:
Проверено из системы Ubuntu. Этикетки должны объясняться.
$ lsblk -f /dev/sda
NAME FSTYPE LABEL UUID MOUNTPOINT
sda
├─sda1 ntfs win7-boot 90DCF3A5DCF3842E /win/boot
├─sda2 ntfs windows7 482C7A572C7A3FCC /win/c
├─sda3 ext4 grub-boot 6dbb8633-dadd-4b5e-8d85-b0895fde9dfb /boot
├─sda5 ext4 images 81dc42c4-a161-4ccd-b704-6e5c09298943 /images
├─sda6 ext4 ubuntu-1604 eee18451-b607-4875-8a88-c9cb6c6544c8 /
├─sda7 ext4 ubuntu-home 485b3ef1-7216-4053-b25c-f656d529e8e6 /home
├─sda8 ext4 arch-root 8d281a0c-969c-44cf-ba6a-1d3c7b4be7ec
├─sda9 ext4 arch-home 32522902-a53d-44c8-90f2-6bbf14c40f1f
└─sda10 swap linux-swap 8b05bd9b-bc42-46f6-8c18-50711a3c48b9 [SWAP]
Моя структура меню GRUB:
Дополнительные параметры для Ubuntu:
Дополнительные параметры для Arch:
Мой /boot
каталог:
$ ls -la /boot
total 118480
drwxr-xr-x 4 root root 4096 Apr 24 20:50 .
drwxr-xr-x 28 root root 4096 Apr 24 19:44 ..
-rw-r--r-- 1 root root 1313029 Mär 16 01:45 abi-4.2.0-35-generic
-rw-r--r-- 1 root root 1239577 Apr 19 00:21 abi-4.4.0-21-generic
-rw-r--r-- 1 root root 184888 Mär 16 01:45 config-4.2.0-35-generic
-rw-r--r-- 1 root root 189412 Apr 19 00:21 config-4.4.0-21-generic
drwxr-xr-x 6 root root 4096 Apr 26 19:58 grub
-rw-r--r-- 1 root root 18598360 Apr 24 20:59 initramfs-linux-fallback.img
-rw-r--r-- 1 root root 3516429 Apr 24 20:59 initramfs-linux.img
-rw-r--r-- 1 root root 33642388 Apr 24 18:31 initrd.img-4.2.0-35-generic
-rw-r--r-- 1 root root 36143341 Apr 24 19:51 initrd.img-4.4.0-21-generic
drwx------ 2 root root 16384 Okt 28 17:43 lost+found
-rw-r--r-- 1 root root 182704 Jan 28 13:44 memtest86+.bin
-rw-r--r-- 1 root root 184380 Jan 28 13:44 memtest86+.elf
-rw-r--r-- 1 root root 184840 Jan 28 13:44 memtest86+_multiboot.bin
-rw------- 1 root root 3745312 Mär 16 01:45 System.map-4.2.0-35-generic
-rw------- 1 root root 3853719 Apr 19 00:21 System.map-4.4.0-21-generic
-rw------- 1 root root 6829104 Mär 16 01:45 vmlinuz-4.2.0-35-generic
-rw------- 1 root root 7013968 Apr 19 00:21 vmlinuz-4.4.0-21-generic
-rw-r--r-- 1 root root 4435552 Apr 14 19:20 vmlinuz-linux
Ядра 4.4.0 и 4.2.0 должны быть Ubuntu, Arch должен иметь ядро 4.5.0. А как узнать какой файл без версии ядра в названии к какому принадлежит?
Мой корневой каталог Ubuntu (кроме каталогов):
$ ls -la / | grep ^[^d]
total 124
lrwxrwxrwx 1 root root 32 Apr 24 19:44 initrd.img -> boot/initrd.img-4.4.0-21-generic
lrwxrwxrwx 1 root root 32 Apr 5 17:45 initrd.img.old -> boot/initrd.img-4.2.0-35-generic
lrwxrwxrwx 1 root root 29 Apr 24 19:44 vmlinuz -> boot/vmlinuz-4.4.0-21-generic
lrwxrwxrwx 1 root root 29 Apr 5 17:45 vmlinuz.old -> boot/vmlinuz-4.2.0-35-generic
Мой корневой каталог Arch не содержит никаких файлов или ссылок.
os-prober
. затем запустите ихsudo mkinitcpio -p linux
потом,sudo grub-mkconfig -o /boot/grub/grub.cfg
наконец,sudo grub-install /dev/sda
Root device mounted successfully, but /sbin/init does not exists
. Вы исследовали это? Является ли наinit
самом деле не хватает? Если это так, вы должны обязательно установить его, если он присутствует, есть идеи, почему его нельзя найти?Ответы:
В конце концов я решил это, сбросив раздел Arch и загрузочные файлы в каталоге моего Ubuntu
/boot
с орбиты. Ubuntu снова в порядке, все остальные записи GRUB снова работают.Вот список того, что я сделал:
Удалить
initramfs
файлы Arch :Удалить
vmlinuz
файл Arch :Отформатируйте раздел Arch (
/dev/sda8
) с помощью GPartedОбновите конфигурацию GRUB:
Перезагрузитесь и наслаждайтесь!
источник
initramfs-linux
не...ranfs...
Исправление grub.cfg вручную (не рекомендуется)
Глядя на ваш
grub.cfg
запись в Ubuntu не работает (и некоторые из следующих тоже)
Последние две строки - ваша команда grub для загрузки ядра и initrd, и в настоящее время они ищут ядро ARCH и initiramfs. Кроме того, он ищет их
/
в разделе, указанном в,uuid=eee18451-b607-4875-8a88-c9cb6c6544c8
который может содержать или не содержать нужные файлы Ubuntu.Вы можете это исправить:
чтобы получить UUID вашего корневого раздела Ubuntu.
Затем замените последние две строки символьной ссылкой на ваше последнее ядро и образы initrd (так как Ubuntu ожидает от этого)
Если это не исправит это сразу, может потребоваться другое исправление. Вы можете найти их, "скопировав" одну из протестированных и рабочих записей, и я рекомендую вам использовать наиболее ванильную (например, не использовать upstart или другой параметр ядра, такой как передаваемый nomodeset).
Это должен быть хороший кандидат:
Запись Arch аналогичным образом нарушена, поскольку она, вероятно, ищет Arch-initramfs и ядро в корневом разделе Ubuntu. Расположение по умолчанию находится в / boot. Откорректируйте последние две строки записи Arch, исправив местоположение и проверив, что корневой раздел uuid содержит тот, в котором находится корень Arch.
(Несколько) слово (а) предупреждения:
В общем, пользователям Ubuntu НЕ рекомендуется возиться с
grub.cfg
руками. Определенно сделайте копию этого и будьте осторожны в его редактировании. Будьте готовы к тому, что ваша система не загрузится (но вы сможете воскресить ее, используя процедуру загрузки, описанную в моем предыдущем ответе).Кроме того, хотя в этот раз это может решить вашу проблему, в следующий раз вы можете снова укусить вас, когда вам снова придется заполнить меню grub. По какой-то причине проверка ОС grub в Ubuntu смущает присутствие ядра Arch в / boot. Я полагаю, что такая утилита, как boot-repair, сможет правильно сделать все ваши дистрибутивы загрузочными, но если я правильно помню, она не сработала для вас.
Одно постоянное исправление может заключаться в установке ядра архива и образов в другой каталог, чем каталог по умолчанию / boot. Это неудобно, и вы должны проконсультироваться с grub-записью Arch wiki о том, как это сделать правильно.
СТАРЫЙ ОТВЕТ (рекомендуется, если вы планируете переходить на Arch в долгосрочной перспективе). Вот что я бы сделал, и каким-то образом сделал несколько месяцев назад.
Перейдите на страницу arch wiki grub и прочитайте соответствующий раздел для вашей таблицы разделов (вы, вероятно, UEFI, так что читайте о ESP и так далее).
Загрузка в Arch вручную
Это очень полезный опыт, который я рекомендую попробовать. Предполагая, что ваше ядро Arch Linux находится где-то на вашем диске, нажмите
c
на приглашение grub и введите ls, чтобы увидеть список устройств и разделов, похожих на(hd0,msdos1),(hd1,gpt1),...
. Вы можете просмотреть каждое из них.Вам нужно выяснить три вещи:
/
корневой раздел Archvmlinuz
intiramfs-linux.img
получив эти три, вы запустите три команды в grub> prompt что-то похожее на это.
Обратите внимание, что личинка может найти, например,
(один grub не может найти автоматически и вызывает панику ядра;))
Все это я узнал здесь , источник, который я очень рекомендую. Если вам удастся, перейдите к исправлению grub! В противном случае...
Загрузочная арка с живого ключа! Получите живую среду Arch и следуйте вики-установке
chroot
по Arch точно так же, как в первый раз.Исправление личинки
Внутри Arch установите соответствующие пакеты grub и, в частности,
os-prober
разрешитеgrub-install
обнаруживать вашу другую систему. Внимательно следуйте инструкции по установке, и вы сможете (как минимум) загрузить как arch, так и ubuntu из меню grub. Установка команд в конечном итоге будет выглядеть следующим образом.** Предупреждение ** Не запускайте эти команды, они приведены в качестве примера, вам нужно выработать те, которые подходят для вашей системы
** Если все остальное не удается **
К сожалению, это настолько специфично, насколько это возможно, учитывая ограниченное количество информации, и SE на самом деле не является форумом для таких вопросов, поэтому мой «общий» ответ относится к полезным ресурсам.
Если вы не можете понять это, возможно, загляните на форумы Arch, и, если вы приложили все усилия и прочитали документы заранее, вы можете найти помощь.
Выполнение всего этого через Arch стало для меня фундаментальным опытом обучения.
источник
Мое решение проще. Я использую терминал и делаю следующее:
Если у вас возникли дополнительные проблемы, просто используйте
boot-repair
бесплатную загрузку, достаточно маленькую для записи на CD-диск.источник
update-grub
. Ремонт ботинок вряд ли поможет с этой конкретной проблемой.sudo grub-mkconfig -o /boot/grub/grub.cfg
он прямо здесь.update-grub
это очень простой скрипт , который работаетgrub-mkconfig -o /boot/grub/grub.cfg
. Вы можете увидеть это сcat /usr/sbin/update-grub
.