Не получается сделать загрузку с initramfs.
Хочу сделать загрузку с помощью initramfs.(fbsplash; возможно, корень перенесу на lvm)
Делал по этим статьям:
http://jootamam.net/howto-initramfs-image.htm
http://www.sourcemage.org/HowTo/Initramfs
http://en.gentoo-wiki.com/wiki/Initramfs
busybox не юзал, все пихал сам.
вот мой init:
#!/bin/sh PATH="/bin:/sbin:/usr/bin:/usr/sbin" SHELL="/bin/sh" REC_PARAM="recovery" # Defaults NEW_ROOT="/dev/sda2" NEW_ROOT_INIT="/sbin/init" NEW_ROOT_PATH="/mnt/newroot" INIT_ARGS= # Function for executing shell. shell () { echo '' echo 'Rescue shell.' echo 'Exit shell to continue booting.' $SHELL } # Function for parsing params from command line. get_param () { echo "$@" | cut -d "=" -f 2 } echo 'Checking basic directories' for dir in /proc /sys /dev $NEW_ROOT_PATH do [ -d $dir ] || mkdir $dir done echo 'Mount /proc' mount -t proc none /proc echo 'Mount /sys' mount -t sysfs none /sys echo 'Populate /dev' mdev -s # Drop to shell if "recovery" was passed as kernel param. grep -q $REC_PARAM /proc/cmdline && shell #Process command line options for param in $(cat /proc/cmdline); do case $param in root/=*) NEW_ROOT=$(get_param $param) ;; init/=*) NEW_ROOT_INIT=$(get_param $param) ;; esac done # Get the args to pass to init. INIT_ARGS="$(awk '{gsub(/[[:graph:]]+=[[:graph:]]+/,""); print}' /proc/cmdline)" # Removing initramfs args. INIT_ARGS="$(echo $INIT_ARGS | awk '{gsub(/$REC_PARAM/,""); print}')" # Mounting root FS. if [ ! mount -o ro "$NEW_ROOT" "$NEW_ROOT_PATH" ] then echo echo "Couldn't mount root!" shell else echo "Root succesfuly mounted." fi echo "Searching for $NEW_ROOT_INIT ..." if [ ! -e "$NEW_ROOT_PATH/$NEW_ROOT_INIT" ] then echo echo "No $NEW_ROOT_INIT found!" shell else echo "$NEW_ROOT_INIT found." fi echo "Unmounting /proc" umount /proc exco "Umounting /sys" umount /sys echo "Change to the new root partition." if [ ! exec switch_root "$NEW_ROOT_PATH" "$NEW_ROOT_INIT" $INIT_ARGS ] then echo echo "Couldn't switch root!" echo 'Mount /proc' mount -t proc none /proc echo 'Mount /sys' mount -t sysfs none /sys shell fi
в grub.conf:
title Gentoo root(hd0,0) kernel /base initrd /initramfs.cpio.gz
---------------------------------
И что то не выходит ничего ((
1)Независимо от того, что у меня в init, gentoo грузится с /dev/sda2. о_0
Т.е. даже если у меня /dev/sda2 затерт, а корень я перенес на /dev/sda4 (в init NEW_ROOT="/dev/sda4"), то все равно gentoo пытается загрузиться с /dev/sda2.
У меня такое ощущение, что initramfs вообще не запускается. Я прописал в нем для теста вывод в /mnt/newroot/initlog, но он ничего в него не записал. Закоментил строчку с switch_root, ось все равно загрузилась. о_0
Хотя если в init ошибка, то загрузка приостанавливается.
2)Следующий вопрос: как передать init параметры? Я правильно понимаю, что так:
title Gentoo root(hd0,0) kernel /base root=/dev/mapper/vgnt-root init=/sbin/init recovery initrd /initramfs.cpio.gz
?
3)Если так правильно, то у меня почему то не выбрасывает в shell с параметром recovery..
4)Ну и последний вопрос: как передать через параметры уровни запуска? по аналогии с этим:
title Автономное использование Gentoo Linux root (hd0,0) kernel (hd0,0)/kernel-2.4.25 root=/dev/hda3 softlevel=offline
---------------------------------
Вот. Перерыл весь гугль, ничего толкового не нашел. Жду вашей помощи.. [особенно 1-ый вопрос волнует]
- Для комментирования войдите или зарегистрируйтесь
по1. если не юзал busybox ,
по1.
если не юзал busybox , то откуда возьмется /bin/sh ?
юзай вим, что ли.
уверен в наличии в /bin/sh оператора [ ? .
при таком раскладе будет грузится с раздела, где оно лежало :)
как пихали, вкратце расскажите. почему именно инитрамфс а не инитрд ? чем пожато ?на чем вылетает ?
2) какие такие init параметры ?
RC системы всех дистрибов парсят /proc/cmdline и в зависимости от него действуют. это же ответ и на п.4
P.S По многолетней традиции линух части рунета по ссылкам не ходил
Compute:
Bosch M2.8.1 -> custom Bosch M2.8.3 clone from Russia.
Speed about 260 km,Ram 2 pers.,HDD - 70 kg,210 FLOPS ;)
>если не юзал busybox , то
>если не юзал busybox , то откуда возьмется /bin/sh ?
а разве
не покатит? я так со всем делал.
ой, это я ошибся:
И, кстати, не ругется! 0_о
Пихаю так:
>уверен в наличии в /bin/sh оператора [ ?
в примерах он используется(именно на sh), я тестил - все ок.
>на чем вылетает ?
да не вылетает, я бы хоть увидел, что оно вообще работает ((
>при таком раскладе будет грузится с раздела, где оно лежало :)
что будет грузиться? initramfs?
ну да.. c /dev/sda1 - с boot'a
а потом по идее switch_root в /dev/sda2 или в /dev/mapper/vgnt-root. Но дело в том, что у меня ось грузится с /dev/sda2 независимо от того, что у меня в init ((
>RC системы всех дистрибов парсят /proc/cmdline и в зависимости от него действуют. это же ответ и на п.4
я правильно понял, что параметры, которые я передал в grub в строчке
будут обработаны /sbin/init когда я сделаю switch_root ?
а что тогда за параметры передаются /sbin/init ? ($INIT_ARGS)
в туторе их получали из /proc/cmdline: исключали параметры вида [что-то]=[что-то] и параметры, предназначенные для initramfs (у меня это параметр recovery).
почему initramfs? ну, зачем повторяться: есть много статей, где написано, почему initramfs лучше, чем initrd ))
----------------------------------
вообще основная проблема в том, что ось ВСЕГДА грузится с /dev/sda2 и на initramfs никак не реагирует ((
kerm написал(а): Хочу сделать
Я не большой спец по initrd, но для fbsplash это всё очень сложно — файл с темой создаётся одной командой и прописывается в загрузчик.
Текстовый редактор vi имеет два режима работы: в первом он пищит, а во втором — всё портит.
ну так у меня и не initrd
ну так у меня и не initrd ))
как уже писал, мне хотя бы увидеть, что оно работает... с fbsplash потом разберусь.
Почитал по ссылкам, проверил
Почитал по ссылкам, проверил — у меня всё-таки initramfs (-:E
Текстовый редактор vi имеет два режима работы: в первом он пищит, а во втором — всё портит.
Все )))
Проблема решена ))
Дело было в неправильной упаковке initramfs.
Делал так:
(лежал скрипт в /usr/src, делал быстро, не думая совсем)
Вот он мне и паковал систему как /initramfs/bin /initramfs/lib ...
При загрузке ядро от всего этого совсем охриневало и грузило ось с /dev/sda2(видимо последняя удачная загрузка с него была)
Теперь так:
Вот.
Все же интересно, что за параметры: