Результат работы
Код: [Выделить]
/etc/grub.d/30_os-prober
Код: [Выделить]
menuentry 'Ubuntu 17.10 (17.10) (на /dev/sda2) (на /dev/sda5)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/vmlinuz-4.13.0-37-generic--dbccc8de-aed5-4782-8617-f3f7af981cf2' {
Откуда это
Недочетов в работе 30_os-prober более чем достаточно.
Поэтому отключаю его. Для этого в файл /etc/default/grub добавьте строку:
GRUB_DISABLE_OS_PROBER="true"
После этого выполнить update-grub.
В ответ на мой вопрос в первом посте о файлах proxy
Код: [Выделить]
/etc/grub.d/40_custom_proxy
/etc/grub.d/41_linux_proxy
где-то читал, что их создает grub-customizer
Поэтому не пользуюсь grub-customizer и прочими boot-repair-ами.
Приходилось видеть файл grub.cfg мегабайтных размеров, созданный такими программами.
Который всеравно не работал.
Хотел переустановить memtest...
Если очень нужен мемтест, то сам файл memtest (можно взять например из исо-образа) копируем в /boot.
В файл /etc/grub.d/40_custom добавляем следующий код:
menuentry 'Memtest' {
src='memtest'
insmod part_gpt
insmod part_msdos
root='x'
if [ ${grub_platform} = efi ]
then avload='chainloader'; src="/EFI/${src}.efi"
else avload='linux16'; src="/boot/${src}"
fi
search -n -s -f ${src}
if [ $root = x ]
then msg="$src not exist!"; avload='configfile'; src="${prefix}/grub.cfg"
else msg="Load $src from $root"
insmod ${avload}
fi
echo "$msg"; sleep 4
${avload} ${src}
}
Пояснения.
В переменной src название файла, который будем искать/запускать.
Далее проверка, в каком режиме запущен груб: efi или обычный.
Режим efi возможно не работает. Не было возможности протестировать.
Файл для него (memtest.efi) предполагается брать из образа Windows 10.
Далее, если файл не найден, то присходит возврат в меню груб.
then msg="$src not exist!"; avload='configfile'; src="${prefix}/grub.cfg"
Как раз используется команда configfile.
Если файл найден, выводится сообщение на каком диске-разделе он находится и производится его запуск.
У меня две системы на 1 диске и 2 раздела /boot...
У вас действительно два раздела боот? Или вы оговорились.
Считаю, что от раздела boot больше проблем, чем пользы.
Если система установлена в один раздел, то вот почти универсальный вариант.
В файл /etc/grub.d/40_custom добавляем следующий код:
menuentry 'Linux on LABEL|UUID|DEV' --class ubuntu --class gnu-linux --class gnu --class os {
src='fuj120_1'
#version='-4.8.0-36-generic.efi.signed'; avload='/boot'
root='x'
insmod part_gpt
insmod part_msdos
insmod gzio
insmod ext2
search -n -s -l ${src}
if [ $root = x ]
then search -n -s -u ${src}
if [ $root = x ]
then search -n -s -f ${avload}/vmlinuz${version}
rootfs="root=/dev/${src}"
else rootfs="root=UUID=$src"
fi
else rootfs="root=LABEL=$src"
fi
if [ $root = x ]
then msg="$src not exist!"; avload='configfile'; src="${prefix}/grub.cfg"
else msg="Load $src from $root $rootfs"; avinit="initrd ${avload}/initrd.img${version}"; src="${avload}/vmlinuz${version} $key $rootfs --"; avload='linux'
fi
echo "$msg"; sleep 4
${avload} ${src}
${avinit}
}
Пояснения.
В переменной src - где находится корневой раздел.
Сначала скрипт считает, что в этой переменной метка тома.
Если находит раздел с такой меткой, то пытается загрузить линукс с этого раздела.
Если не находит, то считает что это UUID и ищет раздел с таким UUID-ом.
Если находит раздел с таким UUID-ом, то пытается загрузить линукс с этого раздела.
Если не находит, то считает что это имя устройства (например sda2).
Если находит такое имя раздела, то пытается загрузить линукс с этого раздела.
Этот вариант менее надежен.
Если нужно указать конкретную версию ядра и его расположение то раскомментировать строку:
#version='-4.8.0-36-generic.efi.signed'; avload='/boot'
Данные в этой строке приведены в качестве шаблона.
Изменить их на свои.