столкнулся со следующей задачей: необходимо, чтобы при загрузке ос, данные из /usr/bin /usr/sbin /usr/lib /usr/libexec (которые находятся на нжмд) копировались в соответствующие разделы ramfs (которые должны монтироваться туда же, т.е. вроде как "поверх"), при выгрузке же os данные должны синхронизироваться (т.е. если произошло обновление каких-либо бинарников, то скопировать из озу обратно на винт).
вижу я это следующим образом (в дистрибутиве загрузка происходит по модели sysvinit): скрипт, стартующий перед всеми user-mode сервисами, монтирующий рамфсы в /usr/bin2 /usr/sbin2 /usr/lib2 /usr/libexec2, копирующий туда всё с винта и монтирующий те же областы оперативы, но поверх уже находящихся на винте /usr/bin /usr/sbin /usr/lib /usr/libexec.
при выгрузке же просто натравливается рекурсивно cp.
но проблема в том, что я банально не знаю, как примонтировать один и тот же сегмент озу в два разных места. т.е. тот же /dev/sda1 я могу хоть в десять маунтпоинтов примонтировать, а под ramfs, даже если я mount source одинаково называю, выделяются разные сегменты памяти. как это можно обойти? если нельзя обойти, то, может посоветуете более кошерный способ реализации это задачи?
заранее спасибо!
Загрузка из ОЗУ
Модераторы: SLEDopit, Модераторы разделов
-
AmiG0
- Сообщения: 16
Re: Загрузка из ОЗУ
таки написал, но не так.
если вдруг кому надо...
/topic
Код: Выделить всё
#!/bin/sh
# Mount/umount script for /usr on ramfs
#
# chkconfig: 12345 01 99
# description: Copy all needed data from /usr/ to ramfs mounts on start
# and move all back on stop
# Author: Vladimir AmiGO Stackov <amigo@lnetw.ru>
#
# Source function library.
. /etc/rc.d/init.d/functions
LOCKFILE="/var/lock/subsys/usramfs"
prog="USRAmfs"
doit(){
for i in `ls /usr/ | grep hdd`;
do
i=`echo $i | sed -r s/_hdd//g`
if [ $1 == "toram" ]; then
if [ -d "/usr/${i}_ram" ]; then
umount "/usr/${i}_ram"
rmdir "/usr/${i}_ram"
fi
[[ ! -d "/usr/${i}_ram" ]] || continue
rm /usr/$i
ln -s "/usr/${i}_ram" /usr/$i
mkdir "/usr/${i}_ram"
mount "${i}_ram" -t ramfs "/usr/${i}_ram"
cp -a /usr/${i}_hdd/* /usr/${i}_ram
elif [ $1 == "fromram" ]; then
[[ -d "/usr/${i}_ram" ]] || continue
rm /usr/$i
ln -s "/usr/${i}_hdd" /usr/$i
cp -au /usr/${i}_ram/* /usr/${i}_hdd/
umount -f "/usr/${i}_ram"
rmdir "/usr/${i}_ram"
fi
done
RETVAL=$?
return $RETVAL
}
start(){
if [ -f $LOCKFILE ]; then
echo "Lockfile present, stopping"
stop
unlink $LOCKFILE
fi
touch $LOCKFILE
echo -n $"Starting $prog: "
doit toram
RETVAL=$?
return $RETVAL
}
stop(){
[[ ! -f $LOCKFILE ]] && return 0
unlink $LOCKFILE
echo -n $"Stopping $prog: "
doit fromram
RETVAL=$?
return $RETVAL
}
case "$1" in
start)
start
;;
stop)
stop
;;
status)
mount | grep /usr/
RETVAL=0
;;
restart)
stop
start
;;
*)
echo $"Usage: $0 {start|stop|restart|status}"
exit 3
;;
esac
exit $RETVALесли вдруг кому надо...
/topic
-
Frank
- Сообщения: 1059
- ОС: Ubuntu, Debian
-
drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: Загрузка из ОЗУ
наверное данные на USB-1 флешке... помнится так-же и биос кешируется.
-
AmiG0
- Сообщения: 16
Re: Загрузка из ОЗУ
-
drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: Загрузка из ОЗУ
я так не думаю: данные УЖЕ кешированны, причём многоступенчато. впрочем, попробуйте...
-
AmiG0
- Сообщения: 16
Re: Загрузка из ОЗУ
уже попробовал. ось грузится быстрее, но всё занимает время на копирование. плюсом также является то, что запуск любых юзер-мод приложений происходит практически мгновенно. не стоит так доверять дисковому и vm кешу.
-
Frank
- Сообщения: 1059
- ОС: Ubuntu, Debian
Re: Загрузка из ОЗУ
А что быстрее - копирование всех файлов в рам-диск с последующим запуском с него, или запуск только нужных файлов однократно с диска, а затем из кэша? Боюсь, реального выигрыша нет.

-
sendmoreinfo
- Сообщения: 50
-
AmiG0
- Сообщения: 16
Re: Загрузка из ОЗУ
вот спасибо, человече! гуглил, гуглил, да видать скилл не прокачан - так и не нагуглил эту опцию волшебную. теперь всё работает ещё кошернее.