os-prober не может определить систему linux, поэтому мне нужно написать собственный пункт меню grub2 в качестве обходного пути, как?
Я хочу добавить пользовательское меню в Grub2, как это (как /etc/grub.d/40_custom
):
#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries. Simply type the
# menu entries you want to add after this comment. Be careful not to change
# the 'exec tail' line above.
menuentry "Arch Linux" {
....some data here.....
}
и что мне нужно, это ".... некоторые данные здесь....."
Некоторые трудности:
При загрузке порядок дисков меняется из BIOS, например иногда диск с разделом
/dev/sda
а иногда это/dev/sdg
, поэтому я использую UUID для раздела. ОБНОВЛЕНИЕ: последний раз был/dev/sdc
!Система Linux использует отдельный загрузочный раздел, т.е. раздел 1 является
/boot
раздел, раздел 2 является/root
раздел и расширенный раздел 4 является/home
раздел
Вот вывод blkid, когда Linux думал, что диск был /dev/sdg...
/dev/sdg1: LABEL="arch_boot" UUID="34a39f15-f1a8-46a3-88e7-00c370c3c6a2" TYPE="ext2"
/dev/sdg2: LABEL="arch_root" UUID="c670b0cf-a644-48d6-903d-dc3e49395a04" TYPE="ext2"
/dev/sdg3: UUID="b36c4dc0-f5d7-488e-80fb-4c2e14313de5" TYPE="swap"
/dev/sdg5: LABEL="arch_home" UUID="327900a5-e8f7-4dc4-be52-2f0dd97e3164" TYPE="ext4"
/dev/sdg6: LABEL="arch_adjunct" UUID="f65f0ae6-9af2-4767-b223-a199ce96c71a" TYPE="reiserfs"
Вот содержимое системы Linux (которая была устаревшей до тех пор, пока boot-repair не переопределил MBR):
⋯@64bitWS:/media$ ls arch_boot
grub initramfs-linux-fallback.img initramfs-linux.img lost+found vmlinuz-linux
⋯@64bitWS:/media$ ls arch_boot/grub
e2fs_stage1_5 iso9660_stage1_5 minix_stage1_5 stage2 vstafs_stage1_5
fat_stage1_5 jfs_stage1_5 reiserfs_stage1_5 stage2_eltorito xfs_stage1_5
ffs_stage1_5 menu.lst stage1 ufs2_stage1_5
⋯@64bitWS:/media$ ls arch_root
aur boot etc lib lost+found mnt proc run srv tmp var
bin dev home lib64 media opt root sbin sys usr
boot-info на http://paste.ubuntu.com/1099113/ и на http://paste.ubuntu.com/1100049/ для каждого из случаев различных порядков загрузки.
Я знаю, что это может работать, потому что это работало раньше...
ОБНОВИТЬ:
Я запускал os-prober с 10.04 (1.38/lucid), и он работал, он нашел все системы linux, в отличие от 12.04 os-prober (1.51). Поэтому я снова запустил boot-repair ( http://paste.ubuntu.com/1101977/), и он создал пункт меню Arch Linux grub2. Это выглядело так (от /boot/grub/grub.conf
):
menuentry 'Arch Linux' {
insmod gzio
insmod part_msdos
insmod ext2
set root='(hd6,msdos1)'
search --no-floppy --fs-uuid --set=root 34a39f15-f1a8-46a3-88e7-00c370c3c6a2
linux /boot/vmlinuz-linux root=UUID=670b0cf-a644-48d6-903d-dc3e49395a04
initrd /boot/initramfs-linux.img
}
Идентично предложенному Cumulus007 ответу.
К сожалению, этот "новый" grub.cfg не загрузит Arch Linux, так что пока нет ответа...
Последнее обновление: кажется, что 10.04 grub3 (1.98) не может использовать UUID для загрузки, и, поскольку BIOS моего оборудования смешивает порядок жестких дисков от загрузки к загрузке, на самом деле достижение загрузки - это крэпс стрельба... <¬ (
3 ответа
Ну, это сработало для меня, вероятно, не вариант для других.
У меня установлено три системы Linux: Ubuntu 10.04 LTS, Xubuntu 12.04 и Arch Linux (выпуск на постоянной основе).
12.04 не удалось, потому что os-prober не может найти Arch Linux
Ошибка 10.04, потому что он не может использовать UUID, и мой аппаратный BIOS смешивает порядок жестких дисков.
Поэтому я обратился к Arch Linux, установил grub2 и настроил его. Это os-prober находит все установленные системы и может использовать UUID.
Установка по https://wiki.archlinux.org/index.php/Grub
Дайте мне знать, если это работает:
menuentry 'Arch Linux' {
insmod gzio
insmod part_msdos
insmod ext2
set root='(hd6,msdos1)'
search --no-floppy --fs-uuid --set=root 34a39f15-f1a8-46a3-88e7-00c370c3c6a2
linux /boot/vmlinuz-linux root=UUID=670b0cf-a644-48d6-903d-dc3e49395a04
initrd /boot/initramfs-linux.img
}
Строка 184 /etc/grub.d/30_os-prober гласит:
prepare_boot_cache="$(prepare_grub_to_access_device ${LBOOT} | sed -e "s/^/\t/")"
Это может привести к путанице в парсере скриптов. Изменить это на:
prepare_boot_cache="$(prepare_grub_to_access_device ${LBOOT} | sed -e 's/^/\t/')"
должно заставить это выглядеть лучше. Это единственный дефект, который я обнаружил в os-prober grub2 в 12.04. Попробуйте и посмотрите, сможет ли он найти ОС.