ZFS

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

Уря!! Сайтег восстал из пепла.

Жили были, не тужили
Тихо сайтик уронили.

Уронили, блин, с винтом,
Щаз об этом и споем.

Стандартная постройка:

  • FreeBSD
  • ZFS
  • VirtualBox
  • Система с сайтегом.

Что-то с винтом не заладилось, и VirtualBox решил, что образ не кошерный:

 Power up failed (vrc=VINF_SUCCESS, rc=NS_ERROR_FAILURE (0X80004005))

Великий и ужасный гугль, послал в сад раскапывать самый свежий бэкап, т.к. файл побился. На это так же без застенчиво намекал zpool status -v.

errors: Permanent errors have been detected in the following files:
        /usr/data/virtual/web/web_100gb.vdi

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

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

dd if=backup/web_100gb.vdi of=web_100gb.vdi conv=notrunc bs=1m seek=0 count=1

И, ура!!! мы в дамках. Виртуалка поднялась, идем делать бэкапы. :-)

0
Your rating: Нет

Глюки ZFS с мелкими последствиями.

Жил был мой сервер, в основном, с моими фотками (ну и еще по мелочи). ZFS с двумя 2-х ТБ дисками в зеркале, все дела.

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

При попытке засинхронизироваться сервер рассказал, что не может прочитать часть файлов и у них не сростаются cheksum. Запустил scrubbing, он рассказал, что на обоих винтах одинаковые ошибки, и как оказалось в дальнейшем, часть файлов еще и частично посыпалось без каких-либо комментариев. Т.е. читаются нормально, но картинки открываются с артефактами.

Хоть и верю я в рейд и ZFS, но изредка делаю бекап на отдельный диск - мало ли что.

Те файлики, про которые ZFS смогла что-то плохое рассказать перезалил ручками. Про остальные кривые файлы рассказал Syncthing, т.к. он считает  checksum файлов, а на сервере и внешнем носители они оказались разными, то он их перелил, создав отдельную копию старых файлов.

Из неудобств: индексация 250Gb фоток и видео занимала несколько часов и синхронизация не очень шустрая. Если задача залить на пустой ресурс большой объем из "облака", то проще сначала все засинкать через rsync, а потом уже запускать Syncthing.

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

0
Your rating: Нет

ZFS и iSCSI на FreeBSD

Поигрался немного с iSCSI и добавлением iSCSI устройств в zpool. Все хорошо, все работает, но к сожалению, ровно до тех пор, пока iSCSI не отваливается.

Как только отваливается iSCSI устройство, любой процесс обратившийся к пулу вешается навеки до перезагрузки или до восстановления устройства. Система не может нормально сообщить, что устройство в дауне и zfs ожидает ответа до упора. Как выяснилось позжее, на самом деле это зависает инициатор при потери связи с сервером. И все процессы пытающиеся подключиться к /dev/daX получают хардлок. Вроде, в каких-то случаях получается снять процес iscontrol, но не всегда.

0
Your rating: Нет

Резервное копирование 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: Нет

Копирование системы с 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: Нет

Некоторые проблемы с 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: Нет

Установка 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: Нет
Ленты новостей