Ru-Board.club
← Вернуться в раздел «UNIX»

» как переместить mini BSD при загрузке на memory disk?

Автор: umkas
Дата сообщения: 14.02.2007 18:49
Начальные условия: есть собранная по http://www.citytel.ru/minibsd/minibsd.html MiniBSD. Вопрос - как ЦЕЛИКОМ переместить систему на md. Ну не совсем целиком, а всё то, что требуется для её работы. Видел вживую такую вещь - при загрузке создается md, на который переносится всё что можно, после чего флешка размонтируется. Тут-же каким-то образом завязана фича write mfs in kernel.

Можно конечно и кнопикс расковырять, но требуется время и знаний на хватат

Гуглится плохо, видимо не то спрашиваю

Кто в курсе - дайте ссылок
Автор: test1977
Дата сообщения: 14.02.2007 23:10
Подробнее что ты хочешь получить? спрашивай в icq
Автор: umkas
Дата сообщения: 15.02.2007 08:13
я бы спросил, но icq в профиле нет

Хочется нечто по мотивам FreeBSD and Solid State Devices и Building Monolithic Kernels and Root Filesystems for FreeBSD. А именно - собрать мини-образ FreeBSD (4.х например), поместить его на IDE flash и минимизировать обращение к flash при работе системы. В идеале - flash используется один единственный раз при загрузке.

В общем я более-менее понял как это делается: готовится образ файловой системы (по мотивам miniBSD например) со всеми необходимыми бинарниками, ядро собирается с

options MFS # Memory Filesystem
options MD_ROOT # md device usable as a potential root device
options MD_ROOT_SIZE=x
pseudo-device md # memory disk

затем используя write_mfs_in_kernel (исходник в /usr/release/ или как вариант можно использовать кусок скрипта build из picoBSD) образ файловой системы вписывается в kernel. kernel гзипится и помещается на носитель с минимумом необходимых для загрузки файлов. В результате после старта ОС (фактически целиком помещенной в ядро) носитель можно демонтировать т.к. всё уже будет работать с MD.

Приступаю к попытке осуществления
Автор: keyhell
Дата сообщения: 15.02.2007 11:54
глянь ради интереса статью по созданию diskless станций у меня на сайте.
дело в том, что при работе FreeBSD так, как ты хочешь будут выполняться скрипты rc.diskless* или rc.initdiskless

насколько я помню в них-то и есть функция по созданию разделов в памяти при загрузке. ну а уже потом можно все, что нужно для работы копировать на них.

впрочем, это и есть diskless, только с загрузкой не по сети как у меня в статье, а через flash.
Автор: test1977
Дата сообщения: 16.02.2007 18:08
umkas Сама идея Embedded не нова с помощью данной технологии можно делать отказоустойчивые системы...

у меня на FreeBsd 4 работает сервис 2,5 года UpTime!

Принцип работы прост:

1. Пример загружаемся с Flash ide создаем рам диск в OП > разворачиваем систему в ОП

2. Много интересного почерпнешь на _http://www.ultradesic.com/index.php?section=21 тут все что нужно!

3. для связи: 310421 собака точка ждимайл точка ком


Всего лучшего и успехов!
Автор: umkas
Дата сообщения: 18.02.2007 05:00
сама идея отказоустойчивых систем не нова

Принцип я глубоко понял часов через шесть после написания первого сообщения, указанный урл посещал неоднократно.

К экспериментам полноценно приступить не дали - работы поднакидали. В общем продолжаю.
Автор: umkas
Дата сообщения: 20.02.2007 13:48
FreeBSD 4.11

Задача: собрать фрю минимального размера, поместить её на IDE Flash. При этом флеш должен использоваться только один раз при загрузке.

делается так:
1. собираем по мануалу http://www.citytel.ru/minibsd/minibsd.html минифрю, дополняем нужными бинарниками, библиотеками и прочим - в общем собираем дерево файловой системы, содержащей всё что надо для работы. Без kernel. В этой файловой системе создаю директорию /flash Смотрим размер всего этого дела. В etc ложим один единственный файл следующего содержания:
#!/bin/sh

echo "==== pre-rc started ===>"

stty status '^T'

# Set shell to ignore SIGINT (2), but not children;
# shell catches SIGQUIT (3) and returns to single user after fsck.
#
trap : 2
trap : 3 # shouldn't be needed

HOME=/
PATH=/sbin:/bin:/usr/sbin:/usr/bin
export HOME PATH

fsck -p /dev/ad0s1a
mount /dev/ad0s1a /flash
cp -rf /flash/etc/* /etc/
umount /dev/ad0s1a
cd /etc
. rc

Реальные файлы конфигов будем ложить в /etc на самой флешке дабы их можно было менять, при старте этот rc будет монтировать флешку, переписывать в memory-disk реальные конфиги и стартовые скрипты и запускать их.

2. по п.10 создаем образ (например tokernel.bin) куда влезет вышеуказанное+небольшой запас
dd if=/dev/zero of=tokernel.bin bs=1024k count=кол-во мегабайт
vnconfig -s labels -c vn0 tokernel.bin
disklabel -Brw vn0 auto
disklabel -e vn0
newfs -b 8192 -f 1024 -U /dev/vn0c
mount /dev/vn0c /mnt

переписываем вышесобранное дерево файловой системы туда, отключаем
umount /mnt
vncoufig -u vn0

3. собираем ядро с поддержкой того что надо, указываем
options MFS
options MD_ROOT
options MD_ROOT_SIZE=размер образа в кб+запас
pseudo-device md

При этом в ядре будет зарезервированно указанный объем места под файловую систему

4. Идем в /usr/src/release(если нету, доставляем из дистрибутива), компилим write_mfs_in_kernel

5. вписываем полученный образ в ядро командой
write_mfs_in_kernel kernel tokernel.bin

Получился kernel, содержащий всю систему. Для экономии жмем gzip -9 kernel. (У меня в результате получилось около 10Мб). Получили kernel.gz Это файл ядра, содержащий образ файловой системы. Теперь если сделать загрузочный диск фри с этим файлом и в /etc/fstab не указывать корень, то при старте вписанный в ядро образ будет развернут как memory-disk и примонтирован корнем.


Поскольку у меня цель - поместить это на IDE Flash, и использовать его ОДИН раз при загрузке, дальше я форматирую флешку, размечаю. Задача - получить раздел adXs1a (т.к. согласно вышеприведенному скрипту монтируется именно ad0s1a).

Как это делается ручками до конца не знаю (по мануалу до конца не срастается) поэтому часть делал через sysinstall, часть по п.10 вышеприведенной ссылки. Если кто напишет как это делать руками - скажу спасибо

Монтирую, пишу туда кой-какие бинарники, /boot, реальный /etc c конфигами, помещаю туда kernel.gz. Всё. При старте - из ядра разворачивается образ файловой системы на md0c, он монтируется как корень, далее согласно вышеприведенному rc флешка монтируется как /flash, в md0c:/etc переписываются конфиги, и выполняются стартовые скрипты, после чего флешка демонтируется и больше вообще не используется. В принципе если система будет работать вечно и /etc меняться не будет никогда (ну-ну ) - можно поместить реальный /etc в п.1, вписать его в ядро вместе с образом файловой системы и всё. Итого на флешке имеем
/boot
/etc
/flash
kernel.gz
объем ~10Мб. С перлом и еще кой-какими бинарниками - 14Mb (в развернутом на md виде ~33Мб). Работает
Если собирать просто по вышеуказанному мануалу - будет еще меньше.

Буду признателен за подсказки и замечания
Автор: test1977
Дата сообщения: 21.02.2007 01:18
Что то типо того...

В песочнице делаем образ *.img (*рабочая мини система)

Монтируем нашу flash

gunzip›c/path/to/***.img.gz>/dev/sda(тут наша flash) etc....

да! чуть не забыл делай сокращение лог файлов в системе или будут последствия переполнения ram диска !!!

и ещё в зависимости от того что на мини системе будет крутиться, внимательно отнесись к файлу подкачки!!!

его (файл подккачки) можно разместить в ram при условии, что у тебя большой ram диск!
-------------------------------------------------


у меня вопрос что будет за сервис на мини freeBSD 4.11?
Автор: umkas
Дата сообщения: 21.02.2007 07:53
почти как в исходном мануале )) router, firewall, shaper, nat... в общем шлюз в сеть. В принципе никто не мешает сделать и что-то другое.

По поводу логов: сислог кидаем на другую машину по сети, всё остальное вообще не нужнО. При желании можно оставить в машине HDD, поправить fstab чтобы он монтировался как /var или /var/log. Либо в стартовых скриптах проверять работоспособность и наличие винтов. Если их нет - валить всё в /dev/null

При желании можно еще заредиректить консоль на com-порт )

Страницы: 1

Предыдущая тема: терминалы под linux


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.