Мы — долго запрягаем, быстро ездим, и сильно тормозим.
www.lissyara.su —> статьи —> FreeBSD —> Файловая система —> FreeBSD on flash

Опыт миграции на usb

Автор: manefesto.


Как то не везет мне с винтами последнее время.
Уже умирает третий винт подряд, до этого мерли Seageate, а теперь приказал долго жить WD
Переустановка, настройка доставляет достаточно мороки.
Было принято решении переехать на USB Flash и установить минимальный джентельменский набор для работы своего роутера.
В интернетах описаны методы установки из образа диска.
Ну во первых желания устанавливать из образа у меня нету, да и хотел сделать все по феншую.
Что мы имеем, Freebsd 8.2-prerelease и флешку на 2 Гб.
Форматируем флешку
fdisk -BI /dev/da0

создаем метки
bsdlabel -B -w da0s1

создаем файловую систему и создаем на ней UFS метку
newfs -U -L RootOnUSB /dev/da0s1a

Первая часть окончена, флешка подготовлена к развертыванию на ней системы.
Монтируем ее
mount /dev/ufs/RootOnUSB /mnt/tmp

идем в /usr/src где мы собирали наш мир с ядром.
устанавливаем мир на флешку
cd /usr/src
make installworld DESTDIR=/mnt/tmp

Мир установлен, осталось поставить ядро и конфигурационные файлы
Ядро ставим, точнее копируем банально:
cp -rf /boot/kernel/* /mnt/tmp/boot/kernel/

я например скопировал только кастомное ядро и пару модулей, в частности zfs.ko,opensolaris.ko
Ставим конфигурационные файлы, я это сделаю дважды, для надежности
cd /usr/src/etc
make distrib-dirs DESTDIR=/mnt/tmp
make distribution DESTDIR=/mnt/tmp

а теперь копируем с живой системы
cd /etc
pax -p eme -X -rw . /mnt/tmp/etc/

можно считать что система у нас готова, хотя один момент, нам ведь надо поправить fstab и записать загрузчик
я свой fstab довел до такого состояния
# Device             Mountpoint      FStype  Options         Dump    Pass#
/dev/ufs/RootOnUSB   /               ufs     rw,noatime      1       1
/proc           /proc           procfs  rw,noauto    	  0       0

Так как мы будем грузить с метки ufs/RootOnUSB то добавим в loader.conf следующее
echo 'geom_label_load="YES"' >> /boot/loader.conf

Имеется одна тонкость у материнских плат, не все сразу определяют umass, поэтом допишем еще ожидание загрузки для инициализации
echo 'kern.cam.boot_delay=10000' >> /boot/loader.conf

Для уменьшения числа операций записи на USB, мы создадим
локальную базу данных и запретим еженедельное обновление:

# chroot /mnt /bin/sh
# mount_devfs devfs /dev
# /etc/periodic/weekly/310.locate
Rebuilding locate database:
# echo 'weekly_locate_enable="NO"' >> /etc/periodic.conf 
# echo 'weekly_whatis_enable="NO"' >> /etc/periodic.conf
ctrl+^D

Поставим весь необходимый мне софт из имеющейся Freebsd на флешку.
Маленьким скриптом создал пакеты из имеющихся в системе
#!/bin/sh
mkdir /home/pkg
cd /home/pkg
for i in `pkg_info | awk '{print $1}'`; do
 pkg_create -b $i
done

монтируем папку с пакетами на флешку

mkdir /mnt/tmp/usr/pkg
mount_nullfs /home/pkg /mnt/tmp/usr/pkg
chroot /mnt/tmp /bin/sh
cd /usr/pkg
pkg_add .....(тут уж ставьте что хотите)

fstab поправили, пакеты поставили, осталось сделать флешку загрузочной.
Отмонтируем ее
umount /mnt/tmp

и запишем загрузчик
boot0cfg -v -B -o noupdate da0

В принципе все готово.
UPD[2010-12-16 3 часа ночи]
Скрипт для клонирования флешки
#!/bin/sh
dir="/mnt/tmp"
drive=da1
label=`date "+%Y%m%d%n"`

echo "preparing disk for duplicate system"
fdisk -BI /dev/$drive
bsdlabel -B -w "/dev/$drive"s1
newfs -U -L $label "$drive"s1a

echo "mount duplicate drive"
mount /dev/ufs/$label $dir

echo "start copy system"
for i in `ls -al /|grep d|awk '{print $9}'|grep -v "^\."|grep -v mnt`;do
        echo "create direcotry $i"
        mkdir /mnt/$i
        echo "duplicate live system directory $i"
        cd /$i
        pax -p eme -X -rw . /$dir/$i
done

echo "write fstab"
echo "/dev/ufs/$label / ufs rw,noatime 1       1" > $dir/etc/fstab
echo "/proc /proc procfs rw,noauto 0       0" >> $dir/etc/fstab

echo "umount drive and write loader"
umount /dev/ufs/$label
boot0cfg -v -B -o noupdate $drive

Немного пояснения, строки 2 и 3 описываю переменные куда будет монтироваться флешка.
Желательно отключить все шары которые не смонтированы в  /mnt,
а куда то в другое место, например /share,/pub

Статья является симбиозом статей установки freebsd из образа и установки мира в jail
Информация взята из
http://www.opennet.ru/base/sys/freebsd_stick.txt.html
и еще куска про jail, уже не помню где брал
PS: Таким образом в принципе можно переносить и на новый жесткий диск, планах написать скрипт который бы делал копию имеющейся флешки.
2011-10-24: Держать в памяти разделы оказалось не совсем удобно. В частности при клонировании флешки переполнялся tmp который приводил к переполнению памяти. Так же из-за var в памяти не корректно работает samba




размещено: 2010-12-07,
последнее обновление: 2011-10-24,
автор: manefesto


mak_v_, 2010-12-07 в 11:40:00

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

manefesto, 2010-12-07 в 12:24:50

для меня этот вариант более стабилен чем работа с хардом, третий уже вылетел

adre, 2010-12-07 в 13:53:56

шикарно...

ufs, 2010-12-07 в 18:41:39

WD RE3/RE4 заюзай, раз не везет :-)

Foxduck, 2010-12-07 в 20:23:40

Аналогично делал только для системы бэкапа..когда не хотел на винты ставить систему а отдал все их пространство для хранения данных
С самой флешки сделал 3 копии на случай форс-мажора..

opt1k, 2010-12-07 в 23:50:38

По моим наблюдениям флешки менее надёжны чем винты...

manefesto, 2010-12-08 в 7:15:32

лучше купить 3 флешки по 2 гига по 200 рублей чем 3 винта

WarWar, 2010-12-08 в 14:04:20

Спасибо за труды.

Dominator, 2010-12-08 в 17:50:50

Опередил меня :)
Я тоже хотел написать статью на такую же тематику :)

alex, 2010-12-08 в 23:22:29

Поправь, плз...
"Ставим конфигурационные файлы:
make destrib-dirs DESTDIR=/mnt/tmp
make destribution DESTDIR=/mnt/tmp"
(надо distrib..., а не destrib...)

manefesto, 2010-12-09 в 7:46:37

готово

SergeySL, 2010-12-09 в 8:33:22

Огромное спасибо!

Evil, 2010-12-09 в 10:28:34

Если чесно то роутер на флешке звучит как извращения.

Dominator, 2010-12-13 в 12:53:20

Роутер на флешке - самое то, особенно против всяких проверок.
В умелых руках флешка с FreeBSD - довольно мощное оружие(nfs и ему подобные не учитываются): и систему забекапить, и сервак с FreeBSD поднять, и данные свистнуть, и вирусы почистить. Было бы место на флешке и терпение...

Алекс, 2010-12-15 в 16:04:26

А мониторинг SMART на винтах не спасал ни разу? Просто интересно, раз у вас так сыпятся :).

manefesto, 2010-12-15 в 21:18:24

а при чем тут смарт ?
системы не флешке удобне разворачивать чем инсталить с нуля

Алекс, 2010-12-18 в 21:05:13

Я про то, помогал ли мониторинг SMART определить, что винту скоро трындец, или его не мониторили совсем, решив, что раз у гугля не получилось на нем делать предсказания, то и вам не стоит?

BTI, 2010-12-20 в 10:22:48

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

Dominator, 2010-12-21 в 10:31:13

Мне SMART не помог. Уже два винта полетело, а смарт говорит, мол все ништяк.
Вот когда я просканировал винт викторией, вот тогда только смарт среагировал на бэд блоки, которых было более 100000

Алекс, 2010-12-21 в 11:25:14

Да вот на небольшой оффтоп прибило, сорри.

Dominator вы про BIOS говорите? Т.е. bios не среагировал сразу, я правильно понимаю? Другими средствами мониторинг SMART не осуществлялся?

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

Dominator, 2010-12-22 в 14:38:57

Алекс, вы правильно меня поняли. BIOS не отреагировал на бэды. Другими утилитами не мониторил.

polkan, 2010-12-29 в 8:24:25

замени  построение

pkg_info | awk '{print $1}'
на
pkg_info -aE

оно само умеет выкусывать имя пакета :)

Marivanna, 2011-01-14 в 20:40:59

У FreeBSD существует свой проект NanoBSD, специально для таких конфигураций с флешками.
http://www.freebsd.org/doc/en_US.ISO8859-1/articles/nanobsd/howto.html

Удобство в том, что там система работает в режиме read-only, для сохранения настроек монтируется отдельный раздел. Т.о. каол-во записей на флэшку уменьшается в разы. Удалось БСД 7.3 записать на флешку в 128 Мб.
Перенос небольшого шлюза на работу с флэшки очень удобно. Даже если накрылась, быстренько из бэкапа заливаешь образ и радуешься.

InventoR, 2011-01-25 в 8:52:34

Винты просто так не летят, проверяй напряжение из БП и просадку.

Александр, 2011-03-14 в 18:18:25

Ребята, поломка винтов - это не только появление бедов.

Мониторинг смарт никак вас не спасет, например, от скачков напряжения, кз, физических изменений головок, разрушения подшипника шпинделя, когда у вас в момент либо контроллер на винте полетит, либо головка попортить поверхность блина.

Есть реальный пример, когда в лаборатории восстановления данных не смогли нам восстановить винт.

Как ни пытайся сравнивать, но прецизионная механика менее надежней электроники. Хотя и usb-flash не есть 100% надежный накопитель

Итак, самое правильное применение, систем в ro режиме + ежедневные инкрементные бекапы на случай быстрого восстановления. (бекапы надо делать на другой комп в другом помещении, тогда и пожары не страшны).

Однако автору надо сказать спасибо за проделанный труд, на случай когда это роутер без изменения и образ флешки слит - это самый выгодный вариант вариант по цене/качество.

ronin, 2011-08-17 в 2:51:28

обратите внимани на nanobsd
или на http://bsdrp.net/

adre, 2011-09-03 в 20:28:04

Зачем?
Кому надо о ней знают.

Mainbrain, 2011-09-11 в 13:15:18


>>> Installing everything
--------------------------------------------------------------
cd /usr/src; make -f Makefile.inc1 install
===> share/info (install)
===> lib (install)
===> lib/csu/i386-elf (install)
cc -O2 -pipe  -I/usr/src/lib/csu/i386-elf/../common  -I/usr/src/lib/csu/i386-elf/../../libc/include -std=gnu99  -Wsystem-headers -Werror -Wall -Wno-format-y2k -W -Wno-unused-parameter -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wreturn-type -Wcast-qual -Wwrite-strings -Wswitch -Wshadow -Wcast-align -Wunused-parameter -Wchar-subscripts -Winline -Wnested-externs -Wredundant-decls -Wno-pointer-sign -c crti.S
cc: not found
*** Error code 127

Stop in /usr/src/lib/csu/i386-elf.
*** Error code 1

Stop in /usr/src/lib.
*** Error code 1

Stop in /usr/src.
*** Error code 1

Stop in /usr/src.
*** Error code 1

Stop in /usr/src.
*** Error code 1

Stop in /usr/src.

manefesto, 2011-09-11 в 13:41:17

Мир проверь

Mainbrain, 2011-09-11 в 22:40:46

пересобрал пока что все ок

Dusya, 2012-04-29 в 5:51:56

Афтар еблан
Вместо того чтоб Б,П сменить на нормальный сжог 3 харда и занялся хиутой

Dominator, 2012-11-24 в 14:42:48

Dusya, 2012-04-29 в 5:51:56

Только и можешь поливать грязью? Если да, то тебе здесь не место.

Автору - респект. Статья уже который раз спасает. Сейчас как раз фряха на флешке спасла (дисковода нет): в ходе экспериментов убил на винте разделы.

Happy_demon, 2016-09-23 в 15:01:07

Сейчас, когда pkg_info нет, а есть pkg тело скрипта, для создания пакетов чуть отличается.
#!/bin/sh
mkdir /home/pkg
cd /home/pkg
for i in `pkg query %n-%v `; do
pkg create $i
done

А так- отличный туториал.

unisol, 2017-12-06 в 23:40:51

device md + device uzip творят чудеса.
/dev/da0s1d           14983 13091  1743    88%    /
devfs                     1     1     0   100%    /dev
/dev/da0s1a           26263 17287  8714    66%    /boot0
/dev/da0s1f          130780 60240 69236    47%    /uzip
/dev/md0.uzip         76055 74860   435    99%    /named
/dev/md1.uzip         88695 87887   -78   100%    /usr
/dev/md3               3703  1347  2319    37%    /usr/local/etc
/dev/md4              91959 36181 54858    40%    /var
/dev/md5              10615     3 10506     0%    /tmp
<above>:/var/root    106943 51165 54858    48%    /root

То есть на гиговой флэшке 4 таких помещается и возможно обновлять систему и софт на флэшке (раздел /uzip - свободного места на пару образов юзерленда).

Сборка и установка системы+пакетов и генерация образов - скриптами. Пашет уж лет 10.
BGP+OSPF+thttpd+mrtg+mpd+vpn+secondary dns+...
Да, обновлять "не оч приятно", т.к. апгрейд ядра "на месте" не предусмотрен. В оригинале писалось для 128М CF :).
Всё рид-онли, логи на лог-сервер. Настройки сохраняются путём сохранения 4М раздела с настройками.
Альтернативный вариант - "аналог livecd" с X и плюшками.



 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.042 секунд
Из них PHP: 28%; SQL: 72%; Число SQL-запросов: 77 шт.
Исходный размер: 47740; Сжатая: 11392