Вопрос или проблема
В данный момент я настраиваю 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 может быть разочаровывающим, особенно когда система сообщает, что она не может определить корневое устройство. Рассмотрим подробно рассматриваемую ситуацию и выработаем возможные пути решения.
Анализ Проблемы
-
Ошибка: Сообщение об ошибке, которое вы получаете, свидетельствует о том, что UUID "9a89bdb4-8f36-4aa6-a4c7-831943b0985c" не может быть найдено как действительное корневое устройство.
-
Конфигурация: Ваша система использует NVMe SSD с файловой системой XFS на корневом разделе
/dev/nvme0n1p4
, что подтверждается выводомblkid
. UUID этого раздела соответствует указанному в ошибке. -
Проблемы с драйвером 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 практикам:
-
Используйте ключевые слова: такие как Gentoo Linux, NVMe SSD, конфигурация GRUB2, initramfs, ошибка загрузки.
-
Обеспечьте структуру и ясность: форматируйте текст с подзаголовками и списками для лучшего восприятия.
-
Авторы и ресурсы: Разместите ссылки на официальные ресурсы Gentoo для большего доверия и уточнения методов.
Возвращаясь к вашему конкретному вопросу, ключевой фокус здесь на правильной инициализации поддержки NVMe и корректной работе initramfs. Если последовательно соблюдать указанные шаги, это увеличит шансы устранения проблемы и успешной загрузки в Gentoo Linux на вашем NVMe SSD.