?

Log in

No account? Create an account

Previous Entry | Next Entry

В предыдущих постах я неоднократно упоминал о zfs. Причем получалось, что и памяти и процессора она требует не по детски. Остался вопрос - и зачем? Сразу скажу, что не претендую на полноту и пр. Что такое zfs можно взглянуть в Википедии. Заинтересовавшимся серьёзнее советую нагуглить zfs administration guide (вроде бы был и по русски). Моё намерение - объяснить зачем вдруг дома файловая система корпоративного уровня. Прим. У читателя, особенно второй части поcта, предполагается уверенное понимание того, что такое дисковые массивы, напр. RAID5. Если понимания нет - вряд ли такие массивы стоит дома самому строить и этот текст читать.


1. Целостность файловой системы. Каждый сталкивался с ситуацией, когда файловую систему приходилось чинить. Успешно или не очень. zfs построена так, что в ней даже нет утилиты вроде виндовой chkdsk или линуксовой fsck. Ситуация, когда файловая система оказалась в противоречивом состоянии, просто невозможна. Реализовано через Copy-on-write (данные пишем не поверх старых, а выделяем новый блок, пишем туда, если все ОК - заменяем указатель со старых данных на новые. Подробнее - см гугл). В результате логическая структура диска не испортится из-за того, что-то не вовремя отключили или свет отрубился. Ну разве записанное в последние 10 сек пропадет. (впрочем, диск может и физически сгореть при играх с электричеством).

2. Уверенность, что не прочитаешь мусор, думая, что читаешь данные. Железо несовершенно. Например, если дребезжат контакты на SATA кабелях, на диск будет записано совсем не то, что было в памяти. И никто, замечу, долгое время об этом не узнает. Мой профессиональный опыт связан с полиграфией. Не раз приходилось на выводе видеть картинку до середины нормальную - а дальше шум. zfs хранит с каждым блоком данных его контрольную сумму. При считывании данных сумма автоматически сличается. Казалось бы, так просто...

3. Уверенность, что хранимые данные не протухли. Да, данные при хранении имеют тенденцию портиться. Что хорошо известно тем, кто поверил маркетингу производителей DVD болванок про 100 лет и записал на них свои архивы. Особенно это важно для "холодных" данных, долгое время лежащих без движения. Архивах, старых фото и т.п. Проверить данные вроде как просто - надо их считать и сличить контрольные суммы. Для zfs, понятно - достаточно файлы прочитать. Для регулярной проверки есть команда, в фоновом режиме все проверяющая.

4. Снимки файловой системы.  Легкость запоминания состояния файловой системы на данный момент времени, хранение таких снимков и откат к ним при необходимости. Защищает от дурацких действий человека. Модель Copy-on-write просто располагает к такой функциональности - блоки удаленных или перезаписанных данных просто не освобождаем, а ссылки на них храним в снимке. В результате снимок занимает места столько, сколько содержит измененных по сравнению текущим моментом данных, а не весь объем данных. 

Это все было для данных без избыточности, типа одиночного диска. Но zfs позволяет формировать массивы с избыточностью, подобные (и превосходящие) RAID1 (зеркало), RAID5 (избыточность в размере одного диска), RAID6 (двух) и даже "RAID7" (сохраняющий данные при выходе их строя любых трех дисков массива). Массивы можно объединять, получая что-то вроде RAID10 или RAID50. И чем же zfs массивы лучше?

5. Аппаратная независимость. Чтобы сделать аппаратный RAID5, тем более RAID6, нужен дорогой RAID контроллер. zfs raidz - вариант программного RAID, требуются только доступ к дискам, например SATA порты. zfs raidz вполне может быть построен на портах разных контроллеров и из дисков разных моделей (в использовании разных моделей дисков есть и плюсы и минусы). И перенесен чуть не на любое железо, куда можно подключить диски. Я, например, неоднократно переставлял диски между SATA портами, прозрачно импортировал массив, созданный в режиме IDE на контроллере, в ACHI режиме и на SAS контроллере. Хотя операционная система нумерует диски по портам и определяет IDE, ACHI и SAS диски по-разному, zfs все это способен молча отработать (до определенных пределов, конечно. Сдуру что хочешь можно сломать.)

6. Отсутствие Дыры по Записи. (Wiki) То есть разрушения данных, если диск массива не может принять данные. Дорогие RAID контроллеры оборудуют батарейками, которые позволяют много дней хранить данные, не успевшие попасть на диск, и записывать их в массив при появлении возможности.

7. Устойчивость при сбое диска. Пусть у нас одинаковые RAID5 и zfs raidz1. В каждом из них сбоит один из дисков,  меняем его на новый. И в процессе замены (а она занимает многие часы для больших массивов) не читается блок на одном из оставшихся дисков массива.

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

Для zfs raidz1 сообщается на какие файлы пришлись сбойные блоки, остальное синхронизируется. А если с заменяемого диска хоть что-то читается и от компа его не отключали - информация с него тоже будет использована для синхронизации. И с высокой степенью вероятности данные вообще не потеряем.

8. Работа с полезными данными, а не всем массивом. Например, если я заменяю диск в RAID5 массиве, время восстановления зависит от объема массива. Если в zfs raid1 - от объема записанной в массив информации, тк не используемое для данных место не будет синхронизироваться.

Преимуществ еще много, но мне для дома интереснее именно эти. В корпоративном применении - есть и другие (сжатие данных, дедупликация...). Упомяну важные для меня недостатки.

1. Нарастить raidz массив на один диск нельзя. Можно заменить все терабайтные диски на тритеры - и увеличить объем. Можно собрать из 3 (и более) дисков еще один raidz и добавить его к существующему. Но превратить raidz1 из 5 дисков в raidz1 из 6 можно только слив куда-то информацию, разрушив массив и создав новый.

2. Массив нельзя уменьшить. Можно только увеличивать. Например, заменить в массиве терабайтные винты на двухтерабайтные - можно. А на полутерабайтные - нельзя, даже если в массиве хранится 1 килобайт инфы.
Можно подсоединить к массиву еще один - а отсоединить нельзя. Все такие процедуры - только через сохранение инфы куда-то вовне, разрушение массива и создание нового.

3. Ресурсоемкость. zfs постоянно считает контрольные суммы, что создает нагрузку на процессор и жрет под кеши память. В корпоративном применении есть мнение - гигабайт памяти на терабайт массива. Дома мне хватает 330 атома и 4 Гб памяти (а раньше и на 2 Гб работало - особой разницы не увидел). Хотя атома для полной утилизации гигабитной сети мне не хватает, но 40-50мб/с мои потребности закрывает.. А вот если железо старое и еще значительно слабее - zfs не для Вас.

Да, напомню, если понравилось - в NAS4free, которому и посвящен весь цикл постов, управление NAS, включая операции с zfs, идет через понятный новичку веб интерфейс.

UPD1 Немного критики ZFS (англ.)

Tags:

Comments

( 29 comments — Leave a comment )
Игорь Евгеньевич
Oct. 21st, 2012 02:30 pm (UTC)
ZFS
День добрый, как то был у меня собран FreeNAS сервер, на древнем Pentium-III. Но времена шли и я как-то наткнулся на Вашу статью, в которой прочитал информацию о NAS4Free и она меня заставила переехать на NAS4Free полностью и бесповоротно.
Для этого была собрана новая система со следующими параметрами:
- intel D2700MUD [2.13 GHz Набор команд 64-bit(но на нем NAS4Free 64bit наотрез отказался работать)] В NAS4Free отображает как 4 ядра, на самом деле там 2ядра по 2 потока. Win7 64bit Максимальная на нем работала без осложнений, достаточно шустро(ради интереса проверял) и офис просто летал по сравнению с Intel CORE2DUO.
- 2Gb ОЗУ DDR3-1066[возможно расширить до 4Gb] на самом деле со всей конфигурацией более 24% занятости небыло замечано с учетом постоянно работающего торента.
- raid контроллер в PCI был у меня старый, но на нем погарел порт и пришлось взять который был в магазине. Оказался на Silicon 3114 на 4 SATA 1.5Gbps. По расчетам, для моих нужд и под сетевое хранилище с сетью в 1000Gbit должно было хватать за глаза.
- HDD подключил на саму маму под систему 320Gb Sigate, на нем же раздел под временные файлы и всякое барахло и на данные 1.5Tb WD. На контроллер 2штуки 1Tb WD. Хотя и 1.5Tb на контроллере работал стабильно, быстро.
В итого получилось, вообще супер. Максимум по сети данные передаються со скоростью 60 мегабайт в секунду. Подозрение на упор жестких дисков WD грин.
После чего надоел разброд информации среди дисков, было решено собрать софтовый RAID5 который предоставлялся самим NAS4Free. На виртуальной машине были проделаны массы тестов с дисками от 2 до 5 штук и все было радужно и красиво. Ранял диски по одному, заменял новыми, все отлично работало без потерь данных.
Но тут стал вопрос о масштабируемости объема. И меня заинтересовал ZFS дома, так как на работе администрирую сервер, и у него удобная система квот и так далее, но больше меня привлекло увеличение объемов дисков при необходимости.
Отсюда вытекает вопрос как к человеку, который имеет опыт в использовании ZFS:
Стоит ли переходить на ZFS на данном железе при условии, что будут приобретены 5 HDD по 2Tb. Ими планируеться заменить все диски кроме системного(на 320Gb)? Всего в системе будет использоваться 6 HDD. И какой тип ZFS задействовать непосредственно при сборе в NAS4Free? Я с клоняюсь к одинарному контролю четности RAID-z. Сохранность данных играет все же большую роль. Вся система должна выдержать падение одного диска в любом случае.
Заранее благодарю за потраченое время на это сообщение.

Edited at 2012-10-21 03:54 pm (UTC)
2gusia
Oct. 23rd, 2012 10:52 am (UTC)
>Стоит ли переходить на ZFS на данном железе
IMHO, если не поднимается 64 бит - я бы не стал. По отзывам, 32-бит реализация ZFS во FreeBSD существенно глючнее. Требует тюнинга, при неверном - сваливается в панику. Хотя, конечно, странно, что Atom D2700 не заводится на 64x. У меня Атом 330 прекрасно работал -может в биос что-то надо подкрутить?

Если поднять 64x, то ответы далее
>5 HDD по 2Tb
У меня валяется Silicon 3114. Поэтому знаю, что в зависимости от прошивки они могут понимать диски более 1T, а могут и НЕ понимать. А перешить биос не на любой карте можно - многие делались с не перешиваемыми микросхемами (мой экземпляр - поддердивает)

Далее - контроллер на 4 диска отдаст только скорость PCI (133 мегабайта/с). То есть скорость массива будет в пределе 133/4= 33 мегабайта. Маловато... То есть на него уж тогда вешать минимум дисков - 2, три. А nas4free поместить на флешку - не нужен там диск IMHO (если не ставить дополнительных пакетов)

>Я с клоняюсь к одинарному контролю четности RAID-z
Я тоже



bap9ir
Dec. 31st, 2012 05:41 pm (UTC)
Увеличение объема raidz1
2gusia, хотел бы у вас еще раз уточнить по поводу добавления еще одного винчестера к raidz1. Правильно ли я понял, что если у меня собран массив из трех 2Тб дисков в raidz1, то я не смогу добавить еще один к ним 2Тб без переноса информации и разбора массива? И второй вопрос, все-таки как лучше собрать рейд, уже на стадии подключения виртуальный устройств объединить их уже в одно виртуальное устройство или же создать несколько виртуальных устройств и в управлении объединить их в один рейд массив? Не пинайте, если данные вопросы вам покажутся простыми, дело в том, что я как обычный пользователь без опыта системного администрирования, очень не охотно ставлю опыты над своими данными и хотел бы получить максимум возможной информации.Спасибо)).
2gusia
Jan. 2nd, 2013 04:20 pm (UTC)
Re: Увеличение объема raidz1
>Правильно ли я понял, что если у меня собран массив из трех 2Тб дисков в raidz1, то я не смогу добавить еще один к ним 2Тб без переноса информации и разбора массива?

Да

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

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

>Не пинайте
Нормальные вопросы :)
См также что я и камрады писали в FAQ http://wow.kamensktel.ru/doku.php/zfs


Slider Black
Feb. 2nd, 2013 03:48 pm (UTC)
как лучше собрать RAID
"как лучше собрать рейд, уже на стадии подключения виртуальный устройств объединить их уже в одно виртуальное устройство или же создать несколько виртуальных устройств и в управлении объединить их в один рейд массив?"

Если я правильно понял en.wiki, то надо собирать RAID из нескольких vdev, а не наоборот - RAID делать одним vdev:

IOPS performance of a ZFS storage pool can suffer if the ZFS raid is not appropriately configured. This applies to all types of RAID, in one way or another. If the zpool consists of only one group of disks configured as, say, eight disks in raidz2 – then the write IOPS performance will be that of a single disk, however, read IOPS will be the sum of eight individual disks. This means, to get high write IOPS performance, the zpool should consist of several vdevs, because one vdev gives the write IOPS of a single disk. However, there are ways to mitigate this IOPS performance problem, for instance add SSDs as ZIL cache — which can boost IOPS into 100.000s.[73] In short, a zpool should consist of several groups of vdevs, each vdev consisting of 8–12 disks. It is not recommended to create a zpool with a single large vdev, say 20 disks, because write IOPS performance will be that of a single disk, which also means that resilver time will be very long (possibly weeks with future large drives).
2gusia
Feb. 3rd, 2013 07:26 am (UTC)
Re: как лучше собрать RAID
>Если я правильно понял en.wiki, то надо собирать RAID из нескольких vdev, а не наоборот - RAID делать одним vdev:

не совсем правильно, IMHO. Зависит от поставленных целей. Суть в том, что пул из одного vdev имеет невысокие характеристики производительности, особенно на запись. Измеряемой в IOPS.

Если мы собираем пул из нескольких vdev, производительность растёт за счет распараллеливания. Но при этом идёт больше дисков на чётность, те полезного места остаётся меньше.

Поэтому, если пул используется как домашняя файлопомойка, нагрузка на него крайне невелика. И одного vdev на пул достаточно практически всегда.

если же требуется высокая, не домашняя, производительность (например база данных, пул с которого работают по iSCSI клиенты, множество потоков видео просмотра и тп.) - то надо специально рассчитывать её. Обычно приходится ставить либо зеркала либо страйпы зеркал. Всё как в обычных RAID, там это RAID1 и RAID 10

Ну и, наконец, это было теоретически. Практически - сколько у вас максимум дисков хочется собрать в raidz? Если 5 и меньше - то вариантов нет - raidz из одного vdev. Если 6-8, то решаем исходя из конкретики.

Edited at 2013-02-03 07:27 am (UTC)
bap9ir
Dec. 31st, 2012 05:51 pm (UTC)
Совсем забыл))
С Наступающим Новым Годом! Всем всего самого лучшего)))
2gusia
Jan. 2nd, 2013 04:23 pm (UTC)
Re: Совсем забыл))
С наступившим! :)
livejournal
Jan. 10th, 2013 10:03 am (UTC)
Отдельно про FreeNAS
Пользователь skydog сослался на вашу запись в записи «Отдельно про FreeNAS» в контексте: [...] Выбран он был в первую очередь из-за ZFS (тут [...]
andreyhazov
Feb. 12th, 2013 08:39 pm (UTC)
nas4free
Подскажите пожалуйста! Я могу использовать один диск а при покупки второго соединить его в Райд 1 Или надо сохранить данные и потом перенести в новый массив. Спасибо за ответ!
2gusia
Feb. 16th, 2013 01:36 pm (UTC)
Re: nas4free
>Я могу использовать один диск а при покупки второго соединить его в Райд 1

Для zfs raidz1 - да, всего одна команда в командной строке. можено и через вебгуй, но imho сложнее

Для gmirror - не знаю, не использовал. (Disks|Software RAID|RAID1|Management)
Сергей Напалков
Feb. 5th, 2014 05:42 pm (UTC)
Поэтапное наращивание
Доброго времени суток.
Везде пишут про сборки из трех и более дисков. Но..
1. Был один диск в ZFS (stripe), к счастью появился второй аналогичный. Данные на первом диске в любом случае теряю при перестроении?
2. Как быть если диска всего два? Какой схему посоветуете? Но никоем случае не потерять производительность.
(через iSCSI крутятся виртуалки)
3. Если в будущем появится третий.. Форматировать все три?

Подскажите, пожалуйста, как правильно сейчас построить, если планирую наращивать поэтапно:)

Edited at 2014-02-05 05:45 pm (UTC)
2gusia
Feb. 5th, 2014 06:09 pm (UTC)
Re: Поэтапное наращивание
почитайте наш FAQ https://sites.google.com/site/selfmadenasfaq/home/nas_relative/zfs

из одного диска прибавлением второго (такого же или больше) вы можете сделать зеркало, причём без потери инфы. Надёжность вырастет, производительность - тоже/ Размер останется тем же.

Или можно сделать страйп. Надёжность серьёзно упадёт, производительность - несколько вырастет. Размер удвоится.

Из трёх дисков можно сделать raidz
Надёжность вырастет (но меньше чем у зеркала), производительность - как у одиночного диска. Размер как два диска.

Трюком с fake диском (описано в FAQ) можно сделать так, что инфа, перельётся на массив из 3 дисков.
Леонид Аронов
Oct. 14th, 2014 12:02 pm (UTC)
Проверка на протухание
Добрый день!
Подскажите, пожалуйста, как проверять данные на "протухание"?
2gusia
Oct. 14th, 2014 12:14 pm (UTC)
Re: Проверка на протухание
scrub - через меню или командой

zpool scrub <имя_пула>

Пожалуй, стоит пост написать - спасибо за идею.

Причём проверять стоит регулярно.
Леонид Аронов
Oct. 14th, 2014 12:42 pm (UTC)
Re: Проверка на протухание
Спасибо!
Да я вот был уверен, что у вас пост написан, но не нашел:))
А автоматически выполнять эту команду толкьо через крон стоит или nas4free умеет это сам делать?

как часто вы бы посоветовали проводить проверку пулов для фотографий, кино и т.п. ?
2gusia
Oct. 14th, 2014 01:15 pm (UTC)
Re: Проверка на протухание
я думаю - не чаще раза в неделю и не реже раза в два месяца. То есть где-то раз в месяц в зависимости от ровня паранойи. Процесс не быстрый, до десятков часов, тк идёт в фоне, грузит и диски и процессор.

Интерфейс посмотрю - но думаю, через крон подать одну команду не проблема.

Вот и фактура для поста набралась ;)
Александр Колесниченко
Jan. 25th, 2015 09:02 am (UTC)
"Для регулярной проверки есть команда, в фоновом режиме все проверяющая"

Подскажите, пожалуйста, она работает уже по умолчанию? Или её надо где-то в настройках активировать?
2gusia
Jan. 25th, 2015 10:10 am (UTC)
Запуск программмы по расписанию
команда простая, zpool scrub проверит все пулы, zpool scrub ThisPool - пул с именем ThisPool

Для запуска программ по расписанию в *nix есть мощный механизм cron, в nas4free он вынесен в вебгуй.
System|Advanced|Cron

Там вроде всё предельно понятно, но на всякий случай - я настраивал cron через вебгуй в постах про RSYNC (а? чтоб два раза не вставать, через командную строку в джейле - в посте про torrentmonitor)

Но я лично проверяю пулы раз в несколько месяцев - чаще смысла не вижу. С моими объёмами это процедура на сутки этак.
s1r0ta
May. 7th, 2015 06:41 am (UTC)
Добавить новый диск в пул (пул stripe)
Я как бы знаком с аппаратный raid, ну там програмный на вин серверах, но вот zfs для меня еще диковина. Читаю по немногу, понял что очень отказоутстойчива скажем на момент выключения света резкого и т.д. даже в stripe (я молчу за физическое повреждение скажем и прочее). Вот суть проблемы - первично пул был создан stripe с 1 винтом на 2 Tb. Место закончилось. Достал еще 1 TB, как я читал ранее пул легко расширяется на ходу без рестарта, инфа разносится сама со временем. В общем я был спокоен, но вчера сунув новый винт я понял что в гуе новый винт к текущему спулу не подрубить (что raidz и z2 не меняемые пулы я в курсе). СОбственно сам вопрос - как?
s1r0ta
May. 7th, 2015 08:52 am (UTC)
Re: Добавить новый диск в пул (пул stripe)
Оказывается все очень просто. Заходим по shh рутимся и
zpool add Pool ada1
Ни чего ни где обновлять не надо, все само сразу обновляется, объем увеличился. Я счастилив )
Александр Колесниченко
Jun. 14th, 2015 09:10 pm (UTC)
фрагментация ZFS
Доброго времени суток.

Возник вопрос, подвержена ли ZFS фрагментации? Ничего про это не видел в Ваших материалах...
2gusia
Jun. 15th, 2015 08:05 am (UTC)
Re: фрагментация ZFS
Коротко - да. Но это как ни странно долгий вопрос. Заметную деградацию от фрагментации можно поиметь только в двух случаях - запись в почти (95+%) полный пул и приложения типа битторрента, пишущие случайно. Причём второй случай поддаётся настройке через буферизацию.

дело в том, что zfs по архитектуре с одной стороны, за счёт (а)интенсивного кеширования записи и (б)CoW принципа, пишем каждый раз в новое место, обычно сглаживает фрагментацию, а с другой - даже если файл один и непрерывный - будет доля случайного чтения - на метаданные и блоки чётности.

Утилиты дефрагментации ZFS нет в принципе.
alex_shine
Sep. 6th, 2015 05:24 pm (UTC)
Надёжность
Будет ли серьёзная разница в надёжности raidz1 на 4-х и на 5-и дисках в домашней файлопомойке? Диски не из одной партии, БП хороший, бесперебойник, логи на почту настрою.

И стоит ли держать подключенным чистый диск для hot spare (насколько я помню, для zfs это можно сделать) или для ДФП это перебор?
2gusia
Sep. 6th, 2015 06:03 pm (UTC)
Re: Надёжность
в надёжности разница незначительна. По производительности raidz1 из 5 дисков (из расчёта 4 на данные+1 на чётность) побыстрее и про потерям места (запись в 128K лучше делится на 4 диска данных, чем на 3) получше
2gusia
Sep. 6th, 2015 06:07 pm (UTC)
Re: Надёжность
Hot spare имеет смысл когда у вас массив типа raidz-raidz-raidz-raidz - то есть много vdev в одном пуле. Горячаая замена подхватится при выходе из строя любого диска массива. Дома же у вас скорее всего 1 vdev. В этом случае если уж диск ставить - то ставить raidz2. Затраты те же , надёжность на порядки выше.

Ну и ЕМНИП hot spare во FreeBSD пока не поддерживается, так что выше теоретически, а практически - не будет работать.
alex_shine
Sep. 6th, 2015 06:43 pm (UTC)
Re: Надёжность
Всё ясно, спасибо. Ушёл настраивать.
vik021
Apr. 20th, 2018 04:58 am (UTC)
Re: Надёжность
Не знаю насколько это еще актуально, по поводу работы hotspare - работает, но нужно провести некоторые манипуляции:
1. Включить демон zfsd в rc.conf (zfsd_enable = YES).
2. Проверить, что включен autoreplace в пуле(VALUE on):
nas4free: ~# zpool get autoreplace pool_name
  NAME          PROPERTY     VALUE    SOURCE
  pool_name     autoreplace  on       local

3. Если выключен, то включаем, проверяем:
nas4free: ~# zpool set autoreplace=on pool_name
  
nas4free: ~# zpool get autoreplace pool_name
  NAME          PROPERTY     VALUE    SOURCE
  pool_name     autoreplace  on       local
4. После автозамены диска сделать:
zpool detach pool_name /dev/удаленное_устройство
После этого пул переходит в состояние ONLINE


Edited at 2018-04-20 05:13 am (UTC)
2gusia
Apr. 21st, 2018 03:47 pm (UTC)
Re: Надёжность
Спасибо, на практике не использую - но штука ценнная
( 29 comments — Leave a comment )

Latest Month

November 2018
S M T W T F S
    123
45678910
11121314151617
18192021222324
252627282930 

Tags

Powered by LiveJournal.com