Невозможно загрузиться на Gentoo: GRUB2 – xfs – NVME SSD

Вопрос или проблема

В данный момент я настраиваю Gentoo на новой машине с использованием NVME 500 Гб SSD.

Я перезагружаю компьютер, выбираю диск для загрузки, grub2 инициализируется, и затем, появляется следующая ошибка:

!!Block device UUID="9a89bdb4-8f36-4aa6-a4c7-831943b0985c" is not a valid root device...
!!Could not find the root block device in UUID="9a89bdb4-8f36-4aa6-a4c7-831943b0985c"
Please specify another value or: Press Enter for the same, type "shell" for a shell, or q to skip..." 
root block device() ::

Вот моя текущая схема разделов:

NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
nvme0n1     259:0    0 465.8G  0 disk
├─nvme0n1p1 259:1    0     2M  0 part /boot/efi
├─nvme0n1p2 259:2    0   128M  0 part /boot
├─nvme0n1p3 259:3    0     5G  0 part [SWAP]
├─nvme0n1p4 259:4    0   200G  0 part /
└─nvme0n1p5 259:5    0 260.6G  0 part /home

Вот мой blkid:

/dev/nvme0n1p1: SEC_TYPE="msdos" UUID="DC09-2FD7" TYPE="vfat" PARTLABEL="grub" PARTUUID="2d5991fd-18ac-1148-a4d8-deb02f744ecb"
/dev/nvme0n1p2: UUID="6070-07C6" TYPE="vfat" PARTLABEL="boot" PARTUUID="5dba49e5-03cc-744e-bd47-a7570e83b08c"
/dev/nvme0n1p3: UUID="db229aaf-ddb4-4a86-8075-e7f035bfbf19" TYPE="swap" PARTLABEL="swap" PARTUUID="fdc303cc-e54e-c049-899a-e26286b5ec47"
/dev/nvme0n1p4: UUID="9a89bdb4-8f36-4aa6-a4c7-831943b0985c" TYPE="xfs" PARTLABEL="root" PARTUUID="da6232eb-58ab-9948-a3f6-8a7f14eebde4"
/dev/nvme0n1p5: UUID="e3237966-1b71-44b3-9d96-1ed7cc6f4d84" TYPE="xfs" PARTLABEL="home" PARTUUID="5b294354-fc3b-3148-bba2-418acfbb32bc"

Часть моей конфигурации в /etc/default/grub

GRUB_CMDLINE_LINUX="rootfstype=xfs init=/usr/lib/systemd/systemd"

И вот мой /boot/grub/grub.cfg

#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by 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
if [ "${next_entry}" ] ; then
   set default="${next_entry}"
   set next_entry=
   save_env next_entry
   set boot_once=true
else
   set default="0"
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 xfs
if [ x$feature_platform_search_hint = xy ]; then
  search --no-floppy --fs-uuid --set=root  9a89bdb4-8f36-4aa6-a4c7-831943b0985c
else
  search --no-floppy --fs-uuid --set=root 9a89bdb4-8f36-4aa6-a4c7-831943b0985c
fi
    font="/usr/share/grub/unicode.pf2"
fi

if loadfont $font ; then
  set gfxmode=auto
  load_video
  insmod gfxterm
  set locale_dir=$prefix/locale
  set lang=en_CA
  insmod gettext
fi
terminal_output gfxterm
if [ x$feature_timeout_style = xy ] ; then
  set timeout_style=menu
  set timeout=5
# Fallback normal timeout code in case the timeout_style feature is
# unavailable.
else
  set timeout=5
fi
### END /etc/grub.d/00_header ###

### BEGIN /etc/grub.d/10_linux ###
menuentry 'Gentoo GNU/Linux' --class gentoo --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-9a89bdb4-8f36-4aa6-a4c7-831943b0985c' {
    load_video
    if [ "x$grub_platform" = xefi ]; then
        set gfxpayload=keep
    fi
    insmod gzio
    insmod part_gpt
    insmod fat
    if [ x$feature_platform_search_hint = xy ]; then
      search --no-floppy --fs-uuid --set=root  6070-07C6
    else
      search --no-floppy --fs-uuid --set=root 6070-07C6
    fi
    echo    'Loading Linux x86_64-4.19.44-gentoo ...'
    linux   /kernel-genkernel-x86_64-4.19.44-gentoo root=/dev/nvme0n1p4 ro rootfstype=xfs init=/usr/lib/systemd/systemd
    echo    'Loading initial ramdisk ...'
    initrd  /initramfs-genkernel-x86_64-4.19.44-gentoo
}
submenu 'Advanced options for Gentoo GNU/Linux' $menuentry_id_option 'gnulinux-advanced-9a89bdb4-8f36-4aa6-a4c7-831943b0985c' {
    menuentry 'Gentoo GNU/Linux, with Linux x86_64-4.19.44-gentoo' --class gentoo --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-x86_64-4.19.44-gentoo-advanced-9a89bdb4-8f36-4aa6-a4c7-831943b0985c' {
        load_video
        if [ "x$grub_platform" = xefi ]; then
            set gfxpayload=keep
        fi
        insmod gzio
        insmod part_gpt
        insmod fat
        if [ x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root  6070-07C6
        else
          search --no-floppy --fs-uuid --set=root 6070-07C6
        fi
        echo    'Loading Linux x86_64-4.19.44-gentoo ...'
        linux   /kernel-genkernel-x86_64-4.19.44-gentoo root=/dev/nvme0n1p4 ro rootfstype=xfs init=/usr/lib/systemd/systemd
        echo    'Loading initial ramdisk ...'
        initrd  /initramfs-genkernel-x86_64-4.19.44-gentoo
    }
    menuentry 'Gentoo GNU/Linux, with Linux x86_64-4.19.44-gentoo (recovery mode)' --class gentoo --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-x86_64-4.19.44-gentoo-recovery-9a89bdb4-8f36-4aa6-a4c7-831943b0985c' {
        load_video
        if [ "x$grub_platform" = xefi ]; then
            set gfxpayload=keep
        fi
        insmod gzio
        insmod part_gpt
        insmod fat
        if [ x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root  6070-07C6
        else
          search --no-floppy --fs-uuid --set=root 6070-07C6
        fi
        echo    'Loading Linux x86_64-4.19.44-gentoo ...'
        linux   /kernel-genkernel-x86_64-4.19.44-gentoo root=/dev/nvme0n1p4 ro single rootfstype=xfs init=/usr/lib/systemd/systemd
        echo    'Loading initial ramdisk ...'
        initrd  /initramfs-genkernel-x86_64-4.19.44-gentoo
    }
    menuentry 'Gentoo GNU/Linux, with Linux 4.19.44-gentoo' --class gentoo --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.19.44-gentoo-advanced-9a89bdb4-8f36-4aa6-a4c7-831943b0985c' {
        load_video
        if [ "x$grub_platform" = xefi ]; then
            set gfxpayload=keep
        fi
        insmod gzio
        insmod part_gpt
        insmod fat
        if [ x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root  6070-07C6
        else
          search --no-floppy --fs-uuid --set=root 6070-07C6
        fi
        echo    'Loading Linux 4.19.44-gentoo ...'
        linux   /vmlinuz-4.19.44-gentoo root=/dev/nvme0n1p4 ro rootfstype=xfs init=/usr/lib/systemd/systemd
        echo    'Loading initial ramdisk ...'
        initrd  /initramfs-genkernel-x86_64-4.19.44-gentoo
    }
    menuentry 'Gentoo GNU/Linux, with Linux 4.19.44-gentoo (recovery mode)' --class gentoo --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.19.44-gentoo-recovery-9a89bdb4-8f36-4aa6-a4c7-831943b0985c' {
        load_video
        if [ "x$grub_platform" = xefi ]; then
            set gfxpayload=keep
        fi
        insmod gzio
        insmod part_gpt
        insmod fat
        if [ x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root  6070-07C6
        else
          search --no-floppy --fs-uuid --set=root 6070-07C6
        fi
        echo    'Loading Linux 4.19.44-gentoo ...'
        linux   /vmlinuz-4.19.44-gentoo root=/dev/nvme0n1p4 ro single rootfstype=xfs init=/usr/lib/systemd/systemd
        echo    'Loading initial ramdisk ...'
        initrd  /initramfs-genkernel-x86_64-4.19.44-gentoo
    }
}

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

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

### 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 ###

И наконец, вот содержимое моего etc/fstab:

# /etc/fstab: static file system information.
#
# noatime turns off atimes for increased performance (atimes normally aren't
# needed); notail increases performance of ReiserFS (at the expense of storage
# efficiency).  It's safe to drop the noatime options if you want and to
# switch between notail / tail freely.
#
# The root filesystem should have a pass number of either 0 or 1.
# All other filesystems should have a pass number of 0 or greater than 1.
#
# See the manpage fstab(5) for more information.
#

# <fs>                  <mountpoint>    <type>          <opts>          <dump/pass>

# NOTE: If your BOOT partition is ReiserFS, add the notail option to opts.
#
# NOTE: Even though we list ext4 as the type here, it will work with ext2/ext3
#       filesystems.  This just tells the kernel to use the ext4 driver.
#
# NOTE: You can use full paths to devices like /dev/sda3, but it is often
#       more reliable to use filesystem labels or UUIDs. See your filesystem
#       documentation for details on setting a label. To obtain the UUID, use
#       the blkid(8) command.

#LABEL=boot             /boot           ext4            noauto,noatime  1 2
#UUID=58e72203-57d1-4497-81ad-97655bd56494              /               ext4            noatime         0 1
#LABEL=swap             none            swap            sw              0 0
#/dev/cdrom             /mnt/cdrom      auto            noauto,ro       0 0

# /dev/nvme0n1p4
UUID=9a89bdb4-8f36-4aa6-a4c7-831943b0985c       /               xfs             rw,relatime,attr2,inode64,noquota       0 1

# /dev/nvme0n1p2
UUID=6070-07C6          /boot           vfat            rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro  0 2

# /dev/nvme0n1p1
UUID=DC09-2FD7          /boot/efi       vfat            rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro  0 2

# /dev/nvme0n1p5
UUID=e3237966-1b71-44b3-9d96-1ed7cc6f4d84       /home           xfs             rw,relatime,attr2,inode64,noquota       0 2

# /dev/nvme0n1p3
UUID=3128bf96-71f7-4a95-a81c-f82788c37f4f       none            swap            defaults        0 0

Я также сделал следующее для устранения неполадок:

  • включил поддержку NVME в ядре
  • включил поддержку файловой системы XFS в ядре
  • загрузил grub без параметра rootfstype=xfs
  • заменил UUID на /dev/nvme0n1p4 в файле fstab
  • утопил свое горе в алкоголе

Эта проблема не подходит, так как это была проблема с драйвером USB. И эта также не помогла.

!!Block device UUID="9a89bdb4-8f36-4aa6-a4c7-831943b0985c" is not a valid root device...
!!Could not find the root block device in UUID="9a89bdb4-8f36-4aa6-a4c7-831943b0985c"
Please specify another value or: Press Enter for the same, type "shell" for a shell, or q to skip..." 
root block device() ::

Это не похоже на сообщение, сгенерированное GRUB.

Возможно, ваш GRUB работает правильно, но в вашем initramfs отсутствует что-то важное, например, драйвер NVMe или модуль поддержки типа раздела GPT (если, конечно, вы не встроили их в ядро). И, возможно, это из-за initramfs Gentoo переходит в режим устранения неполадок?

Похоже, в Gentoo есть несколько способов создать initramfs файл: genkernel может это сделать, или вы можете использовать dracut. Каким методом вы пользуетесь?

Вы можете ввести shell в этот запрос и проверить, присутствуют ли устройства /dev/nvme*, какие модули ядра загружены и т.д. Если в вашем утилите создания initramfs нет поддержки системных дисков NVMe, может быть, достаточно просто указать утилите, что “initramfs должен загружать модули nvme-core.ko и nvme.ko перед попыткой поиска файловой системы root”; возможно, утилита не может определить это автоматически.

.

Ответ или решение

Добрый день. Столкновение с проблемами загрузки в Gentoo Linux может быть разочаровывающим, особенно когда система сообщает, что она не может определить корневое устройство. Рассмотрим подробно рассматриваемую ситуацию и выработаем возможные пути решения.

Анализ Проблемы

  1. Ошибка: Сообщение об ошибке, которое вы получаете, свидетельствует о том, что UUID "9a89bdb4-8f36-4aa6-a4c7-831943b0985c" не может быть найдено как действительное корневое устройство.

  2. Конфигурация: Ваша система использует NVMe SSD с файловой системой XFS на корневом разделе /dev/nvme0n1p4, что подтверждается выводом blkid. UUID этого раздела соответствует указанному в ошибке.

  3. Проблемы с драйвером NVMe: Судя по вашему описанию, загрузка прекращается на этапе, где должно использоваться initramfs. Это происходит до того, как ядро опознает доступные устройства хранения, что предполагает проблемы с модулем драйвера для NVMe.

Возможные Решения

Форест (FOREST) Метод

  • F – Фокус на основных проблемах: В первую очередь, обратите внимание на поддержку NVMe в вашей системе. Убедитесь, что ядро поддерживает NVMe, и модули загружаются корректно.

  • O – Очертите детали: Убедитесь, что ваш initramfs содержит необходимые модули для поддержки NVMe и файловой системы XFS. Используйте команду shell в проблемном диалоге, чтобы проверить наличие /dev/nvme* и убедиться, что модули nvme-core.ko и nvme.ko загружены.

  • R – Ревизия существующих настроек: Обратите внимание на файл grub.cfg и fstab. Хотя они кажутся корректными, всегда стоит удостовериться, что данные о разделах и UUID совпадают с действительными.

  • E – Эффективное изучение документации: Обратитесь к официальной документации Gentoo, в частности по initramfs и поддержке NVMe. Если вы используете genkernel для создания образа, убедитесь, что он правильно настраивает поддержку необходимых модулей.

  • S – Систематическое исправление: Попробуйте создать новый initramfs с dracut, если genkernel вызывает проблемы. Это может быть сделано командой dracut --kver $(uname -r), которая пересоберет initramfs с актуальной поддержкой устройств.

  • T – Тестирование и проверка: После выполнения вышеуказанных шагов перезагрузите систему и протестируйте загрузку. В случае успеха, сохраните настройки и продолжите работу, в противном случае, повторите отладку.

SEO Оптимизация

Для привлечения наибольшего количества пользователей и обеспечения их нужной информацией, следуйте таким SEO практикам:

  1. Используйте ключевые слова: такие как Gentoo Linux, NVMe SSD, конфигурация GRUB2, initramfs, ошибка загрузки.

  2. Обеспечьте структуру и ясность: форматируйте текст с подзаголовками и списками для лучшего восприятия.

  3. Авторы и ресурсы: Разместите ссылки на официальные ресурсы Gentoo для большего доверия и уточнения методов.

Возвращаясь к вашему конкретному вопросу, ключевой фокус здесь на правильной инициализации поддержки NVMe и корректной работе initramfs. Если последовательно соблюдать указанные шаги, это увеличит шансы устранения проблемы и успешной загрузки в Gentoo Linux на вашем NVMe SSD.

Оцените материал
Добавить комментарий

Капча загружается...