Можно также заставить это произойти автоматически.
Я покажу Вам как в zsh
, затем добавьте информацию о bash
.
Сущность похожа на это:
preexec()
{
starttime=$SECONDS
}
precmd()
{
if ((SECONDS - starttime >= 5)); then
aplay "sound.wav"
# or printf "\b", or notify-send, or whatever
fi
}
Можно также заставить его только сделать это, если программой был Python, например.
preexec()
{
starttime=$SECONDS
case $3 in python*)
command_is_python=true;;
*)
command_is_python=false;;
esac
}
precmd()
{
if $command_is_python && ((SECONDS - starttime >= 5)); then
aplay "sound.wav"
# or printf "\b", or notify-send, or whatever
fi
}
В bash
, лучший способ состоит в том, чтобы загрузить preexec.bash.txt и получить его (например. . ~/preexec.bash.txt
наверху Вашего ~/.bashrc
, затем вышеупомянутое (или что-то близко к нему) должно работать. (Не уверенный в $3
бит, чтобы проверить, является ли командой Python.)
Если бы Вы используете Терминал GNOME, я также указал бы на Вас на Высвечивание Терминала GNOME. Это - патч, я записал, что это делает терминальное мигание, когда команда сделана, таким образом, Вы можете Alt-Tab к чему-то еще, затем это сообщает, когда это сделано.
Простой ответ: Нет. Если Вы хотите LVM, Вам нужен initrd.
Но поскольку другие сказали прежде: LVMs не замедляют Вашу систему или делают что-либо плохо в другом отношении, они просто позволяют Вам создавать среду, которая позволяет Вашему ядру загружать и делать свое задание.
initrd позволяет Вашему ядру быть загруженным: Если Ваше ядро находится на диске LVM, целая среда LVM должна быть установлена, прежде чем двоичный файл, который содержит ядро, может быть загружен.
Проверьте статью в Википедии о initrd, который объясняет, что делает initrd и почему Вам нужен он.
Другое примечание: Я вижу Вашу точку в желании сделать вещи самостоятельно, но можно пачкать руки даже с genkernel. Используйте genkernel - menuconfig все, и можно в основном установить все, как будто Вы создали бы свое ядро полностью без поддержки инструмента, genkernel просто добавляет делание bzImage, сделайте модули и сделайте modules_install строки для Вас, и делает тот противный материал initrd.
Можно, очевидно, создать initrd сами, как он обрисован в общих чертах здесь для initramfs или здесь для initrd.
править: просто реализованный Вы пытаетесь загрузиться на LVM, я, никогда не имею не устанавливают LVM, никогда не нуждался в них, таким образом, вероятно, подход здесь не может работать
Вот основные правила, которые необходимо сделать для создания initrd-меньшего-количества ядра (из памяти, я не помнил точно):
Перекомпилируйте свое ядро, удостоверьтесь к встроенному в ядро (ВАЖНЫЙ: не как модуль!):
Device Drivers
)/
, /etc/*
, и /lib/modules/*
(под File systems
) В основном ядро должно смочь смонтировать корневую файловую систему, считать/etc/fstab, загрузить другие модули драйвера (при необходимости) и смонтировать другие некорневые файловые системы для завершения остальной части процесса начальной загрузки. Если у Вас есть более включенный процесс начальной загрузки, например, сеть, загружающаяся затем, Вам нужно к созданному в тех драйверах также.
Отключите initrd от ядра "Общая установка> Начальные файловые системы RAM и псевдодиск (initramfs/initrd) поддержка" иначе. CONFIG_BLK_DEV_INITRD=n.
Измените конфигурацию GRUB, Вам больше не нужен init = и realroot =, и корень установки =, таким образом, это указывает на корневое устройство файловой системы.
Я думаю, что это - все. Не забывайте сохранять резервное ядро и хорошую копию загрузочного Живого CD, в случае, если что-то происходит.
Вещи, которые могли пойти не так, как надо: если Вы скомпилировали в неправильных драйверах или если Вы компилируете основные драйверы как модуль, то ядро не может считать файловую систему. Перезагрузка с новым ядром, или с Живым CD и перекомпилировала ядро с корректными драйверами.
Единственная твердая часть выясняет, какой драйвер относится к Вашим аппаратным средствам. Можно использовать lspci
и lshw
помочь определить Ваши аппаратные средства. Если у Вас уже нет этих инструментов, то emerge lshw pciutils
.
Да, Вам нужен initrd. Вот то, почему:
Нормальный процесс начальной загрузки запускается с загрузчика, который знает как раз достаточно о Вашей системе, чтобы найти ядро и выполнить его. (GRUB2 достаточно умен для нахождения ядра, это расположено на LVM2 или разделе RAID, но GRUB1 не, таким образом, обычно рекомендуется создать начальную загрузку / как отдельный раздел с упрощенным расположением.), После того как это загружается, ядро должно смочь найти корневую файловую систему, таким образом, это может запустить процесс начальной загрузки. Однако LVM не может запуститься, не будучи инициированным некоторыми инструментами пространства пользователя, которые существуют в корневой файловой системе, которая не может быть загружена без инструментов LVM, которые существуют в корневой файловой системе... ;)
Повредить этот цикл, initrd или initramfs - сжатая файловая система, это снабжено ядром (или в начальной загрузке/, или в самом ядре), который содержит как раз достаточно системы Linux для запуска сервисов, таких как LVM или MD или независимо от того, что Вы хотите. Это - временная файловая система и только действует как Ваша корневая файловая система достаточно долго для реального корня, который будет загружен.
До фактического создания того большая часть документации относительно темы является потрясающе устаревшей - lvm2create_initrd, например, даже больше не работает над хинду. (Я настроил то же самое несколько месяцев назад, и я должен был почти переписать сценарий, прежде чем я получил работу initrd от него.) Создание Вашего собственного initramfs может быть забавой, и это - единственный способ получить абсолютно минимальный процесс начальной загрузки (и узнать входы и выходы о том, как Linux загружается в процессе), но это - большая работа.
Короткий ответ: используйте Dracut. Это - новая платформа, это создается для генерации initramfs главным образом автоматизированным способом, и это находится в перевозке. Документация немного редка, но существует достаточно ее там для понимания вещей, и это - безусловно самый легкий способ получить тело initramfs и корень LVM.
В то время как не возможно не использовать своего рода initrd, возможно не использовать отдельные initrd файлы. (Я никогда не использовал genkernel, таким образом, я не могу дать инструкцию для него).
Например, я установил опцию:
CONFIG_INITRAMFS_SOURCE="/usr/src/initrd.contents"
Где /usr/src/initrd.contents
в моем случае похож (у меня есть LVM+tuxonice+fbsplash):
dir /bin 0755 0 0
file /bin/busybox /bin/busybox 0755 0 0
file /bin/lvm /sbin/lvm.static 0755 0 0
dir /dev 0755 0 0
dir /dev/fb 0755 0 0
dir /dev/misc 0755 0 0
dir /dev/vc 0755 0 0
nod /dev/console 0600 0 0 c 5 1
nod /dev/null 0600 0 0 c 1 3
nod /dev/snapshot 0600 0 0 c 10 231
nod /dev/tty1 0600 0 0 c 4 0
dir /etc 0755 0 0
dir /etc/splash 0755 0 0
dir /etc/splash/natural_gentoo 0755 0 0
dir /etc/splash/natural_gentoo/images 0755 0 0
file /etc/splash/natural_gentoo/images/silent-1680x1050.jpg /etc/splash/natural_gentoo/images/silent-1680x1050.jpg 0644 0 0
file /etc/splash/natural_gentoo/images/verbose-1680x1050.jpg /etc/splash/natural_gentoo/images/verbose-1680x1050.jpg 0644 0 0
file /etc/splash/natural_gentoo/1680x1050.cfg /etc/splash/natural_gentoo/1680x1050.cfg 0644 0 0
slink /etc/splash/tuxonice /etc/splash/natural_gentoo 0755 0 0
file /etc/splash/luxisri.ttf /etc/splash/luxisri.ttf 0644 0 0
dir /lib64 0755 0 0
dir /lib64/splash 0755 0 0
dir /lib64/splash/proc 0755 0 0
dir /lib64/splash/sys 0755 0 0
dir /proc 0755 0 0
dir /mnt 0755 0 0
dir /root 0770 0 0
dir /sbin 0755 0 0
file /sbin/fbcondecor_helper /sbin/fbcondecor_helper 0755 0 0
slink /sbin/splash_helper /sbin/fbcondecor_helper 0755 0 0
file /sbin/tuxoniceui_fbsplash /sbin/tuxoniceui_fbsplash 0755 0 0
file /sbin/tuxoniceui_text /sbin/tuxoniceui_text 0755 0 0
dir /sys 0755 0 0
file /init /usr/src/init
И /usr/src/init
:
#!/bin/busybox ash
local X ROOT RUNLEVEL INIT PARAM
# Preliminary stuff
mount -t proc proc /proc
mount -t sysfs sysfs /sys
mdev -s
/bin/lvm vgchange -ay picard-main
# Try to resume. This never returns if it succeeds
test -e /sys/power/tuxonice/do_resume && echo 1 > /sys/power/tuxonice/do_resume
#/bin/resume
# Parse the command line for relevant options.
INIT=/sbin/init
RESCUE=""
PARAM=" "
for X in `cat /proc/cmdline`
do
case "$X" in
root=*) ROOT=${X#root=} ;;
[0-6Ss]) RUNLEVEL=${X} ;;
init=*) INIT=${X#init=} ;;
rescue) RESCUE="rescue" ;;
splash=*) PARAM="${PARAM} ${X}" ;;
consol=*) PARAM="${PARAM} ${X}" ;;
esac
done
if [ x${RESCUE} = xrescue ]
then
busybox ash
fi
# Mount and switch root.
mount -o ro ${ROOT} /mnt
umount -f /sys || umount -l /sys
umount -f /proc || umount -l /proc
exec switch_root /mnt ${INIT} ${RUNLEVEL} ${PARAM}
Да, это.
Сложности, которые являются результатом создания и обработки initrds, представляются спорные, если Вы устанавливаете и используете grub2. grub2 wiki http://grub.enbug.org/LVMandRAID описывает, как у Вас может быть своя начальная загрузка / на lvm с не чем иным как insmod lvm в grub.cfg, конфигурационном файле личинки, следовательно никакая потребность в initrd.
grub2 теперь в версии 1.98, но все еще в экспериментальном ответвлении в хинду. Однако это может быть установлено в другом слоте и совершенно применимо.
Приятного отдыха!
linuxrc
сценарий в initrd выполняет эту задачу. – Riccardo Murri 28.09.2010, 10:29