Скрипт для исправления проблем в GRUB в 1 клик. Возможно применение в автоматизированных скриптах.
#!/bin/sh load_default_grub() { . /etc/default/grub } get_yes_no() { while [ true ]; do echo -n "$1 (Y/N) ? " read a echo if [ $? != 0 ]; then a='No'; return; fi case $a in [Yy][Ee][Ss]|[Yy]) a='Yes'; return;; [Nn][Oo]|[Nn]) a='No'; return;; *) ;; esac done } # Load config and uncomment variable. load_default_grub if (grep -qwai '^#GRUB_DISABLE_RECOVERY=' /etc/default/grub >/dev/null); then echo 'INFO: Uncomment the GRUB_DISABLE_RECOVERY variable.' sed -i 's/^#GRUB_DISABLE_RECOVERY=\(.*\)/GRUB_DISABLE_RECOVERY=\1/' /etc/default/grub fi # Load config again, check value and set if need. load_default_grub if [ "$GRUB_DISABLE_RECOVERY" != 'true' ]; then if [ -z "$GRUB_DISABLE_RECOVERY" ]; then echo 'INFO: Add GRUB_DISABLE_RECOVERY="true"' echo 'GRUB_DISABLE_RECOVERY="true"' >> /etc/default/grub else echo 'INFO: Set GRUB_DISABLE_RECOVERY to "true"' sed -i 's/^GRUB_DISABLE_RECOVERY=.*/GRUB_DISABLE_RECOVERY="true"/' /etc/default/grub fi fi # Delete deprecated options GRUB_HIDDEN_TIMEOUT*. if (grep -qwai '^GRUB_HIDDEN_TIMEOUT.*' /etc/default/grub >/dev/null); then echo 'INFO: Delete deprecated options GRUB_HIDDEN_TIMEOUT*' sed -i '/^GRUB_HIDDEN_TIMEOUT.*/d' /etc/default/grub fi # Add option GRUB_RECORDFAIL_TIMEOUT=15 for automatic boot on fail. if ! (grep -qwai '^GRUB_RECORDFAIL_TIMEOUT=.*' /etc/default/grub >/dev/null); then echo 'INFO: Add option GRUB_RECORDFAIL_TIMEOUT=15 for automatic boot on fail.' echo 'GRUB_RECORDFAIL_TIMEOUT=15' >> /etc/default/grub fi #GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" if (grep -qwai '^GRUB_CMDLINE_LINUX_DEFAULT=.*' /etc/default/grub >/dev/null); then # Load config again, check value and set if need. load_default_grub for i in $GRUB_CMDLINE_LINUX_DEFAULT; do case "$i" in 'splash') i='nosplash' ;; 'quiet') i='noquiet' ;; esac if [ -n "$GRUB_CMDLINE_LINUX_DEFAULT_OUT" -a -n "$i" ]; then GRUB_CMDLINE_LINUX_DEFAULT_OUT="$GRUB_CMDLINE_LINUX_DEFAULT_OUT $i" else GRUB_CMDLINE_LINUX_DEFAULT_OUT="$i" fi done sed -i -e "s/^GRUB_CMDLINE_LINUX_DEFAULT=.*/GRUB_CMDLINE_LINUX_DEFAULT=\"${GRUB_CMDLINE_LINUX_DEFAULT_OUT}\"/" /etc/default/grub fi #Finnaly re-generate grub.cfg. get_yes_no "Do you want to run update-grub" [ $a = 'Yes' ] && update-grub