FreeBSD

warning: Creating default object from empty value in /usr/local/www/drupal6/modules/taxonomy/taxonomy.pages.inc on line 33.

Резервное копирование ZFS на меньший диск.

Как обычно, пока что-нить не сдохнет, думать не начнешь.

И по закону подлости, если дохнет, то сразу все.

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

Понятно дело, что что-то с винтами, но нормально выяснить было в лом/не хватало времени/сил/желания.

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

А второй просто смартом ругался:

smartd[2027]: Device: /dev/ada2, 29 Currently unreadable (pending) sectors

Что то же, нифига не радует.

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

Диски шифрованные и плюс файловая система смутной структурой (делал давно, почти по пьяни и структуры в голове не было), т.е. копировать через cp как-то не оно, но при этом хочется, чтобы в случае чего, данные были доступны достаточно шустро.

Итого подцепил диск, объемом чуть больше чем данных, через geli зашифровал, создал zpool и перелил пул на запасной диск.

0
Your rating: Нет

Теневые копии на samba через zfs.

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

Оказалось все довольно просто.

Имеем:

  • Freebsd 8.x и свежее
  • Samba (у меня samba36-3.6.9)
  • ZFS как файловая система под файлохранилище (она позволяет экономить место и очень быстро создает снепшоты)
  • zfsnap (Simple sh script to make zfs rolling snaphosts with cron) - простенький создатель снепшотов для ZFS под FreeBSD

Подготавливаем Samba:

[Public]
   path = /usr/data/samba/public
   public = yes
   writable = yes
   vfs objects = shadow_copy2
   shadow: snapdir = .zfs/snapshot
   shadow: sort = desc
   shadow: format = %Y-%m-%d_%H.%M.%S--1m

Задание cron для создания снепшотов:

0,30    7-20    *    *   *    root    /usr/local/sbin/zfSnap -d -z -R -a 1m zpool/usr/data/samba/public

После этого мы будем иметь возможность откатиться на любую дневную версию файлопомойки с интервалом в 30 минут с 7 утра до 8 вечера. При этом, места будет заниматься ровно столько, сколько необходимо для хранения всех этих изменений.

0
Your rating: Нет

Kernel panic FreeBSD 9.x на VirtualBox 4.2.x

Имеем железку с FreeBSD 9.2 amd 64 с VirtualBox ose 4.2.18. При попытке загрузить виртуальную машину с исошки FreeBSD 9.x. машина падает в Kernel Panic.

После нескольких часов безуспешных попыток, осознал, что сначала создаю виртуальную машину, без определения ее типа, а потом меняю тип на FreeBSD 64. При этом BSD 8.x грузится нормально, а 9-ке плохо.

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

P.S. Опыт такая хитрая штука, которая появляется сразу после того, как она была необходима.
(с)left bor.

0
Your rating: Нет

Копирование системы с ZFS по сети

Возникла задачка, скопировать систему с виртуальной машины на железную. Т.к. система была поставлена полность на ZFS, то соответственно, переносить захотелось силами ZFS.

Все оказалось достаточно просто. Загружаем получателя с установочного диска, входим в LiveCD, поднимаем сеть,

подготавливаем диск к загрузке

dd if=/boot/zfsboot of=/dev/ada0 count=1
dd if=/boot/zfsboot of=/dev/ada0 skip=1 seek=1024

создаем пул

zpool create -f zroot ada0

Запускаем netcat на прослушку и передачу данных в zfs

nc -l 8080 | zfs receive -vdF zpool

На рабочей машине делаем снепшот всего пула

zfs snapshot -r zroot@transfer

и запускаем zfs на отправку данных через неткат

zfs send -Rv zroot@transfer | nc new_pc_ip 8080

Некоторое время ждем, и если все хорошо, то перегружаемся.

0
Your rating: Нет

VPN через ssh на FreeBSD

Обычно объединял сети через тунели между FreeBSD шлюзы через gif-интерфейсы. Легко, просто, быстро, удобно.

Но захотелось прикрутить к этому шифрование. IPSEC не понравился, т.к. нужно много ставить и настраивать, а тут все компоненты есть в коробке.

Последовательность:

  1. Настраиваем sshd: разрешаем тунелирование и вход от root только по ключу.
  2. Создаем ключи и копируем на сервер.
  3. Настраиваем тунель и автоматизируем процес.

Настраиваем sshd: разрешаем тунелирование и вход от root только по ключу

в /etc/ssh/sshd_config добавляем

# For SSH tunel
PermitTunnel yes
PermitRootLogin without-password
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

Создаем ключи и копируем на сервер

На клиенте создаем ключ и публичный ключ копируем на сервер.

На клиенте

ssh-keygen -t rsa -b 4096
# cat /root/.ssh/id_rsa.pub | ssh user@server "cat - >> ~/.ssh/authorized_keys"

На сервере помещаем ключ нужному пользователю:

cat authorized_keys >> /root/.ssh/authorized_keys

После этого на клиенте запускаем

ssh -w5:5 -f -CT -o ServerAliveInterval=10 root@server "ifconfig tun5 10.0.1.1 10.0.1.2" && ifconfig tun5 10.0.1.2 10.0.1.1

Прописываем роутинги и далее, все должно быть хорошо.

0
Your rating: Нет

Некоторые проблемы с ZFS

Пока учусь развлекаться с ZFS под FreeBSD 9 Release вылезло две проблемы. Не знаю, фичи это или баги, но мне не нравится.

1. Проблемы с загрузкой при нескольких пулах на одном диске.

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

Т.е. я разбил диск по стандартной схеме с использованием GPT:

  1. FreeBSD-boot
  2. Swap
  3. FreeBSD-ZFS

Из третьего раздела сделал системный пул с которым система нормально работала и с которого грузилась, назовем его zpool.

А потом решил, что было бы неплохо из своп раздела сделать еще один пул ZFS, назовем его zpool2

После этого, при перезагрузке лоадер выдал, что не может найти едро на пуле zpool2. Т.к. я особо не знаю, как пользоваться лоадером,  я загрузил FreeBSD live и тупо грохнул zpool2, после чего перегрузился и система нормально загрузилась.

2. Зависание процессов, при некоторой работе с ZFS

Пока не повторял, т.к. небыло сил/времени. Ситуация:

Есть ZFS пул, примонтированный /test на который, через самбу пишутся данные. В этот момент решил пул удалить, т.е.

zpool destroy -f zpool_tmp

После чего получил:

0
Your rating: Нет

Раздача видео с видеокамеры

Бился, бился и добился решения, как раздавать видео с сетевой вебкамеры на сайт.

Что имеем

  • Сетевая камера которая отдает поток в rtsp
  • Мелкий канал до камеры
  • *nix сервер, в данном случае, FreeBSD 9.
  • Нормальный канал до сервера

Что хотим

  • Забирать видео с камеры по мелкому каналу на сервер
  • Выводить видео с сервера по широкому каналу.

Используем

Устанавливаем ffmpeg:

cd /usr/ports/multimedia/ffmpeg
make install clean

я выбрал для установки еще

 [*] X264              H.264 video codec support via x264
 [*] XVID              Xvid MPEG-4 video codec support   

Устанавливаем nginx c модулем rtmp

cd /usr/ports/www/nginx
make install
Не очищаем каталог порта, в папочке work/arut-nginx-rtmp-module-f7f24ba/ есть полезные примеры.

0
Your rating: Нет

Переезжаю с qemu на VirtualBox

Черновик статьи. Компиляция

Т.к. продолжаю развлекаться с ZFS под FreeBSD, а она, как выяснилось, лучше всего живет в 64 битной версии, попытался перелезть на amd64.

Все хорошо, за исключением того, что qemu собираться отказывается.

Пошукал в нете, чем можно виртаулизировать и выбор пал на VirtualBox.

По установке стырено тут - VirtualBox OSE (Open Source Edition) на FreeBSD

http://mediaunix.com/2010/11/22/virtualbox-virtualizaciya-vo-freebsd-bez...

# cd /usr/ports/net/libvncserver

Сначала модуль ядра
cd /usr/ports/emulators/virtualbox-ose-kmod && make install clean
Потом сам виртуалбокс
cd /usr/ports/emulators/virtualbox-ose && make install clean

Добавляем в автозагрузку:

echo 'vboxdrv_load="YES"' >> /boot/loader.conf
echo 'vboxnet_enable="YES"' >> /etc/rc.conf

Если не хотим перезагружаться, то можно руками загрузить модуль vboxdrv и скрипт vboxnet
kldload vboxdrv
/etc/rc.d/vboxnet start

Теперь, требуется создать виртуальную машину со всеми прибабахами:

Создание и настройка виртуальной машины - http://subnets.ru/blog/?p=1691

Создаем виртуальную машину (посмотреть все возможные ostype: VBoxManage list ostypes)

# VBoxManage createvm --name MicroXP --ostype WindowsXP --register --basefolder /usr/vbox

0
Your rating: Нет

Будим компьютер по сети имея несколько интерфейсов

Давным-давно было желание научиться будить компьютеры по сети с сервера под FreeBSD.

Когда-то находил програму WOL, но немного поковырявшись с первой попытки у меня не получилось сеё действо.

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

В мане есть такой абзац:

-i HOST
--ipaddr=HOST
    Broadcast packet to this IP address or hostname. This is important
    if your wol client is a multihomed host and you want to send only
    to one subnet (default IP address is 255.255.255.255).

Т.е. если нужно отправить пакет в нужную сеть, то тут ее нужно указать.

Итого получаем:

/usr/local/bin/wol --verbose --ipaddr=10.20.10.255 -w 10 70:71:bc:50:a3:4e

И прекрасно проснувшийся компьютер.

При этом, желательно, не забыть в фаерволе проковырять дырочку на нужный порт, по умолчанию это 40000.

0
Your rating: Нет

Установка Freebsd исключительно на ZFS

Баловался-баловался с ZFS и дошел до того, что хочу чтобы система стояла чисто на ZFS без всяких freebsd-boot разделов.

Сразу оговорюсь, что я все делал с уже установленной 64 битной FreeBSD 9.0-RELEASE amd64, которую я просто переносил на новый zfs раздел. Поэтому местми шаги опущены, а местами чуть другие.

Для нормальной жизни в дальнейшем нужно выполнить следующие шаги:

  1. Сказать системе, что у нас устройство с 4kB блоками
  2. Создать на всем диске ZFS пул
  3. В него записать загрузчик
  4. Создать Swap раздел
  5. Установить систему

Собирал из разных статей, да простят меня авторы.

1. Эмулируем устройство с 4кБ блоками через gnop

# gnop create -S 4096 ada0

После этого мы получаем устройство /dev/ada0.nop

2. Создаем на диске ZFS пул

# zpool create -m /mnt zpool /dev/ada0.nop

После этого проверяем, что у нас пул получился действительно с 4кб блоками:

# zdb | grep ashift
ashift: 12

Если 12, значит все хорошо.

Экспортируем пул, убираем эмуляцию 4кб блоков и импортируем пул обратно. Настройки пула сохраняются.

# zpool export zpool
# gnop destroy /dev/ada0.nop
# zpool import zpool
# zdb | grep ashift
ashift: 12

3. Записываем загрузчик в пул.

Вроде здесь нашел, что в пуле есть место под загрузчик, только записывать его нужно не совсем стандартным путем.

0
Your rating: Нет
Ленты новостей