[РЕШЕНО]FlashStick и Gentoo[ЧАСТИЧНО]

Доброго времени суток. Решил установить себе на флешку gentoo. Разбил диск на два раздела :
/dev/sdb1 1400MB- vfat
/dev/sdb2 600MB - ext2.
Через catalyst сделал свою сборку Livecd, настроил и закинул на флешку. Ядро собрал через genkernel. Вот grub.conf:

title Load Gentoo On the Flash ( GentooOF =) ) 
root (hd0,1)
kernel /boot/kernel-genkernel-x86-2.6.27-gentoo-r10 vga=0x317 real_root=/dev/sdb2 ramdisk_size=8192 root=/dev/ram0 ro splash=verbose console=tty1 quiet
initrd /boot/initramfs-genkernel-x86-2.6.27-gentoo-r10

Вкомпилил нужное в ядро(рамдиск, фс). Вот fstab, хотя он здесь не при чём:
/dev/sdb2 / ext2 noatime 0 1
/dev/cdrom /mnt/cdrom auto noauto,ro 0 0
shm /dev/shm tmpfs nodev,nosuid,noexec 0 0

Теперь в чём проблема. Проблема самая насущная :
Device /dev/sdb2 is not a valid root device. - Раз !(5)!
Could not find any root device in . - Следом !(5)!

Неспав пару ночей и перелопатив все возможные форумы нашёл след.:
http://eee-pc.ru/forum/viewtopic.php?id=617&p=2. На этом форуме один человек(как бы мне хотелось чем-то заменить это слово) нашёл решение. initramfs монтирует rootfs до того как ядро его определит. Он всё сделал, исправил, настроил, оно всё заработало, но решение не выложил.

Рылся в init скрипте. Нашёл то что нужно. Возможно смог бы что-то исправить да только после даже тривиальных изменений в init-скрипте при передаче его ядру через init=/linuxrc(положил его в корень /dev/sdb2) ядро никак не реагирует. Очень прошу помощи. Заранее спасибо.
Ах да : если после !(5)! ввести /dev/sdb2 всё нормально грузится.

Что нет никаких идей ? Никто

Что нет никаких идей ? Никто никогда не передавал ядру свой init-скрипт ?

Вообщем как всегда... По

Вообщем как всегда... По этому документу http://en.gentoo-wiki.com/wiki/Initramfs научился создавать свой образ ramfs. Взял за основу проблемный образ. Всё что нужно это правильно подправить init-скрипт(пробовал изменять - работает). Вот этот скрипт: http://pastebin.com/m1a0a37d8
Наивно конечно с моей стороны, но всё же эта секция # Determine root device
отвечает за root device. Где-то там проблема...

#Спустя какое-то время(минут15)

В том скрипте sleep 15 добавил я. Это решает проблему. Конечно надо его уменьшить до необходимого,нужного и желаемого времени. Но всё же хотелось бы решить проблему иным путём. Хотя тот факт что ядро ещё не загрузило необходимый код иным путём может решить и нельзя.
PS::.. Напишите хоть кто-то что-нибудь, а то я сомневаюсь что кто-то читает.

Выкладываю здесь содержимое init-скрипта(остальные инструкции можно получить прочитав топик):

#!/bin/sh

. /etc/initrd.defaults
. /etc/initrd.scripts

splash() {
	return 0
}

[ -e /etc/initrd.splash ] && . /etc/initrd.splash

# Clean input/output
exec >${CONSOLE} <${CONSOLE} 2>&1

if [ "$$" != '1' ]
then
	echo '/linuxrc has to be run as the init process as the one'
	echo 'with a PID of 1. Try adding init="/linuxrc" to the'
	echo 'kernel command line or running "exec /linuxrc".'
	exit 1
fi

mount -t proc proc /proc >/dev/null 2>&1
mount -o remount,rw / >/dev/null 2>&1

# Set up symlinks
/bin/busybox --install -s

if [ "$0" = '/init' ]
then
	[ -e /linuxrc ] && rm /linuxrc
	 
	if [ -e /bin/lvm ]
	then
		ln -s /bin/lvm /bin/vgscan
		ln -s /bin/lvm /bin/vgchange
	fi
fi

quiet_kmsg

CMDLINE=`cat /proc/cmdline`
# Scan CMDLINE for any specified real_root= or cdroot arguments
REAL_ROOT=''
FAKE_ROOT=''
REAL_ROOTFLAGS=''
CRYPT_SILENT=0
for x in ${CMDLINE}
do
	case "${x}" in
		real_root\=*)
			REAL_ROOT=`parse_opt "${x}"`
		;;
		root\=*)
			FAKE_ROOT=`parse_opt "${x}"`
		;;
		subdir\=*)
			SUBDIR=`parse_opt "${x}"`
		;;
		real_init\=*)
			REAL_INIT=`parse_opt "${x}"`
		;;
		init_opts\=*)
			INIT_OPTS=`parse_opt "${x}"`
		;;
		# Livecd options
		cdroot)
			CDROOT=1
		;;
		cdroot\=*)
			CDROOT=1
			CDROOT_DEV=`parse_opt "${x}"`
		;;
		cdroot_type\=*)
			CDROOT_TYPE=`parse_opt "${x}"`
		;;
		# Start livecd loop, looptype options
		loop\=*)
			LOOP=`parse_opt "${x}"`
		;;
		looptype\=*)
			LOOPTYPE=`parse_opt "${x}"`
		;;
		# Start Volume manager options 
		dolvm)
			USE_LVM_NORMAL=1
		;;
		dolvm2)
			bad_msg 'Using dolvm2 is deprecated, use dolvm, instead.'
			USE_LVM_NORMAL=1
		;;
		domdadm)
			USE_MDADM=1
		;;
		dodmraid)
			USE_DMRAID_NORMAL=1
		;;
		dodmraid\=*)
			DMRAID_OPTS=`parse_opt "${x}"`
			USE_DMRAID_NORMAL=1
		;;
		doevms)
			USE_EVMS_NORMAL=1
		;;
		doevms2)
			bad_msg 'Using doevms2 is deprecated, use doevms, instead.'
			USE_EVMS_NORMAL=1
		;;
		# Debug Options
		debug)
			DEBUG='yes'
		;;
		# Scan delay options 
		scandelay\=*)
			SDELAY=`parse_opt "${x}"`
		;;
		scandelay)
			SDELAY=10
		;;
		# Module no-loads
		doload\=*)
			MDOLIST=`parse_opt "${x}"`
			MDOLIST="`echo ${MDOLIST} | sed -e 's/,/ /g'`"
		;;
		nodetect)
			NODETECT=1
		;;
		noload\=*)
			MLIST=`parse_opt "${x}"`
			MLIST="`echo ${MLIST} | sed -e 's/,/ /g'`"
			export MLIST
		;;
		# Redirect output to a specific tty
		CONSOLE\=*\|console\=*)
			CONSOLE=`parse_opt "${x}"`
			exec >${CONSOLE} <${CONSOLE} 2>&1
		;;
		# /dev/md
		lvmraid\=*)
			RAID_DEVICES="`parse_opt ${x}`"
			RAID_DEVICES="`echo ${RAID_DEVICES} | sed -e 's/,/ /g'`"
		;;
		part\=*)
			MDPART=`parse_opt "${x}"`
		;;
		# NFS
		ip\=*)
			IP=`parse_opt "${x}"`
		;;
		nfsroot\=*)
			NFSROOT=`parse_opt "${x}"`
		;;
		crypt_root\=*)
			CRYPT_ROOT=`parse_opt "${x}"`
		;;
		crypt_swap\=*)
			CRYPT_SWAP=`parse_opt "${x}"`
		;;
		root_key\=*)
			CRYPT_ROOT_KEY=`parse_opt "${x}"`
		;;
		root_keydev\=*)
			CRYPT_ROOT_KEYDEV=`parse_opt "${x}"`
		;;
		swap_key\=*)
			CRYPT_SWAP_KEY=`parse_opt "${x}"`
		;;
		swap_keydev\=*)
			CRYPT_SWAP_KEYDEV=`parse_opt "${x}"`
		;;
		real_resume\=*)
			REAL_RESUME=`parse_opt "${x}"`
		;;
		noresume)
			NORESUME=1
		;;
		crypt_silent)
			CRYPT_SILENT=1
		;;
		real_rootflags\=*)
			REAL_ROOTFLAGS=`parse_opt "${x}"`
		;;
		keymap\=*)
			keymap=`parse_opt "${x}"`
		;;
	esac
done

if [ -z "${REAL_ROOT}" -a \( "${CDROOT}" -eq 0 \)  -a \( "${FAKE_ROOT}" != "/dev/ram0" \) ]
then
	REAL_ROOT="${FAKE_ROOT}"	
fi

splash 'init'

detect_sbp2_devices
cmdline_hwopts

# Mount sysfs
mount_sysfs

# Setup hotplugging for firmware loading
setup_hotplug

# Load modules listed in MY_HWOPTS if /lib/modules exists for the running kernel
if [ -z "${DO_modules}" ]
then
	good_msg 'Skipping module load; disabled via commandline'
elif [ -d "/lib/modules/${KV}" ]
then
	good_msg 'Loading modules'
	# Load appropriate kernel modules
	if [ "${NODETECT}" != '1' ]
	then
		for modules in ${MY_HWOPTS}
		do
			modules_scan ${modules}
		done
	fi
	# Always eval doload=...
	modules_load ${MDOLIST}
else
	good_msg 'Skipping module load; no modules in the initrd!'
fi

# Delay if needed for USB hardware
sdelay

# Start device manager
start_dev_mgr

# Setup md device nodes if they dont exist
setup_md_device

# Scan volumes
startVolumes

setup_keymap

# Initialize LUKS root device except for livecd's
if [ "${CDROOT}" != 1 ]
then
	startLUKS
	if [ "${NORESUME}" != '1' ] && [ -n "${REAL_RESUME}" ]
	then
		swsusp_resume
#		suspend_resume
		tuxonice_resume
	fi
fi

mkdir -p "${NEW_ROOT}"
CHROOT="${NEW_ROOT}"

# Run debug shell if requested
rundebugshell

if [ "${CDROOT}" = '1' ]
then
	good_msg "Making tmpfs for ${NEW_ROOT}"
	mount -t tmpfs tmpfs "${NEW_ROOT}"
	
	for i in dev mnt mnt/cdrom mnt/livecd mnt/key tmp tmp/.initrd mnt/gentoo sys
	do
		mkdir -p "${NEW_ROOT}/${i}"
		chmod 755 "${NEW_ROOT}/${i}"
	done
	[ ! -e "${NEW_ROOT}/dev/null" ] && mknod "${NEW_ROOT}"/dev/null c 1 3
	[ ! -e "${NEW_ROOT}/dev/console" ] && mknod "${NEW_ROOT}"/dev/console c 5 1

	# For SGI LiveCDs ...
	if [ "${LOOPTYPE}" = "sgimips" ]
	then
		[ ! -e "${NEW_ROOT}/dev/sr0" ] && mknod "${NEW_ROOT}/dev/sr0" b 11 0
		[ ! -e "${NEW_ROOT}/dev/loop0" ] && mknod "${NEW_ROOT}/dev/loop0" b 7 0
	fi

	# Required for splash to work.  Not an issue with the initrd as this
	# device isn't created there and is not needed.
	if [ -e /dev/tty1 ]
	then
		[ ! -e "${NEW_ROOT}/dev/tty1" ] && mknod "${NEW_ROOT}/dev/tty1" c 4 1
	fi

	if [ "${REAL_ROOT}" != "/dev/nfs" ] && [ "${LOOPTYPE}" != "sgimips" ]
	then
		bootstrapCD
	fi

	if [ "${REAL_ROOT}" = '' ]
	then
		echo -n -e "${WARN}>>${NORMAL}${BOLD} No bootable medium found. Waiting for new devices"
		
		COUNTER=0
		while [ ${COUNTER} -lt 3 ]; do
			sleep 3
			echo -n '.'
			let COUNTER=${COUNTER}+1
		done

		sleep 1
		echo -e "${NORMAL}"
		bootstrapCD
	fi

	if [ "${REAL_ROOT}" = '' ]
	then
		# Undo stuff
		umount  "${NEW_ROOT}/dev" 2>/dev/null
		umount  "${NEW_ROOT}/sys" 2>/dev/null
		umount /sys 2>/dev/null

		umount  "${NEW_ROOT}"
		rm -rf  "${NEW_ROOT}/*"

		bad_msg 'Could not find CD to boot, something else needed!'
		CDROOT=0
	fi
fi

# Determine root device
good_msg 'Determining root device...Sleeping 15 sec first =)'
while true
do
	sleep 15
	while [ "${got_good_root}" != '1' ]
	do
		case "${REAL_ROOT}" in
			LABEL\=*|UUID\=*)
			
				ROOT_DEV=""
				retval=1
				
				if [ "${retval}" -ne '0' ]; then
					ROOT_DEV=`findfs "${REAL_ROOT}" 2>/dev/null`
					retval=$?
				fi
				
				if [ "$retval" -ne '0' ]; then
					ROOT_DEV=`busybox findfs "${REAL_ROOT}" 2>/dev/null`
					retval=$?
				fi
				
				if [ "${retval}" -ne '0' ]; then
					ROOT_DEV=`blkid -t "${REAL_ROOT}" | cut -d ":" -f 1 2>/dev/null`
					retval=$?
				fi
				
				if [ "${retval}" -eq '0' ] && [ -n "${ROOT_DEV}" ]; then
					good_msg "Detected real_root=${ROOT_DEV}"
					REAL_ROOT="${ROOT_DEV}"
				else
					whereis "REAL_ROOT" "root block device"
					got_good_root=0
					continue
				fi
				;;
		esac
				
		if [ "${REAL_ROOT}" = '' ]
		then
			# No REAL_ROOT determined/specified. Prompt user for root block device.
			whereis "REAL_ROOT" "root block device"
			got_good_root=0

		# Check for a block device or /dev/nfs
		elif [ -b "${REAL_ROOT}" ] || [ "${REAL_ROOT}" = "/dev/nfs" ]
		then
			got_good_root=1

		else
			bad_msg "Block device ${REAL_ROOT} is not a valid root device..."
			REAL_ROOT=""
			got_good_root=0
		fi
	done


	if [ "${CDROOT}" = 1 -a "${got_good_root}" = '1' -a "${REAL_ROOT}" != "/dev/nfs" ]
	then
		# CD already mounted; no further checks necessary
		break
	elif [ "${LOOPTYPE}" = "sgimips" ]
	then
		# sgimips mounts the livecd root partition directly
		# there is no isofs filesystem to worry about
		break
	else
		good_msg "Mounting root..."

		# Try to mount the device as ${NEW_ROOT}
		if [ "${REAL_ROOT}" = '/dev/nfs' ]; then
			findnfsmount
		else
			# mount ro so fsck doesn't barf later
			if [ "${REAL_ROOTFLAGS}" = '' ]; then
				mount -o ro ${REAL_ROOT} ${NEW_ROOT}
			else
				good_msg "Using mount -o ro,${REAL_ROOTFLAGS}"
				mount -o ro,${REAL_ROOTFLAGS} ${REAL_ROOT} ${NEW_ROOT}
			fi
		fi
		
		# If mount is successful break out of the loop 
		# else not a good root and start over.
		if [ "$?" = '0' ]
		then
			if [ -d ${NEW_ROOT}/dev -a -x ${NEW_ROOT}/sbin/init ]
			then
				break
			else
				bad_msg "The filesystem mounted at ${REAL_ROOT} does not appear to be a valid /, try again"
				got_good_root=0
				REAL_ROOT=''
			fi
		else
			bad_msg "Could not mount specified ROOT, try again"
			got_good_root=0
			REAL_ROOT=''
		fi
	fi
done
# End determine root device

#verbose_kmsg

# If CD root is set determine the looptype to boot
if [ "${CDROOT}" = '1' ]
then
	good_msg 'Determining looptype ...'
	cd "${NEW_ROOT}"

	# Find loop and looptype
	[ -z "${LOOP}" ] && find_loop
	[ -z "${LOOPTYPE}" ] && find_looptype

	cache_cd_contents

	# If encrypted, find key and mount, otherwise mount as usual
	if [ -n "${CRYPT_ROOT}" ] 
	then
		CRYPT_ROOT_KEY="$(head -n 1 ${NEW_ROOT}/mnt/cdrom/livecd)"
		CRYPT_ROOT='/dev/loop0'
		good_msg 'You booted an encrypted livecd' "${CRYPT_SILENT}"

		losetup /dev/loop0 "${NEW_ROOT}/mnt/cdrom/${LOOPEXT}${LOOP}"
		test_success 'Preparing loop filesystem'

		startLUKS

		case ${LOOPTYPE} in
			normal)
				MOUNTTYPE="ext2"
				;;
			*)
				MOUNTTYPE="${LOOPTYPE}"
				;;
		esac
		mount -t "${MOUNTTYPE}" -o ro /dev/mapper/root "${NEW_ROOT}/mnt/livecd"
		test_success 'Mount filesystem'
		FS_LOCATION='mnt/livecd'
	# Setup the loopback mounts, if unencrypted
	else
		if [ "${LOOPTYPE}" = 'normal' ]
		then
			good_msg 'Mounting loop filesystem'
			mount -t ext2 -o loop,ro "${NEW_ROOT}/mnt/cdrom/${LOOPEXT}${LOOP}" "${NEW_ROOT}/mnt/livecd"
			test_success 'Mount filesystem'
			FS_LOCATION='mnt/livecd'
		elif [ "${LOOPTYPE}" = 'squashfs' ]
		then
			good_msg 'Mounting squashfs filesystem'
			mount -t squashfs -o loop,ro "${NEW_ROOT}/mnt/cdrom/${LOOPEXT}${LOOP}" "${NEW_ROOT}/mnt/livecd"
			test_success 'Mount filesystem'
			FS_LOCATION='mnt/livecd'
		elif [ "${LOOPTYPE}" = 'gcloop' ]
		then
			good_msg 'Mounting gcloop filesystem'
			echo ' ' | losetup -E 19 -e ucl-0 -p0 "${NEW_ROOT}/dev/loop0" "${NEW_ROOT}/mnt/cdrom/${LOOPEXT}${LOOP}"
			test_success 'losetup the loop device'

			mount -t ext2 -o ro "${NEW_ROOT}/dev/loop0" "${NEW_ROOT}/mnt/livecd"
			test_success 'Mount the losetup loop device'
			FS_LOCATION='mnt/livecd'
		elif [ "${LOOPTYPE}" = 'zisofs' ]
		then
			FS_LOCATION="mnt/cdrom/${LOOPEXT}${LOOP}"
		elif [ "${LOOPTYPE}" = 'noloop' ]
		then
			FS_LOCATION='mnt/cdrom'
		elif [ "${LOOPTYPE}" = 'sgimips' ]
		then
			# getdvhoff finds the starting offset (in bytes) of the squashfs
			# partition on the cdrom and returns this offset for losetup
			#
			# All currently supported SGI Systems use SCSI CD-ROMs, so
			# so we know that the CD-ROM is usually going to be /dev/sr0.
			#
			# We use the value given to losetup to set /dev/loop0 to point
			# to the liveCD root partition, and then mount /dev/loop0 as
			# the LiveCD rootfs
			good_msg 'Locating the SGI LiveCD Root Partition'
			echo ' ' | \
				losetup -o $(getdvhoff "${NEW_ROOT}${REAL_ROOT}" 0) \
					"${NEW_ROOT}${CDROOT_DEV}" \
					"${NEW_ROOT}${REAL_ROOT}"
			test_success 'losetup /dev/sr0 /dev/loop0'
	
			good_msg 'Mounting the Root Partition'
			mount -t squashfs -o ro "${NEW_ROOT}${CDROOT_DEV}" "${NEW_ROOT}/mnt/livecd"
			test_success 'mount /dev/loop0 /'
			FS_LOCATION='mnt/livecd'
		fi
	fi

	# Unpacking additional packages from NFS mount
	# This is useful for adding kernel modules to /lib
	# We do this now, so that additional packages can add whereever they want.
	if [ "${REAL_ROOT}" = '/dev/nfs' ]
	then
		if [ -e "${CHROOT}/mnt/cdrom/add" ]
		then
				for targz in `ls ${CHROOT}/mnt/cdrom/add/*.tar.gz`
				do	
					tarname=`basename ${targz}`
					good_msg "Adding additional package ${tarname}"
					(cd ${CHROOT} ; /bin/tar -xzf ${targz})
				done
		fi
	fi

	
	good_msg "Copying read-write image contents to tmpfs"
	# Copy over stuff that should be writable
	(cd "${NEW_ROOT}/${FS_LOCATION}"; cp -a ${ROOT_TREES} "${NEW_ROOT}")

	# Now we do the links.
	for x in ${ROOT_LINKS}
	do
		if [ -L "${NEW_ROOT}/${FS_LOCATION}/${x}" ]
		then
			ln -s "`readlink ${NEW_ROOT}/${FS_LOCATION}/${x}`" "${x}" 2>/dev/null
		else
			# List all subdirectories of x
			find "${NEW_ROOT}/${FS_LOCATION}/${x}" -type d 2>/dev/null | while read directory
			do
				# Strip the prefix of the FS_LOCATION
				directory="${directory#${NEW_ROOT}/${FS_LOCATION}/}"

				# Skip this directory if we already linked a parent directory
				if [ "${curent_parrent}" != '' ]; then
					var=`echo "${directory}" | grep "^${curent_parrent}"`
					if [ "${var}" != '' ]; then
						continue
					fi
				fi
				# Test if the directory exists already
				if [ -e "/${NEW_ROOT}/${directory}" ]
				then
					# It does exist, link all the individual files
					for file in `ls /${NEW_ROOT}/${FS_LOCATION}/${directory}`
					do
					if [ ! -d "/${NEW_ROOT}/${FS_LOCATION}/${directory}/${file}" ] && [ ! -e "${NEW_ROOT}/${directory}/${file}" ]; then
							ln -s "/${FS_LOCATION}/${directory}/${file}" "${directory}/${file}" 2> /dev/null
						fi
					done
				else
					# It does not exist, make a link to the livecd
					ln -s "/${FS_LOCATION}/${directory}" "${directory}" 2>/dev/null
					current_parent="${directory}"
				fi
			done
		fi
	done

	if [ "${DO_slowusb}" ] || [ "${FORCE_slowusb}" ]
	then
		sleep 10
	fi
	mkdir initrd proc tmp sys 2>/dev/null
	chmod 1777 tmp

	#UML=`cat /proc/cpuinfo|grep UML|sed -e 's|model name.*: ||'`
	#if [ "${UML}" = 'UML' ]
	#then
	#	# UML Fixes
	#	good_msg 'Updating for uml system'
	#fi

	# Let Init scripts know that we booted from CD
	export CDBOOT
	CDBOOT=1
	check_slowusb
	if [ "${DO_slowusb}" ] || [ "${FORCE_slowusb}" ]
	then
		sleep 10
	fi
fi

# Execute script on the cdrom just before boot to update things if necessary
cdupdate

if [ "${SUBDIR}" != '' -a -e "${CHROOT}/${SUBDIR}" ]
then
	good_msg "Entering ${SUBDIR} to boot"
	CHROOT="${CHROOT}/${SUBDIR}"
fi

verbose_kmsg

# There used to be some initrd/2.4 code here, but it's gone now :
echo -ne "${GOOD}>>${NORMAL}${BOLD} Booting (initramfs)${NORMAL}"
if [ ! -e "${CHROOT}/dev/console" ] || [ ! -e "${CHROOT}/dev/null" ]
then
	echo -ne "${BAD}>>${NORMAL}${BOLD} ERROR: your /dev is missing files required to boot (console and null)${NORMAL}"
elif [ -e /etc/initrd.splash -a ! -e "${CHROOT}/dev/tty1" ]
then
	echo -ne "${BAD}>>${NORMAL}${BOLD} ERROR: your /dev is missing tty1, which is required for splash${NORMAL}"
fi

cd "${CHROOT}"
mkdir "${CHROOT}/proc" "${CHROOT}/sys" 2>/dev/null
echo -ne "${BOLD}.${NORMAL}"
umount /sys || echo '*: Failed to unmount the initrd /sys!'
umount /proc || echo '*: Failed to unmount the initrd /proc!'
echo -e "${BOLD}.${NORMAL}"

exec switch_root -c "/dev/console" "${CHROOT}" "${REAL_INIT:-/sbin/init}" "${INIT_OPTS}"

# If we get here, something bad has happened
splash 'verbose'

echo 'A fatal error has probably occured since /sbin/init did not'
echo 'boot correctly. Trying to open a shell...'
echo
exec /bin/bash
exec /bin/sh
exec /bin/ash
exec sh

НИКТО НИКОГДА НЕ ОСТАВЛЯЙТЕ РЕШЕННЫЕ ПРОБЛЕМЫ БЕЗ ПРИМЕРОВ ИЛИ ОТВЕТОВ(как сделал один товарищ). И даже намерения типа : "Предлагаю создать статью на вики по этой проблеме всем дружно" или "Могу прикрепить если надо" не устоят перед зыбким песком времени =). Когда кому-то будет надо - будет просто поздно уже и т.д.

Я читаю, но умного

Я читаю, но умного посоветовать не могу пока (-:Е

Разве что вот монтировать устройство по uuid или метке тома. Поможет ли проблеме, не знаю (хотя возможно), но лучше будет точно. Мало ли как устройства определятся

Текстовый редактор vi имеет два режима работы: в первом он пищит, а во втором — всё портит.

Дело то не в определении

Дело то не в определении устройств. Самый первый пост: "если потом снова ввести тоже имя /dev/sdb2 всё работает..." - в этом духе.
Про uuid и label другая история. Хочу так сделать, только вот образ у меня маленький, busybox там, mdev вместо udev и диски не определяются по этим параметрам.

а если при загрузке флешка

а если при загрузке флешка определяется, как /dev/sda2, а не /dev/sdb2?.

То она не загрузится, в целом

То она не загрузится, в целом ошибка такая же, но по сути определённо другая. В 1-ом случае ядро не загрузило нужный код, во втором не верно указан раздел. Чтобы использовать UUID, LABEL и т.д., я хочу попробовать mkinitcpio из Arch'a.

Кто-нибудь его в Gentoo встречал ?

Вообще, думется, вполне можно

Вообще, думется, вполне можно написать ебилд по Арховому PKGBUILD'у.

Текстовый редактор vi имеет два режима работы: в первом он пищит, а во втором — всё портит.

Копания в пакетах Acrh'a,

Копания в пакетах Acrh'a, установка "eдва живого" mkinitcpio ни к чему не привели. Эх, если б как-нибудь udev засунуть в initramfs - проблема была б решена.

Вообще вроде можно. Судя по

Вообще вроде можно. Судя по тому, что гугль вываливает в ответ на "gentoo udev initramfs"
Вот тут какая-то подобная штука вроде делается: http://ru.gentoo-wiki.com/wiki/HOWTO_Multipath_boot_support

По-моему, udev в initrd на gentoo-дисках водится...

Сейчас не могу разрыть свои мысли, бежать пора, так что вывалил "в сыром виде" (-:Е

Текстовый редактор vi имеет два режима работы: в первом он пищит, а во втором — всё портит.

Спасибо, находил такое. С

Спасибо, находил такое. С первого взгляда это штука немного для другого. Но теперь уж разбирусь с ней полностью, после вашего совета.

Да, конечно, для другого. Но

Да, конечно, для другого. Но мне кажется, оттуда можно почерпнуть косвенной информации.

И поразбираться, как делается initrd для MinimalCD, мне кажется, стоит.

Текстовый редактор vi имеет два режима работы: в первом он пищит, а во втором — всё портит.

Согласен. Так же разберу по

Согласен. Так же разберу по кусочкам mkinitcpio, там поддержка udev заявлена как одна из достоинств над initramfs. Делать initrd и initramfs не сложно. Есть соответсвующие статьи - одна на opennet.ru, вторая на en.gentoo-wiki.com. Я уже засовывал udev в initramfs, но по-быстрому в надежде на удачу. Не знаю даже как его инициализировать(вдруг кто-то подскажет как) и зависит ли он от каких-либо либ.

Всё гениальное просто

Оказалось гораздо проще. Хоть я и разобрался почти с mkinitcpio(там всё на bash'e и к тому же по модулям разбито: udev..base..etc).
Чтобы включить поддержку UUID, LABEL у genkernel, точнее у initramfs достаточно добавить опцию --disklabe genkernel'y(это включит в initramfs файл blkid, что и поможет определить LABEL, UUID) ТЧК

И теперь монтируется

И теперь монтируется правильно? Проблема, описанная в заголовке темы, решена? Я немного запутался (-:Е

Текстовый редактор vi имеет два режима работы: в первом он пищит, а во втором — всё портит.

Да, теперь монтируется по

Да, теперь монтируется по real_root=LABEL={LABEL}.
Но вот проблема с init скриптом, которому нужен перед монтированием `sleep 3` решена частично, ибо думаю что должен быть более разумный способ.

initramfs

А не знаете ли, как можно включить файл blkid в самопальный initramfs?
Я не пользуюсь genkernel, а собираю ядра "вручную", в .config не
нашёл такого файла, где сие сокровище лежит? Хотелось бы в grub'е
прописать root по UUID'у. С самосборным ведром такого сделать мне
не удалось.

Вы же используете initramfs

Вы же используете initramfs или initrd ? Без них не выйдет. И нужен ещё скрипт init для initramfs или ... из genkernel'a(он его генерирует). Можно просто запустить genkernel --no-clean --disklabel initrd. Получить образ с blkid. Добавить поддержку ramfs в ядро и готово.

И разве такого монтированию по дефолту нет(не работает) ?

initramfs

Использую initramfs, который я создал сам, благодаря Вашей ссылке:
http://en.gentoo-wiki.com/wiki/Initramfs
Поддержка ramfs в ядре у меня всегда.
Вот только blkid как получить в моём initramfs - не знаю.
Подозреваю, что нужно удава запускать в образе, хотя
mini_udev в init прописан. Пока мне больше ничего сказать.
Буду пробовать методом "ненаучного тыка" ;)
Добавлено:
Вопрос снят, initramfs с mini-udev определяет диски по UUID,
система загрузилась. Виной всему была просто опечатка в init-скрипте
образа. Теперь передо мной "мрачной тенью" всаёт вопрос:
как переделать скрипт splash_geninitramfs, чтобы он создавал
вменяемые загрузочные образа, или добавить сплаш-картинку в
своё творение, для "кульной" загрузки :D

Покапайтесь в содержимом

Покапайтесь в содержимом splash_ge*. Возможно надо просто скомпоновать его с образом initramfs(так они оба образы ramfs). Вообще всё это делается командой genkernel --splash=THEME --splash-res=THEME_RES --disk-label --no-clean initrd и добавить в образ темы другие, если нужно. Поддержка будет не только LABEL, но и UUID. Ядро компилиться не будет, genkernel пакет маленький.

initramfs

Всё получилось, спасибо Вам за статью и помощь.
Добавил картинку с помощью splash_geninitramfs в свой загрузочный образ.
Загрузка теперь "кулль", root грузится по UUID, осталось скрипт наваять,
чтобы "вдрючную" это не делать каждый раз, ибо - быстро надоест и забудется ;)
Чтож, буду пробовать, хотя в bash-скриптинге я - полный НОЛЬ... почти :)
Если получится что - выложу.

А что с

А что с Arch?
http://muhas.ru/?p=2 - вот здесь все доходчиво. Я уже сделал. Правда при загрузке на что-то ругается, но быстро идет дальше.

Моя мечта:
#emerge комьютер с генту

>>А что с Arch? Классный

>>А что с Arch?
Классный вопрос. Действительно, а что с ним ?
Одна проблема в том что я не использую arch. Находил и перечитал гораздо больше материала по теме. Ставил с горем пополам arch'евский mkinitcpio - запорол x86 систему в chroot'e.
Не всё так просто как хотелось бы. И мне не нужно чтобы на что-то ругалось.

Ну как тебе сказать, просто я

Ну как тебе сказать, просто я не знаю что такое "attamping" - в общем то это даже не "ругается", а что-то пытается сказать, но я такого слова просто не знаю. А может и ругается.

Моя мечта:
#emerge комьютер с генту

Простите, вы сейчас в

Простите, вы сейчас в адекватном состоянии души и тела ? По последнему посту сложилось впечатление что ты пишешь не в тот топик.

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".