В предыдущих постах я неоднократно упоминал о 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 (англ.)