除非采取确切的步骤,否则 GRUB 在加载 initrd 后会冻结

除非采取确切的步骤,否则 GRUB 在加载 initrd 后会冻结

我有一台 HP 笔记本 15-f004wm,用作日常驱动程序。
然而,有一个奇怪的问题,每当我尝试启动时,GRUB 就会“冻结”(又名无法通过“正在加载 initrd...”)。
让它启动的唯一方法是遵循这些精确的脚步:

1: Turn off the computer. (Shutdown, restarting won't work.)
2: When the computer turns on, hit F9. (You can't let it boot normally into GRUB.)
3: From the EFI boot menu, select GRUB.
4: Select the entry for the OS.
5: Do this every time you need to boot into GRUB.

我可以确认这发生在:

  • 架构Linux
  • 乌班图(14.10、15.10、16.04)
  • 软呢帽
  • OpenSUSE 风滚草(20161219、20161222)

这是df(注意:我在我的 OpenSUSE Tumbleweed 系统上运行它的输出,这是我的主要且当前唯一的系统)

Filesystem     1K-blocks     Used Available Use% Mounted on
devtmpfs         1960468        8   1960460   1% /dev
tmpfs            1967532    39856   1927676   3% /dev/shm
tmpfs            1967532     1664   1965868   1% /run
tmpfs            1967532        0   1967532   0% /sys/fs/cgroup
/dev/sdb3      372305920  9853856 360835712   3% /
/dev/sdb3      372305920  9853856 360835712   3% /var/lib/named
/dev/sdb3      372305920  9853856 360835712   3% /var/lib/mariadb
/dev/sdb3      372305920  9853856 360835712   3% /var/tmp
/dev/sdb3      372305920  9853856 360835712   3% /.snapshots
/dev/sdb3      372305920  9853856 360835712   3% /var/opt
/dev/sdb3      372305920  9853856 360835712   3% /var/crash
/dev/sdb3      372305920  9853856 360835712   3% /var/lib/machines
/dev/sdb3      372305920  9853856 360835712   3% /var/lib/pgsql
/dev/sdb3      372305920  9853856 360835712   3% /var/lib/mysql
/dev/sdb3      372305920  9853856 360835712   3% /var/lib/mailman
/dev/sdb3      372305920  9853856 360835712   3% /var/lib/libvirt/images
/dev/sdb3      372305920  9853856 360835712   3% /var/log
/dev/sdb3      372305920  9853856 360835712   3% /usr/local
/dev/sdb3      372305920  9853856 360835712   3% /var/cache
/dev/sdb3      372305920  9853856 360835712   3% /boot/grub2/x86_64-efi
/dev/sdb3      372305920  9853856 360835712   3% /tmp
/dev/sdb3      372305920  9853856 360835712   3% /var/spool
/dev/sdb3      372305920  9853856 360835712   3% /srv
/dev/sdb3      372305920  9853856 360835712   3% /boot/grub2/i386-pc
/dev/sdb1         487472     4656    482816   1% /boot/efi
/dev/sdb3      372305920  9853856 360835712   3% /opt
/dev/sdb5      307050000  2319044 304730956   1% /home
tmpfs             393508        0    393508   0% /run/user/483
tmpfs             393508       12    393496   1% /run/user/1000
/dev/sdb2      292671484 38865508 253805976  14% /run/media/myusername/The Mountpoint

我的grub.cfg看起来像这样:

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

### BEGIN /etc/grub.d/00_header ###
set btrfs_relative_path="y"
export btrfs_relative_path
if [ -f ${config_directory}/grubenv ]; then
  load_env -f ${config_directory}/grubenv
elif [ -s $prefix/grubenv ]; then
  load_env
fi

if [ "${env_block}" ] ; then
  load_env -f "${env_block}"
fi

if [ "${next_entry}" ] ; then
   set default="${next_entry}"
   set next_entry=
   save_env next_entry
   if [ "${env_block}" ] ; then
     save_env -f "${env_block}" next_entry
   fi
   set boot_once=true
else
   set default="${saved_entry}"
fi

if [ x"${feature_menuentry_id}" = xy ]; then
  menuentry_id_option="--id"
else                                                                                         
  menuentry_id_option=""                                                                     
fi                                                                                           

export menuentry_id_option                                                                   

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 load_video {
  if [ x$feature_all_video_module = xy ]; then
    insmod all_video
  else
    insmod efi_gop
    insmod efi_uga
    insmod ieee1275_fb
    insmod vbe
    insmod vga
    insmod video_bochs
    insmod video_cirrus
  fi
}

if [ x$feature_default_font_path = xy ] ; then
   font=unicode
else
insmod part_gpt
insmod btrfs
set root='hd1,gpt3'
if [ x$feature_platform_search_hint = xy ]; then
  search --no-floppy --fs-uuid --set=root --hint-bios=hd1,gpt3 --hint-efi=hd1,gpt3 --hint-baremetal=ahci1,gpt3  b7b576c5-366e-4a44-bf79-0eb87357b09d
else
  search --no-floppy --fs-uuid --set=root b7b576c5-366e-4a44-bf79-0eb87357b09d
fi
    font="/usr/share/grub2/unicode.pf2"
fi

if loadfont $font ; then
echo "Please press t to show the boot menu on this console"
  set gfxmode=auto
  load_video
  insmod gfxterm
  set locale_dir=$prefix/locale
  set lang=en_US
  insmod gettext
fi
terminal_output gfxterm
insmod part_gpt
insmod btrfs
set root='hd1,gpt3'
if [ x$feature_platform_search_hint = xy ]; then
  search --no-floppy --fs-uuid --set=root --hint-bios=hd1,gpt3 --hint-efi=hd1,gpt3 --hint-baremetal=ahci1,gpt3  b7b576c5-366e-4a44-bf79-0eb87357b09d
else
  search --no-floppy --fs-uuid --set=root b7b576c5-366e-4a44-bf79-0eb87357b09d
fi
insmod gfxmenu
loadfont ($root)/boot/grub2/themes/openSUSE/ascii.pf2
loadfont ($root)/boot/grub2/themes/openSUSE/DejaVuSans10.pf2
loadfont ($root)/boot/grub2/themes/openSUSE/DejaVuSans12.pf2
loadfont ($root)/boot/grub2/themes/openSUSE/DejaVuSans-Bold14.pf2
insmod png
set theme=($root)/boot/grub2/themes/openSUSE/theme.txt
export theme
if [ x${boot_once} = xtrue ]; then
  set timeout=0
elif [ x$feature_timeout_style = xy ] ; then
  set timeout_style=menu
  set timeout=8
# Fallback normal timeout code in case the timeout_style feature is
# unavailable.
else
  set timeout=8
fi
if [ -n "$extra_cmdline" ]; then
  submenu "Bootable snapshot #$snapshot_num" {
    menuentry "If OK, run 'snapper rollback' and reboot." { true; }
  }
fi
### END /etc/grub.d/00_header ###

### BEGIN /etc/grub.d/00_tuned ###
set tuned_params=""
### END /etc/grub.d/00_tuned ###

### BEGIN /etc/grub.d/10_linux ###
menuentry 'openSUSE Tumbleweed'  --class opensuse --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-b7b576c5-366e-4a44-bf79-0eb87357b09d' {
        load_video
        set gfxpayload=keep
        insmod gzio
        insmod part_gpt
        insmod btrfs
        set root='hd1,gpt3'
        if [ x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root --hint-bios=hd1,gpt3 --hint-efi=hd1,gpt3 --hint-baremetal=ahci1,gpt3  b7b576c5-366e-4a44-bf79-0eb87357b09d
        else
          search --no-floppy --fs-uuid --set=root b7b576c5-366e-4a44-bf79-0eb87357b09d
        fi
        echo    'Loading Linux 4.8.14-1-default ...'
        linuxefi /boot/vmlinuz-4.8.14-1-default root=UUID=b7b576c5-366e-4a44-bf79-0eb87357b09d  ${extra_cmdline} resume=/dev/sdb4 splash quiet showopts
        echo    'Loading initial ramdisk ...'
        initrdefi /boot/initrd-4.8.14-1-default
}
submenu 'Advanced options for openSUSE Tumbleweed' --hotkey=1 $menuentry_id_option 'gnulinux-advanced-b7b576c5-366e-4a44-bf79-0eb87357b09d' {
        menuentry 'openSUSE Tumbleweed, with Linux 4.8.14-1-default' --hotkey=2 --class opensuse --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.8.14-1-default-advanced-b7b576c5-366e-4a44-bf79-0eb87357b09d' {
                load_video
                set gfxpayload=keep
                insmod gzio
                insmod part_gpt
                insmod btrfs
                set root='hd1,gpt3'
                if [ x$feature_platform_search_hint = xy ]; then
                  search --no-floppy --fs-uuid --set=root --hint-bios=hd1,gpt3 --hint-efi=hd1,gpt3 --hint-baremetal=ahci1,gpt3  b7b576c5-366e-4a44-bf79-0eb87357b09d
                else
                  search --no-floppy --fs-uuid --set=root b7b576c5-366e-4a44-bf79-0eb87357b09d
                fi
                echo    'Loading Linux 4.8.14-1-default ...'
                linuxefi /boot/vmlinuz-4.8.14-1-default root=UUID=b7b576c5-366e-4a44-bf79-0eb87357b09d  ${extra_cmdline} resume=/dev/sdb4 splash quiet showopts
                echo    'Loading initial ramdisk ...'
                initrdefi /boot/initrd-4.8.14-1-default
        }
        menuentry 'openSUSE Tumbleweed, with Linux 4.8.14-1-default (recovery mode)' --hotkey=3 --class opensuse --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.8.14-1-default-recovery-b7b576c5-366e-4a44-bf79-0eb87357b09d' {
                load_video
                set gfxpayload=keep
                insmod gzio
                insmod part_gpt
                insmod btrfs
                set root='hd1,gpt3'
                if [ x$feature_platform_search_hint = xy ]; then
                  search --no-floppy --fs-uuid --set=root --hint-bios=hd1,gpt3 --hint-efi=hd1,gpt3 --hint-baremetal=ahci1,gpt3  b7b576c5-366e-4a44-bf79-0eb87357b09d
                else
                  search --no-floppy --fs-uuid --set=root b7b576c5-366e-4a44-bf79-0eb87357b09d
                fi
                echo    'Loading Linux 4.8.14-1-default ...'
                linuxefi /boot/vmlinuz-4.8.14-1-default root=UUID=b7b576c5-366e-4a44-bf79-0eb87357b09d  ${extra_cmdline} 
                echo    'Loading initial ramdisk ...'
                initrdefi /boot/initrd-4.8.14-1-default
        }
}

### END /etc/grub.d/10_linux ###

### BEGIN /etc/grub.d/20_linux_xen ###

### END /etc/grub.d/20_linux_xen ###

### BEGIN /etc/grub.d/20_memtest86+ ###
### END /etc/grub.d/20_memtest86+ ###

### BEGIN /etc/grub.d/30_os-prober ###
### 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/41_custom ###
if [ -f  ${config_directory}/custom.cfg ]; then
  source ${config_directory}/custom.cfg
elif [ -z "${config_directory}" -a -f  $prefix/custom.cfg ]; then
  source $prefix/custom.cfg;
fi
### END /etc/grub.d/41_custom ###

### BEGIN /etc/grub.d/80_suse_btrfs_snapshot ###
if [ -f "/.snapshots/grub-snapshot.cfg" ]; then
  source "/.snapshots/grub-snapshot.cfg"
fi
### END /etc/grub.d/80_suse_btrfs_snapshot ###

### BEGIN /etc/grub.d/90_persistent ###
### END /etc/grub.d/90_persistent ###

### BEGIN /etc/grub.d/95_textmode ###

    # On EFI systems we can only have graphics *or* serial, so allow the user
    # to switch between the two
    hiddenentry 'Text mode' --hotkey 't' {
        set textmode=true
        terminal_output console
    }
### END /etc/grub.d/95_textmode ###

如何阻止 GRUB 冻结?

答案1

您能否发布df有关 grub 配置的输出并进行描述。还解释一下“GRUB from freeze”到底是什么意思?将有助于调试。

相关内容