Загрузите загрузку grub2 32 и 64 бит Ubuntu

Я только что установил такую ​​систему:

ubuntu@ubuntu:~$ ls -l /dev/disk/by-label/
total 0
lrwxrwxrwx 1 root root 10 2012-01-22 18:49 Boot -> ../../sda1
lrwxrwxrwx 1 root root 10 2012-01-22 18:49 ubuntu32 -> ../../sda2
lrwxrwxrwx 1 root root 10 2012-01-22 18:28 ubuntu64 -> ../../sda3
lrwxrwxrwx 1 root root 10 2012-01-22 18:49 Home -> ../../sda5

ubuntu@ubuntu:~$ ls -l /dev/disk/by-uuid/
total 0
lrwxrwxrwx 1 root root 10 2012-01-22 20:55 3582d70f-f4a5-484c-b14c-45cd740346b9 -> ../../sda1
lrwxrwxrwx 1 root root 10 2012-01-22 20:55 741182a8-3f15-4dfd-994d-654c8a57a9e4 -> ../../sda2
lrwxrwxrwx 1 root root 10 2012-01-22 20:55 1c415472-a770-4d76-be9f-27b8c1408e2a -> ../../sda3
lrwxrwxrwx 1 root root 10 2012-01-22 20:55 3515d523-72a2-4e04-b7da-cb6a1fd572ef -> ../../sda5
lrwxrwxrwx 1 root root 10 2012-01-22 20:55 f1f1cd7e-30cb-44e7-9ef6-986a589e0045 -> ../../sda6

Мне нужно разделить 32 и 64 бит, чтобы я мог тестировать производительность драйвера на каждом из них, домашний каталог является общим и каждая версия ubuntu монтируется как / ubuntuXX в другой версии. / boot также указывает на / dev / sda1 на обоих.

Когда я запускаю sudo update-grub из ubuntu32, он работает нормально, но я получаю ошибку при загрузке ubuntu64. init терпит неудачу, и я предполагаю, что это из-за неправильного типа бит. Не следует ли распознавать системный зонд Grub? Как я могу заставить эти два правильно загрузиться.


Я запустил grub-customizer с живого диска, выбрал / dev / sda3 как root, выбрал все разделы на втором этапе, а затем удалил все за исключением OS-Prober и memtest. В результате приложен grub.cfg. Теперь он отображает / dev / sda2 как единственный вариант ОС. Grub.cfg имеет корневой UUID, установленный для каждой записи. /

grub.cfg: http://pastebin.com/Dkdxian4 fstab (оба): http://pastebin.com/3sUabYRY

Я знаю, что grub2 все автогенерируется, а меню и джаз, но как я просто уничтожу все это и вручную добавляет entires (я не сохраняя эту установку долго, поэтому нет никаких проблем с обновлениями ядра).


Я сделал снимок, дважды реплицируя запись /dev/sda2, но настроив его на /dev/sda3, однако это не пошло хорошо. Тем не менее, мне удалось получить ту же ошибку, что и моя первая попытка (это строка прямо перед паникой ядра, run-init)

обновлена ​​часть grub.cfg: http: // pastebin .com / DvfBhrBF

(null)
Begin: Running /scripts/local-bottom ... done.
done.
Begin: Running /scripts/init-bottom: ... done.
[    3.402989] request_module: runaway loop modprobe binfmt-464c
run-init: /sbin/init: Exec format error
[    3.406303] Kernel panic - not syncing: Attempted to kill init!
[    3.406394] Pid: 1, comm: run-init Not tainted 3.0.0-15-generic #25-Ubuntu
[    3.408290] [] ? printk+0x2d/0x2f
[    3.408338] [] panic+0x5c/0x151
[    3.408388] [] forget_original_parent+0x1e4/0x1f0
[    3.408440] [] ? perf_cgroup_attach_task+0x20/0x20
[    3.408489] [] exit_notify+0x13/0x140
[    3.408536] [] do_exit+0x1ad/0x3a8
[    3.408585] [] ? tty_write+0x228/0x228
[    3.408632] [] sys_exit+0x18/0x28
[    3.408680] [] syscall_call+0x7/0xb

Я начинаю думать, что это связано с изображениями ядра, которые находятся в каталоге / boot.


Хорошо, теперь я уверен, что это связано с тем, что один раздел 32-битный, а один - 64-битный.

Рисунок 1: exert from /boot/grub/grub.cfg:

linux /vmlinuz-3.0.0-12-generic root=/dev/sda2
initrd /initrd.img-3.0.0-12-generic

Рисунок 2: Списки / ubuntu64 / vm * и / ubuntu32 / vm *

me@GAMMA:~$ ls -l /vm*
lrwxrwxrwx 1 root root 29 2012-01-23 20:41 /vmlinuz -> boot/vmlinuz-3.0.0-15-generic
lrwxrwxrwx 1 root root 29 2012-01-22 13:05 /vmlinuz.old -> boot/vmlinuz-3.0.0-12-generic
me@GAMMA:~$ ls -l /ubuntu32/vm*
lrwxrwxrwx 1 root root 29 2012-01-22 12:41 /ubuntu32/vmlinuz -> boot/vmlinuz-3.0.0-15-generic
lrwxrwxrwx 1 root root 29 2012-01-22 12:22 /ubuntu32/vmlinuz.old -> boot/vmlinuz-3.0.0-12-generic

Рисунок 3: Тип магического файла /boot/vmlinuz-3.0.0-12-generic

/boot/vmlinuz-3.0.0-12-generic: Linux kernel x86 boot executable bzImage, version 3.0.0-12-generic (buildd@creste, RO-rootFS, root_dev 0x801, swap_dev 0x4, Normal VGA
/boot/vmlinuz-3.0.0-15-generic: Linux kernel x86 boot executable bzImage, version 3.0.0-15-generic (buildd@creste, RO-rootFS, root_dev 0x801, swap_dev 0x4, Normal VGA

Теперь вот реальный кикер:

me@GAMMA:~$ sudo find / -name "vmlinuz*"
/boot/vmlinuz-3.0.0-12-generic
/boot/vmlinuz-3.0.0-15-generic
/vmlinuz.old
/vmlinuz
/ubuntu32/vmlinuz.old
/ubuntu32/vmlinuz

Это единственное ядро ​​в моей системе! Как это вообще возможно? Сейчас я запускаю 64-битное (/dev/sda3 - / и uname сообщает 64-битный)!


Я проверил содержимое пакета на packages.ubuntu.com и am64 версии linux-image-3.0.0.15-generic lists /boot/vmlinuz-3.0.0-15-generic в качестве файла, поэтому я запустил следующее:

me@GAMMA:~$ sudo openssl dgst -md5 /boot/vmlinuz-3.0.0-15-generic > ~/3.0.0.15x86
me@GAMMA:~$ sudo apt-get install --reinstall linux-image-3.0.0-15-generic
(Output Omitted)
me@GAMMA:~$ sudo openssl dgst -md5 /boot/vmlinuz-3.0.0-15-generic
MD5(/boot/vmlinuz-3.0.0-15-generic)= f56839a4642eb97e06e5efb0bc74f4dc
me@GAMMA:~$ cat ~/3.0.0.15x86 
MD5(/boot/vmlinuz-3.0.0-15-generic)= f56839a4642eb97e06e5efb0bc74f4dc
me@GAMMA:~$ sudo openssl dgst -md5 /boot/vmlinuz-3.0.0-15-generic > ~/3.0.0.15x86

Итак, ядро ​​Linux очень похоже на ядро ​​Mach в OSX в что это 32-разрядный исполняемый файл, который переключается в 64-битный режим, когда это необходимо. Тогда возникает вопрос: почему я получаю сообщение об ошибке «Ошибка формата Exec»?

Однако эта запись указывает на то, что runaway loop modprobe из паники ядра указывает, что это действительно проблема 32/64 бит. Grub должен иметь некоторый способ сообщить ядру битлинту, возможно, он находится в связанном файле в / boot, глядя на это завтра.


быстрое обновление: 32-битное и 64-битное ядра хэш по-разному, но файл сообщает, что оба они должны быть x86.

< MD5(/boot/vmlinuz-3.0.0-15-generic)= f56839a4642eb97e06e5efb0bc74f4dc
 ---
> MD5(/boot/vmlinuz-3.0.0-15-generic)= cee6cd7db9016ee8531be92504ac802b

Поэтому мне нужно определить, как установить ядро ​​в другое место, кроме / boot, чтобы два ядра не сбивались друг с другом ...

1
задан 24 January 2012 в 11:55

1 ответ

(непроверено) Решение: только mount / dev / sda1 on / boot для одного раздела, оставьте / загрузите для другого раздела на месте. Ядра не будут clobber друг друга, а затем, возможно, grub не запутается относительно того, почему есть две ОС, но одно ядро.

0
ответ дан 25 May 2018 в 14:58

Другие вопросы по тегам:

Похожие вопросы: