Страницы

3 июня 2012 г.

GRUB. Убираем дублирование вариантов загрузки ОСей.

       Доброго времени суток. Добро пожаловать в мой скромный блог.

       Речь пойдет и Linux Ubuntu и загрузчике GRUB который позволяет управлять вариантами загрузки системы (или систем если их несколько на ПК).
       Итак, в линуксе я относительно недавно и потому был очень удивлен, увидев что со временем вариантов загрузки системы становится все больше и больше. Варианты загрузки появляются при обновлении ядра Linux. Новое ядро прописывается в конфиг загрузчика, а старая версия не удаляется... Вот как раз 3 мин. назад установилось новое обновление, которое потребовало перезагрузки, сейчас ребутнусь, заодно и сделаю фото для наглядности. :)
Перезагрузка принесла нам фото, вот так это выглядит:



       Все пункты меню прописаны в файле grub.cfg. У меня он лежит в папке "/boot/grub/".
Для того чтобы избавиться от лишних пунктов меню можно отредактировать вышеуказанный файл. Структура файла проста:


#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by /usr/sbin/grub-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#


### BEGIN /etc/grub.d/00_header ###
if [ -s $prefix/grubenv ]; then
  load_env
fi
set default="0"
if [ ${prev_saved_entry} ]; then
  set saved_entry=${prev_saved_entry}
  save_env saved_entry
  set prev_saved_entry=
  save_env prev_saved_entry
  set boot_once=true
fi


function savedefault {
  if [ -z ${boot_once} ]; then
    saved_entry=${chosen}
    save_env saved_entry
  fi
}


function recordfail {
  set recordfail=1
  if [ -n ${have_grubenv} ]; then if [ -z ${boot_once} ]; then save_env recordfail; fi; fi
}
insmod ext2
set root='(hd1,5)'
search --no-floppy --fs-uuid --set 7ffdd216-53c0-486d-bf9a-97f6a671756e
if loadfont /usr/share/grub/unicode.pf2 ; then
  set gfxmode=640x480
  insmod gfxterm
  insmod vbe
  if terminal_output gfxterm ; then true ; else
    # For backward compatibility with versions of terminal.mod that don't
    # understand terminal_output
    terminal gfxterm
  fi
fi
insmod ext2
set root='(hd1,5)'
search --no-floppy --fs-uuid --set 7ffdd216-53c0-486d-bf9a-97f6a671756e
set locale_dir=($root)/boot/grub/locale
set lang=ru
insmod gettext
if [ ${recordfail} = 1 ]; then
  set timeout=-1
else
  set timeout=10
fi
### END /etc/grub.d/00_header ###


### BEGIN /etc/grub.d/05_debian_theme ###
set menu_color_normal=white/black
set menu_color_highlight=black/light-gray
### END /etc/grub.d/05_debian_theme ###


### BEGIN /etc/grub.d/10_linux ###
menuentry 'Ubuntu, с Linux 2.6.32-41-generic' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
insmod ext2
set root='(hd1,5)'
search --no-floppy --fs-uuid --set 7ffdd216-53c0-486d-bf9a-97f6a671756e
linux /boot/vmlinuz-2.6.32-41-generic root=UUID=7ffdd216-53c0-486d-bf9a-97f6a671756e ro   quiet splash
initrd /boot/initrd.img-2.6.32-41-generic
}
menuentry 'Ubuntu, с Linux 2.6.32-41-generic (режим восстановления)' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
insmod ext2
set root='(hd1,5)'
search --no-floppy --fs-uuid --set 7ffdd216-53c0-486d-bf9a-97f6a671756e
echo 'Загружается Linux 2.6.32-41-generic ...'
linux /boot/vmlinuz-2.6.32-41-generic root=UUID=7ffdd216-53c0-486d-bf9a-97f6a671756e ro single 
echo 'Загружается начальный ramdisk ...'
initrd /boot/initrd.img-2.6.32-41-generic
}
menuentry 'Ubuntu, с Linux 2.6.32-40-generic' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
insmod ext2
set root='(hd1,5)'
search --no-floppy --fs-uuid --set 7ffdd216-53c0-486d-bf9a-97f6a671756e
linux /boot/vmlinuz-2.6.32-40-generic root=UUID=7ffdd216-53c0-486d-bf9a-97f6a671756e ro   quiet splash
initrd /boot/initrd.img-2.6.32-40-generic
}
menuentry 'Ubuntu, с Linux 2.6.32-40-generic (режим восстановления)' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
insmod ext2
set root='(hd1,5)'
search --no-floppy --fs-uuid --set 7ffdd216-53c0-486d-bf9a-97f6a671756e
echo 'Загружается Linux 2.6.32-40-generic ...'
linux /boot/vmlinuz-2.6.32-40-generic root=UUID=7ffdd216-53c0-486d-bf9a-97f6a671756e ro single 
echo 'Загружается начальный ramdisk ...'
initrd /boot/initrd.img-2.6.32-40-generic
}
menuentry 'Ubuntu, с Linux 2.6.32-39-generic' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
insmod ext2
set root='(hd1,5)'
search --no-floppy --fs-uuid --set 7ffdd216-53c0-486d-bf9a-97f6a671756e
linux /boot/vmlinuz-2.6.32-39-generic root=UUID=7ffdd216-53c0-486d-bf9a-97f6a671756e ro   quiet splash
initrd /boot/initrd.img-2.6.32-39-generic
}
menuentry 'Ubuntu, с Linux 2.6.32-39-generic (режим восстановления)' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
insmod ext2
set root='(hd1,5)'
search --no-floppy --fs-uuid --set 7ffdd216-53c0-486d-bf9a-97f6a671756e
echo 'Загружается Linux 2.6.32-39-generic ...'
linux /boot/vmlinuz-2.6.32-39-generic root=UUID=7ffdd216-53c0-486d-bf9a-97f6a671756e ro single 
echo 'Загружается начальный ramdisk ...'
initrd /boot/initrd.img-2.6.32-39-generic
}
menuentry 'Ubuntu, с Linux 2.6.32-38-generic' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
insmod ext2
set root='(hd1,5)'
search --no-floppy --fs-uuid --set 7ffdd216-53c0-486d-bf9a-97f6a671756e
linux /boot/vmlinuz-2.6.32-38-generic root=UUID=7ffdd216-53c0-486d-bf9a-97f6a671756e ro   quiet splash
initrd /boot/initrd.img-2.6.32-38-generic
}
menuentry 'Ubuntu, с Linux 2.6.32-38-generic (режим восстановления)' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
insmod ext2
set root='(hd1,5)'
search --no-floppy --fs-uuid --set 7ffdd216-53c0-486d-bf9a-97f6a671756e
echo 'Загружается Linux 2.6.32-38-generic ...'
linux /boot/vmlinuz-2.6.32-38-generic root=UUID=7ffdd216-53c0-486d-bf9a-97f6a671756e ro single 
echo 'Загружается начальный ramdisk ...'
initrd /boot/initrd.img-2.6.32-38-generic
}
menuentry 'Ubuntu, с Linux 2.6.32-37-generic' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
insmod ext2
set root='(hd1,5)'
search --no-floppy --fs-uuid --set 7ffdd216-53c0-486d-bf9a-97f6a671756e
linux /boot/vmlinuz-2.6.32-37-generic root=UUID=7ffdd216-53c0-486d-bf9a-97f6a671756e ro   quiet splash
initrd /boot/initrd.img-2.6.32-37-generic
}
menuentry 'Ubuntu, с Linux 2.6.32-37-generic (режим восстановления)' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
insmod ext2
set root='(hd1,5)'
search --no-floppy --fs-uuid --set 7ffdd216-53c0-486d-bf9a-97f6a671756e
echo 'Загружается Linux 2.6.32-37-generic ...'
linux /boot/vmlinuz-2.6.32-37-generic root=UUID=7ffdd216-53c0-486d-bf9a-97f6a671756e ro single 
echo 'Загружается начальный ramdisk ...'
initrd /boot/initrd.img-2.6.32-37-generic
}
menuentry 'Ubuntu, с Linux 2.6.32-36-generic' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
insmod ext2
set root='(hd1,5)'
search --no-floppy --fs-uuid --set 7ffdd216-53c0-486d-bf9a-97f6a671756e
linux /boot/vmlinuz-2.6.32-36-generic root=UUID=7ffdd216-53c0-486d-bf9a-97f6a671756e ro   quiet splash
initrd /boot/initrd.img-2.6.32-36-generic
}
menuentry 'Ubuntu, с Linux 2.6.32-36-generic (режим восстановления)' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
insmod ext2
set root='(hd1,5)'
search --no-floppy --fs-uuid --set 7ffdd216-53c0-486d-bf9a-97f6a671756e
echo 'Загружается Linux 2.6.32-36-generic ...'
linux /boot/vmlinuz-2.6.32-36-generic root=UUID=7ffdd216-53c0-486d-bf9a-97f6a671756e ro single 
echo 'Загружается начальный ramdisk ...'
initrd /boot/initrd.img-2.6.32-36-generic
}
menuentry 'Ubuntu, с Linux 2.6.32-35-generic' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
insmod ext2
set root='(hd1,5)'
search --no-floppy --fs-uuid --set 7ffdd216-53c0-486d-bf9a-97f6a671756e
linux /boot/vmlinuz-2.6.32-35-generic root=UUID=7ffdd216-53c0-486d-bf9a-97f6a671756e ro   quiet splash
initrd /boot/initrd.img-2.6.32-35-generic
}
menuentry 'Ubuntu, с Linux 2.6.32-35-generic (режим восстановления)' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
insmod ext2
set root='(hd1,5)'
search --no-floppy --fs-uuid --set 7ffdd216-53c0-486d-bf9a-97f6a671756e
echo 'Загружается Linux 2.6.32-35-generic ...'
linux /boot/vmlinuz-2.6.32-35-generic root=UUID=7ffdd216-53c0-486d-bf9a-97f6a671756e ro single 
echo 'Загружается начальный ramdisk ...'
initrd /boot/initrd.img-2.6.32-35-generic
}
menuentry 'Ubuntu, с Linux 2.6.32-34-generic' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
insmod ext2
set root='(hd1,5)'
search --no-floppy --fs-uuid --set 7ffdd216-53c0-486d-bf9a-97f6a671756e
linux /boot/vmlinuz-2.6.32-34-generic root=UUID=7ffdd216-53c0-486d-bf9a-97f6a671756e ro   quiet splash
initrd /boot/initrd.img-2.6.32-34-generic
}
menuentry 'Ubuntu, с Linux 2.6.32-34-generic (режим восстановления)' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
insmod ext2
set root='(hd1,5)'
search --no-floppy --fs-uuid --set 7ffdd216-53c0-486d-bf9a-97f6a671756e
echo 'Загружается Linux 2.6.32-34-generic ...'
linux /boot/vmlinuz-2.6.32-34-generic root=UUID=7ffdd216-53c0-486d-bf9a-97f6a671756e ro single 
echo 'Загружается начальный ramdisk ...'
initrd /boot/initrd.img-2.6.32-34-generic
}
menuentry 'Ubuntu, с Linux 2.6.32-25-generic' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
insmod ext2
set root='(hd1,5)'
search --no-floppy --fs-uuid --set 7ffdd216-53c0-486d-bf9a-97f6a671756e
linux /boot/vmlinuz-2.6.32-25-generic root=UUID=7ffdd216-53c0-486d-bf9a-97f6a671756e ro   quiet splash
initrd /boot/initrd.img-2.6.32-25-generic
}
menuentry 'Ubuntu, с Linux 2.6.32-25-generic (режим восстановления)' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
insmod ext2
set root='(hd1,5)'
search --no-floppy --fs-uuid --set 7ffdd216-53c0-486d-bf9a-97f6a671756e
echo 'Загружается Linux 2.6.32-25-generic ...'
linux /boot/vmlinuz-2.6.32-25-generic root=UUID=7ffdd216-53c0-486d-bf9a-97f6a671756e ro single 
echo 'Загружается начальный ramdisk ...'
initrd /boot/initrd.img-2.6.32-25-generic
}
### END /etc/grub.d/10_linux ###


### BEGIN /etc/grub.d/20_memtest86+ ###
menuentry "Memory test (memtest86+)" {
insmod ext2
set root='(hd1,5)'
search --no-floppy --fs-uuid --set 7ffdd216-53c0-486d-bf9a-97f6a671756e
linux16 /boot/memtest86+.bin
}
menuentry "Memory test (memtest86+, serial console 115200)" {
insmod ext2
set root='(hd1,5)'
search --no-floppy --fs-uuid --set 7ffdd216-53c0-486d-bf9a-97f6a671756e
linux16 /boot/memtest86+.bin console=ttyS0,115200n8
}
### END /etc/grub.d/20_memtest86+ ###


### BEGIN /etc/grub.d/30_os-prober ###
menuentry "Windows 7 (loader) (on /dev/sda1)" {
insmod ntfs
set root='(hd0,1)'
search --no-floppy --fs-uuid --set D0469A5E469A455E
chainloader +1
}
### END /etc/grub.d/30_os-prober ###


### BEGIN /etc/grub.d/40_custom ###
# 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.
### END /etc/grub.d/40_custom ###


Красным выделено то, что редактировать не рекомендуется.
Зеленым и полужирным оранжевым прописаны пункты меню выводимые на экран при загрузке.
       Разобраться очень просто. Они все идентичны, кроме "### BEGIN /etc/grub.d/20_memtest86+ ###" и "### BEGIN /etc/grub.d/30_os-prober ###". Первый отвечает за запуск тестирования памяти, а второй за загрузку Windows, установленной как вторая ОСь. Естественно эти записи удалять не стоит. Все что выделено полужирным оранжевым можно сносить. :)
       Хочу заметить, что заполнением отдельных секций этого файла занимается скрипт расположенный по адресу "/usr/sbin/grub-mkconfig". В нем есть следующий блок:

EOF

for i in ${grub_mkconfig_dir}/* ; do
  case "$i" in
    # emacsen backup files. FIXME: support other editors
    *~) ;;
    *)
      if grub_file_is_not_garbage "$i" && test -x "$i" ; then
        echo
        echo "### BEGIN $i ###"
        "$i"
        echo "### END $i ###"
      fi
    ;;
  esac
done

Который перебирает выполняет по очереди скрипты находящиеся по адресу "/etc/grub.d". За заполнение раздела который нам мешает отвечает скрипт "10_linux". Вероятно, его можно модифицировать чтобы избавится от периодической ручной чистки, но пока в этом разбираться не буду по ряду причин. Может кто-то опередит меня и что-то предложит.

       Итак, подведем итог. Удалив из текста "grub.cfg" строки которые я выделил полужирным зеленым, при загрузке я получил следующий результат:

Все загрузилось, все работает. :)

Комментариев нет:

Отправить комментарий