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 для раздела. UPDATE: последний раз был /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 (у которой было наследие grub, пока загрузка не завершилась перезагрузкой 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/ для каждого из случаев с различными порядками загрузки.

Я это знаю может работать, потому что он работал до ...

UPDATE:

Я запускал os-prober с 10.04 (1.38 / lucid), и он работал, он нашел все системы linux в отличие от 12.04 os-prober (1.51). Поэтому я снова выполнил загрузку ( http://paste.ubuntu.com/1099113/ ), и он создал запись меню 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, так что нет ответ еще нет ...

Last UPDATE: Кажется, что grub3 (1.98) 10.04 не может использовать UUID для загрузки, а так как BIOS моего оборудования смешивает жесткий диск с ботинок для загрузки, на самом деле достижение загрузки - это побег в крэпсе ... & lt; ¬ (

1
задан 21 July 2012 в 04:02

2 ответа

Дайте мне знать, если это работает:

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
}
0
ответ дан 25 May 2018 в 08:28
  • 1
    Я был очень рад видеть ваш ответ 8¬) Вот что случилось ... «Arch linux " появился в меню загрузки !!!! Когда выбрано, grub2 ответил «файл не найден ... & amp; " – keepitsimpleengineer 20 July 2012 в 08:30
  • 2
    Таким образом, я загрузился в 10.04 (где все еще работает) и побежал sudo blkid ⋯ кий барабанный ролл ⋯ arch linux noW, как: / dev / sdc1: LABEL = " arch_boot " UUID = & Quot; 34a39f15-f1a8-46a3-88e7-00c370c3c6a2 & Quot; TYPE = & Quot; ext2 & Quot; / dev / sdc2: LABEL = "arch_root" UUID = & Quot; c670b0cf-a644-48d6-903d-dc3e49395a04 & Quot; TYPE = & Quot; ext2 & Quot; / dev / sdc3: UUID = "b36c4dc0-f5d7-488e-80fb-4c2e14313de5" TYPE = & Quot; подкачки & Quot; / dev / sdc5: LABEL = "arch_home" UUID = & Quot; 327900a5-e8f7-4dc4-be52-2f0dd97e3164 & Quot; TYPE = & Quot; ext4 & Quot; / dev / sdc6: LABEL = "arch_adjunct" c670b0cf-a644-48d6-903d-dc3e49395a04 & Quot; UUID = & Quot; f65f0ae6-9af2-4767-B223-a199ce96c71a & Quot; TYPE = & Quot; ReiserFS & Quot; – keepitsimpleengineer 20 July 2012 в 08:40
  • 3
    ... так что, возможно, «set = root 34a39f15-f1a8-46a3-88e7-00c370c3c6a2» должен быть "- set = root c670b0cf-a644-48d6-903d-dc3e49395a04" дайте мне знать, я умираю от любопытства: ¬) – keepitsimpleengineer 20 July 2012 в 08:40

Строка 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. Попробуйте и посмотрите, может ли она найти ОС.

0
ответ дан 25 May 2018 в 08:28

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

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