Апр 23 2010

FreeBSD. Маршрутизатор на флешке.

Жесткие диски — самое больное место современных серверов, не зря большинство аппаратных маршрутизаторов используют в качестве накопителей флешки. Флеш диск имеет меньше ресурсов перезаписи, но он не имеет движущихся частей, поэтому логичным является перенос роутера на флешку, запись нужной конфигурации и перевод диска в состояние read-only. Кроме всего прочего, я держу флешки в зеркале, с помощью gmirror и выход из строя одного диска, не приводит к прерыванию сервиса.
В принципе для установки достаточно флешки на 512 Мб, но большого смысла в такой экономии нет, можно конечно ставить CardRider и использовать SD карты, но у меня эта технология не прижилась. Использую обычные USB карты, монтирую их в сервере вместо дисков, используя внешние USB порты со старых системных блоков. Получается достаточно удобно, открываешь отсек меняешь флешку и все, продолжается работа.

Для того, что бы создать такой роутер нужн прежде всего компьютер с FreeBSD, а дальше вставляем в него флешку и начинаем с того, что создадим файловую систему(у меня флешка определилась как da0):

fdisk -BI /dev/da0
bsdlabel -B -w /dev/da0s1
newfs -U /dev/da0s1a

Файловую систему мы создали.
Можем примонтировать в /mnt, сюда мы будем инсталировать мир и ядро.
Монтируем:

mount /dev/da0s1a /mnt

В принципе смонтировать флешку можно и позже, потому что сейчас нужно в первую очередь собрать мир, а для этого нужно создать /etc/src.conf, в котором отключить все лишнее, что не обязательно иметь на флешке.
У меня он выглядит так:

WITHOUT_ASSERT_DEBUG=yes
WITHOUT_ATM=yes
WITHOUT_AUTHPF=yes
WITHOUT_BLUETOOTH=yes
WITHOUT_CVS=yes
WITHOUT_DICT=yes
WITHOUT_EXAMPLES=yes
WITHOUT_GAMES=yes
WITHOUT_HTML=yes
WITHOUT_I4B=yes
WITHOUT_INET6=yes
WITHOUT_IPFILTER=yes
WITHOUT_IPX=yes
WITHOUT_KERBEROS=yes
WITHOUT_LPR=yes
WITHOUT_NCP=yes
WITHOUT_NIS=yes
WITHOUT_SHAREDOCS=yes
WITHOUT_WPA_SUPPLICANT_EAPOL=yes

Я уверен можно еще много чего убрать из сборки, но в принципе достаточно и этого.
И теперь можно, почистить старую сборку мира:

cd /usr/src
make clear

и собрать новый мир для флешки:

make buildworld

и установить на флешку(она у нас примонтирована в /mnt):

make installworld DESTDIR=/mnt

Затем собрать и установить ядро:

make buildkernel KERNCONF=flashka
make installkernel KERNCONF=flashka DESTDIR=/mnt

Конфиг ядра мало чем отличается от обычного, добавлены нужные опции:

options         GEOM_MIRROR
options         NETGRAPH
options         NETGRAPH_NETFLOW
options         IPFIREWALL
options         IPFIREWALL_VERBOSE
options         IPFIREWALL_VERBOSE_LIMIT=100
options         IPFIREWALL_DEFAULT_TO_ACCEPT
options         IPFIREWALL_FORWARD
options         ZERO_COPY_SOCKETS
options         HZ=2000

Ну и убрать максимум лишнего из ядра.

После того, как поставили ядро нужно установить файлы дистрибутива:

make distribution DESTDIR=/mnt

и теперь осталось создать недостающие файлы fstab и rc.conf, содержимое fstab:

/dev/da0s1a     /       ufs     ro              1       1
md              /tmp    mfs     rw,-s16M,nosuid 0       0

При этом, система при загрузке, определив, что / смонтирован в ro, создаст /var в памяти.
содержимое rc.conf стандартное:

hostname="flashka.hilik.org.ua"
ifconfig_em0="inet 89.252.34.110/24"
defaultrouter="89.252.34.107"
gateway_enable="YES"
sshd_enable="YES"

И теперь можно перезагружаться и настраивать как обычный сервер. Добавлять пользователей и тп.
Дополнительный софт(quagga, net-snmp) я добавляю пакетами(pkg_add), жесткие диски отключаются, добавляется вторая флешка и собирается в gmirror.
В fstab мы прописали опцию ro, в дальнейшем, если нужно перемонтировать в rw, для внесения изменений, то выполняется команда:

mount -o rw /dev/da0s1a /

После внесения изменений назад в ro:

mount /

При непредвиденной перезагрузке, время подъема системы минимально, что опять таки является плюсом и несмотря на кажущуюся кустарность, подбная технология хорошо себя проявила

Добавить в закладки:

google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru
  • By buryanov, 10.05.2010 @ 14:52

    Спасибо, полезно, но.
    Попробовал на 3-х флешках, и везде одна и таже проблема, млешка определяется позже, чем пытается моунтится фс.

  • By hilik, 10.05.2010 @ 17:39

    Это баг во FreeBSD 8.0, используйте или FreeBSD 7.3 или воспользуйтесь вот этим советом:
    http://www.hilik.org.ua/freebsd-usb-flash/

  • By Born in the USSR, 10.08.2010 @ 11:34

    Вот тут опечатка
    cd /usr/src
    make clear
    должно быть make clean

  • By msym, 18.08.2010 @ 08:36

    to buryanov
    в loader.conf kern.cam.boot_delay=10000

  • By hilik, 18.08.2010 @ 10:11

    я пробовал этот метод, не помогает. Нужно патчить сорцы, это помогает гарантированно.

Other Links to this Post


Украинская Баннерная Сеть