Я только что установил систему, подобную этой:
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-разрядное, чтобы я мог тестировать производительность драйверов для каждого, общий каталог Home и каждая версия 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, установленный в / boot для каждой записи.
grub.cfg: http://pastebin.com/Dkdxian4
fstab (оба): http://pastebin.com/3sUabYRY
Я знаю, что grub2 - все автоматически генерируемые и меню и джаз, но как мне просто обнулить все это и вручную добавить энты (я не задерживаю эту установку долго, поэтому не стоит беспокоиться об обновлениях ядра)
< hr> Я сделал снимок репликации записи /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] [<c151a922>] ? printk+0x2d/0x2f
[ 3.408338] [<c151a800>] panic+0x5c/0x151
[ 3.408388] [<c104b564>] forget_original_parent+0x1e4/0x1f0
[ 3.408440] [<c10d3a48>] ? perf_cgroup_attach_task+0x20/0x20
[ 3.408489] [<c104b583>] exit_notify+0x13/0x140
[ 3.408536] [<c104bd8d>] do_exit+0x1ad/0x3a8
[ 3.408585] [<c1313850>] ? tty_write+0x228/0x228
[ 3.408632] [<c104c098>] sys_exit+0x18/0x28
[ 3.408680] [<c152e424>] syscall_call+0x7/0xb
Я начинаю думать, что это связано с образами ядра, которые находятся в каталоге / boot.
Хорошо, теперь я уверен, что это связано с тем, что один раздел является 32-разрядным, а другой - 64-разрядным.
Рисунок 1: извлечение из /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 списков /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 действует очень похоже на ядро Маха в OSX в том смысле, что оно 32-битный исполняемый файл, который при необходимости переключается в 64-битный режим Тогда возникает вопрос: почему я получаю сообщение об ошибке «Ошибка формата Exec»?
Однако, этот пост указывает на то, что runaway loop modprobe
из паники ядра указывает, что это действительно 32/64 битная проблема. У Grub должен быть какой-то способ сообщить ядру о длине битов, может быть, он находится в связанном файле в / boot, чтобы посмотреть это завтра.
быстрое обновление:
32-битные и 64-битные ядра по-разному хэшируют, но файл сообщает, что оба они имеют х86.
< MD5(/boot/vmlinuz-3.0.0-15-generic)= f56839a4642eb97e06e5efb0bc74f4dc
---
> MD5(/boot/vmlinuz-3.0.0-15-generic)= cee6cd7db9016ee8531be92504ac802b
Поэтому мне нужно определить, как установить ядро в другое место, кроме / boot, чтобы два ядра не слипались друг от друга ...
(непротестированное) Решение:
Только монтируют/dev/sda1 на начальной загрузке / для одного раздела, оставляют начальную загрузку / для другого раздела на месте. Привычка ядер ударяет друг друга и затем возможно, копается, привычка запутываются, относительно того, почему существует два Ose, но одно ядро.