LINUX.ORG.RU

Gentoo не может найти корневое устройство

 


0

1

Делаю загрузочную флешку с Gentoo x86. В качестве конфига ядра использовал genkernel. Ядро 4.1.0. При тестировании флешки загружается ядро, а потом выдает:

Could not find root block device in UUID ...
И дальше предлагает выбрать правильный UUID корневого устройства. Но дело в том, что если нажать Enter, то система продолжает грузиться нормально и начинает нормально работать. Я не понимаю, что это за ошибка и почему она происходит, у меня ни разу такого не было. Гуглил на эту тему. Везде предлагают включить в ядре поддержку конкретного SATA-контроллера, но ведь если бы она у меня не была включена, ядро бы вообще не загрузилось. Выдало бы kernel panic и все. А оно после нажатия на Enter грузится и находится в работоспособном состоянии. Как исправить эту ошибку?
Мой /etc/fstab:
UUID=4fad14cf-baa5-46b6-8989-595e58423d3d /	ext4	noatime	0 1
UUID=8abbb4fd-4b92-4806-91cd-d9a9dc3b04cb /home	ext4	defaults 0 1
blkid:
/dev/sda1: LABEL="root" UUID="e1129e3a-30e4-4ef4-958d-c4ffbc816a38" TYPE="ext4" PARTUUID="00016d82-01"
/dev/sda2: LABEL="home" UUID="62e7b1ee-2308-4b8f-ac4e-78f677e7068e" TYPE="ext4" PARTUUID="00016d82-02"
/dev/sda3: UUID="c0d6d6cc-7904-447e-a386-1891b7334e5e" TYPE="swap" PARTUUID="00016d82-03"
/dev/sdb1: LABEL="LiveFlash_Root" UUID="4fad14cf-baa5-46b6-8989-595e58423d3d" TYPE="ext4" PARTUUID="c3072e18-01"
/dev/sdb2: LABEL="LiveFlash_Home" UUID="8abbb4fd-4b92-4806-91cd-d9a9dc3b04cb" TYPE="ext4" PARTUUID="c3072e18-02"

★★★★★

Ты б параметры ядра показал. Не сильно силён в этой теме, но я бы копал в сторону root= vs real_root=

Kroz ★★★★★
()
Ответ на: комментарий от Kroz

/etc/default/grub
/boot/grub/grub.cfg
Я не понимаю, почему именно на загрузочной флешке такое происходит, а на настольной системе все в порядке. В качестве настольной системы устанавливал много раз, ни разу ничего подобного не было.
Как можно редактировать параметр root в GRUB 2? grub.cfg вручную редактировать не рекомендуется, а в /etc/default/grub такой опции нет.

Rinaldus ★★★★★
() автор топика
Последнее исправление: Rinaldus (всего исправлений: 1)

fstab: UUID=4fad14cf-baa5-46b6-8989-595e58423d3d / ext4 noatime 0 1

/dev/sda1: LABEL=«root» UUID=«e1129e3a-30e4-4ef4-958d-c4ffbc816a38» TYPE=«ext4» PARTUUID=«00016d82-01»

А ничего, что эти UUID какие-то неодинаковые?

OldManClone ★★
()
Ответ на: комментарий от OldManClone

Нет, флешка - это /dev/sdb1. Я же на своей настольной системе ее собираю.

Rinaldus ★★★★★
() автор топика
Ответ на: комментарий от Rinaldus

Я не понимаю, почему именно на загрузочной флешке такое происходит, а на настольной системе все в порядке.

Потому, что на инициализацию ядром USB Flash устройства нужно время, нужно указать параметр со временем задержки.

kostik87 ★★★★★
()
Ответ на: комментарий от Rinaldus

Почитай: /usr/src/linux/Documentation/kernel-parameters.txt тут всё написано.

kostik87 ★★★★★
()
Ответ на: комментарий от kostik87

Печаль. Нашел rootdelay и rootwait, но только дело в том, что они влияют только на первичную корневую систему, а ею является initrd от genkernel. Поэтому на реальную корневую систему они влиять не будут. А лечится все это ручным редактированием скрипта initrd, а где он в genkernel, я не знаю, там вообще черт ногу сломит. Даже не знаю, что делать. Есть мысль отказаться от genkernel. :( Можно еще забить на эту проблему (все равно ведь флешка работает), но это не в моих правилах.

Rinaldus ★★★★★
() автор топика
Последнее исправление: Rinaldus (всего исправлений: 1)
Ответ на: комментарий от Rinaldus

Нашел rootdelay и rootwait, но только дело в том, что они влияют только на первичную корневую систему, а ею является initrd от genkernel.

Параметр scandelay в initrd придумали в том числе и для этого

Кури сырцы, они рулят, далее все файлы из состава initrd

init

# Apply scan delay if specified
sdelay

<skipped>

		# Scan delay options
		scandelay=*)
			SDELAY=${x#*=}
		;;
		scandelay)
			SDELAY=3
		;;

etc/initrd.scripts

sdelay() {
	# Sleep a specific number of seconds if SDELAY is set
	if [ -n "${SDELAY}" ]
	then
		good_msg "Waiting ${SDELAY} seconds..."
		sleep ${SDELAY}
	elif [ "${CDROOT}" = '1' ]
	then
		good_msg 'Hint: Use scandelay[=seconds] if your live medium is slowand boot fails'
	fi
}

Pinkbyte ★★★★★
()
Последнее исправление: Pinkbyte (всего исправлений: 2)
Ответ на: комментарий от Pinkbyte

Супер, получилось, спасибо большое! Выставил scandelay на 15 секунд и все корректно загрузилось! Проблема решена.
Только можете дать мне один совет напоследок? Я эту флешку собираюсь запускать на самых разных компах, в том числе и на старых (выпуска начала нулевых, главное чтобы поддерживали загрузку с флешек). 15 секунд для scandelay будет в любом случае достаточно или лучше увеличить?

Rinaldus ★★★★★
() автор топика
Последнее исправление: Rinaldus (всего исправлений: 1)
Ответ на: комментарий от Rinaldus

По-моему опыту - и десяти секунд обычно хватает, но я перестраховываюсь и оставляю 15.

У меня с такой задержкой и Rescue-флешка загрузочная(SystemRescueCD) и флешка в Ubiquiti ERLITE-3(Gentoo) работают

Хотя я немного ошибся, на флешке в роутере нет initrd, поэтому там rootdelay, так что это немного не в тему

Pinkbyte ★★★★★
()
Последнее исправление: Pinkbyte (всего исправлений: 1)
21 октября 2016 г.

USB-хост контроллеры добавлял статически в ядро?

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.