Grub

如何重新排序 grub 菜單 - 自動設置位於第一個菜單的游標?

  • May 8, 2021

我的電腦中有兩個磁碟,sda 上安裝了雙作業系統(debian–buster + win10),sdb 上安裝了一個單作業系統(debian buster)。

每次重啟電腦,grub菜單顯示如下:

Debian GNU/Linux 
Advanced option for Debian GNU/Linux
Windows Boot Manager(on /dev/sda2)
Debian GNU/Linux 10(buster) on /dev/sda6
Advanced options for Debian GNU/Linux 10(buster) (on /dev/sda6)
System setup

Debian GNU/Linux如果我選擇要輸入的第一項

df /boot/grub/grub.cfg
/dev/sdb1

我上傳/boot/grub/grub.cfgas https://www.dropbox.com/s/9qjmk178jlj2gha/grub.cfg-sdb1?dl=0,

Debian GNU/Linux 10(buster) on /dev/sda6如果我選擇要輸入的第一項

df /boot/grub/grub.cfg
/dev/sda1

我上傳/boot/grub/grub.cfgas https://www.dropbox.com/s/kf94rbc9g1xpx8e/grub.cfg-sda1?dl=0

我的期望:每次重新啟動電腦時,重新排序 grub 菜單如下:

Debian GNU/Linux 10(buster) on /dev/sda6
Advanced options for Debian GNU/Linux 10(buster) (on /dev/sda6)
Debian GNU/Linux 
Advanced option for Debian GNU/Linux
Windows Boot Manager(on /dev/sda2)
System setup

我這樣調整:

sudo mount /dev/sda2  /mnt
sudo grub-install --efi-directory=/mnt
sudo grub-mkconfig -o /boot/grub/grub.cfg

重新啟動它,請查看 grub 菜單。

在此處輸入圖像描述

為什麼游標位於菜單上

Advanced options for Debian GNU/Linux 10(buster) (on /dev/sdb1)

而不是第一個菜單?

每次啟動我的電腦時,如何創建下面的 grub 菜單以使游標位於第一個菜單中?

在此處輸入圖像描述

您可以簡單地使用grub-customizerhttps://packages.debian.org/buster/grub-customizer)而無需從 Debian 的官方儲存庫中處理 grub 的文件,這完全可以滿足您的需求:

移動條目

設置預設條目

您可以synaptic使用標準 Debian 安裝附帶的 GUI 來安裝它。

另外,不要忘記將更改保存在grub-customizer.

相關問題:how-do-i-change-the-grub-boot-order

參考 :

  1. https://olinux.net/change-grub-boot-order-linux/
  2. https://askubuntu.com/questions/100232/how-do-i-change-the-grub-boot-order
  3. https://wiki.debian.org/GrubConfiguration
  4. https://www.linuxquestions.org/questions/debian-26/grub2-debian-squeeze-change-boot-order-906606/

我正在寫那個對我有用的答案。

sudo gedit /etc/grub.d/10_linux

您可以使用vinano您熟悉的。查看本節中的文件:

linux_entry ()
{
 os="$1"
 version="$2"
 recovery="$3"
 args="$4"
 if ${recovery} ; then
   title="$(gettext_quoted "%s, with Linux %s (recovery mode)")"
 else
   title="$(gettext_quoted "%s, with Linux %s")"
 fi
 printf "menuentry '${title}' ${CLASS} {\n" "${os}" "${version}"
 if ! ${recovery} ; then
     save_default_entry | sed -e "s/^/\t/"
 fi

雖然這條線看起來像我的文章

linux_entry ()
{
 os="$1"
 version="$2"
 type="$3"
 args="$4"

 if [ -z "$boot_device_id" ]; then
     boot_device_id="$(grub_get_device_id "${GRUB_DEVICE}")"
 fi
 if [ x$type != xsimple ] ; then
     case $type in
     recovery)
         title="$(gettext_printf "%s (Kernel: %s - recovery mode)" "${os}" "${version}")" ;;
     fallback)
         title="$(gettext_printf "%s (Kernel: %s - fallback initramfs)" "${os}" "${version}")" ;;
     *)
         title="$(gettext_printf "%s (Kernel: %s)" "${os}" "${version}")" ;;
     esac
     if [ x"$title" = x"$GRUB_ACTUAL_DEFAULT" ] || [ x"Previous Linux versions>$title" = x"$GRUB_ACTUAL_DEFAULT" ]; then
     replacement_title="$(echo "Advanced options for ${OS}" | sed 's,>,>>,g')>$(echo "$title" | sed 's,>,>>,g')"
     quoted="$(echo "$GRUB_ACTUAL_DEFAULT" | grub_quote)"
     title_correction_code="${title_correction_code}if [ \"x\$default\" = '$quoted' ]; then default='$(echo "$replacement_title" | grub_quote)'; fi;"
     grub_warn "$(gettext_printf "Please don't use old title \`%s' for GRUB_DEFAULT, use \`%s' (for versions before 2.00) or \`%s' (for 2.00 or later)" "$GRUB_ACTUAL_DEFAULT" "$replacement_title" "gnulinux-advanced-$boot_device_id>gnulinux-$version-$type-$boot_device_id")"
     fi
     echo "menuentry '$(echo "$title" | grub_quote)' ${CLASS} \$menuentry_id_option 'gnulinux-$version-$type-$boot_device_id' {" | sed "s/^/$submenu_indentation/"
 else
     echo "menuentry '$(echo "$os" | grub_quote)' ${CLASS} \$menuentry_id_option 'gnulinux-simple-$boot_device_id' {" | sed "s/^/$submenu_indentation/"
 fi      
 if [ x$type != xrecovery ] && [ x$type != xfallback ] ; then
     save_default_entry | grub_add_tab
 fi

我是殼牌的初學者。這就是為什麼我不做任何改變。

如果要更改主分區以外的分區的核心標題,則要編輯

/etc/grub.d/30_os-prober文件

在這個部分:

linux)
     LINUXPROBED="`linux-boot-prober ${DEVICE} 2> /dev/null | tr ' ' '^' | paste -s -d ' '`"
     prepare_boot_cache=

     for LINUX in ${LINUXPROBED} ; do
       LROOT="`echo ${LINUX} | cut -d ':' -f 1`"
       LBOOT="`echo ${LINUX} | cut -d ':' -f 2`"
       LLABEL="`echo ${LINUX} | cut -d ':' -f 3 | tr '^' ' '`"
       LKERNEL="`echo ${LINUX} | cut -d ':' -f 4`"
       LINITRD="`echo ${LINUX} | cut -d ':' -f 5`"
       LPARAMS="`echo ${LINUX} | cut -d ':' -f 6- | tr '^' ' '`"

       if [ -z "${LLABEL}" ] ; then
         LLABEL="${LONGNAME}"
       fi

   if [ "${LROOT}" != "${LBOOT}" ]; then
     LKERNEL="${LKERNEL#/boot}"
     LINITRD="${LINITRD#/boot}"
   fi

       cat << EOF
menuentry "${LLABEL} (on ${DEVICE})" --class gnu-linux --class gnu --class os {
EOF

這是答案連結

引用自:https://unix.stackexchange.com/questions/648242