My advice would be to stick to “grub2-efi”, because you then have a boot choice of normal boot, recovery boot, boot a different kernel.
This advice was given by nrickert and echoed by gogalthorp. I agree.
But, if you would like to have the boot menu “disappear” for most of your boots, yet still be available when you need to use one of the other options, or need to hit “e” to add a parameter, you could do as I do:
Hide GRUB unless the Shift key is held down
To get the fastest possible boot, instead of having Grub wait for a time-out, Grub can hide the menu unless the Shift key is held down when Grub is starting up.
Add the following line to /etc/default/grub
GRUB_FORCE_HIDDEN_MENU="true"
Create the file /etc/grub.d/31_hold_shift
Copy/Paste this as the contents for that file:
#! /bin/sh
set -e
# grub-mkconfig helper script.
# Copyright (C) 2006,2007,2008,2009 Free Software Foundation, Inc.
#
# GRUB is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# GRUB is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with GRUB. If not, see <http://www.gnu.org/licenses/>.
prefix="/usr"
exec_prefix="${prefix}"
datarootdir="${prefix}/share"
export TEXTDOMAIN=grub
export TEXTDOMAINDIR="${datarootdir}/locale"
source "${datarootdir}/grub2/grub-mkconfig_lib"
found_other_os=
make_timeout () {
if "x${GRUB_FORCE_HIDDEN_MENU}" = "xtrue" ] ; then
if "x${1}" != "x" ] ; then
if "x${GRUB_HIDDEN_TIMEOUT_QUIET}" = "xtrue" ] ; then
verbose=
else
verbose=" --verbose"
fi
if "x${1}" = "x0" ] ; then
cat <<EOF
if "x\${timeout}" != "x-1" ]; then
if keystatus; then
if keystatus --shift; then
set timeout=-1
else
set timeout=0
fi
else
if sleep$verbose --interruptible 3 ; then
set timeout=0
fi
fi
fi
EOF
else
cat << EOF
if "x\${timeout}" != "x-1" ]; then
if sleep$verbose --interruptible ${GRUB_HIDDEN_TIMEOUT} ; then
set timeout=0
fi
fi
EOF
fi
fi
fi
}
adjust_timeout () {
if "x$GRUB_BUTTON_CMOS_ADDRESS" != "x" ]; then
cat <<EOF
if cmostest $GRUB_BUTTON_CMOS_ADDRESS ; then
EOF
make_timeout "${GRUB_HIDDEN_TIMEOUT_BUTTON}" "${GRUB_TIMEOUT_BUTTON}"
echo else
make_timeout "${GRUB_HIDDEN_TIMEOUT}" "${GRUB_TIMEOUT}"
echo fi
else
make_timeout "${GRUB_HIDDEN_TIMEOUT}" "${GRUB_TIMEOUT}"
fi
}
adjust_timeout
cat <<EOF
if "x\${timeout}" != "x-1" ]; then
if keystatus; then
if keystatus --shift; then
set timeout=-1
else
set timeout=0
fi
else
if sleep$verbose --interruptible 3 ; then
set timeout=0
fi
fi
fi
EOF
Now, when you boot, no Grub menu and no waiting for the timer. When you need to access the hidden menu, hold the Shift key as Grub starts up.