"NILFS: A File System to Make SSDs Scream (http://www.linux-mag.com/id/7345/)" - обзор особо устойчивая к сбоям файловой системы NILFS2 (http://www.nilfs.org/en/), которая будет включена в состав Linux ядра 2.6.30. Для хранения всех данных в NILFS2 используются подобные логам структуры, в которых только добавляются новые записи и никогда не переписываются активные. Таким образом оборванная крахом операция записи, никак не отразится на целостности хранимых данных. В NILFS используются B-tree деревья и 64-битные структуры данных, поддерживается возможность фиксации снапшотов (контрольных точек в логе) для просмотра состояния данных на определенный момент времени. Более того с данными в снапшотах можно продолжать работать как с альтернативной веткой ФС, существующей параллельно.URL: http://www.linux-mag.com/id/7345/
Новость: http://www.opennet.me/opennews/art.shtml?num=22015
Кому-то явно завидно что в юбилейном 30-м ядре будет еще одна не самая плохая ФС :).Поставили понимаешь новости -1 втихарика, подлые трусы :Е.
так снапшоты можно ведь через LVM реализовать. нужна ли тогда для этих функций новая ФС? не считая независимых деревьев, конечно.
>так снапшоты можно ведь через LVM реализовать. нужна ли тогда для этих
>функций новая ФС? не считая независимых деревьев, конечно.Просто версионники - более другой тип ФС нежели классические.С другими свойствами.Например, запись по идее достаточно быстрая а восстановление после краша - эстетичное.В принципе версионник может "почти нахаляву" поддерживать валидное состояние не только метаданных но и данных, в меру моего понимания."Почти нахаляву" означает что нет той сильной просадки скорости от журналирования данных которая присутствует в обычном дизайне ФС с журналом.И всегда можно вернуть файл в какой-то вменяемый вид после того как запись в него отвалилась на середине.
ЗЫ в этой статье ext2 почему-то обозвана ФС с деревьями.Если я не дятел - они гонят.Чистый ext2 без нифига деревьями вроде не пользуется?!
ЗЗЫ видится интересный вариант рекавери системы с такой ФС - просто загрузиться в состояние (снапшот) на энное время раньше.Нечто типа отката состояния у виртуалки :)
но как я понимаю, версионные ФС создают большую избыточность данных, чтобы хранить одни и те же файлы, но разных версий. скорее всего используется какая-либо инкрементальная разница между снапшотами для уменьшения использования дискового пространства.правильно понимаю?
>но как я понимаю, версионные ФС создают большую избыточность данных, чтобы хранить
>одни и те же файлы, но разных версий.Версионники не переносят логи изменений из журнала в основную ФС(в отличие от обычных).Вместо этого вся ФС просто является кучкой логов.В результате достигается вполне логичная экономия: запись изменений делается 1 раз - в лог.А переносить из лога в основную ФС - не требуется.Экономия по операциям записи и рост скорости записи - очевидны.
При этом можно считать что ФС постоянно себя снапшотит(за счет ее структуры "куча логов" можно восстановить не только текущее но и некий набор прошлых состояний).Всегда есть набор "кандидатов в снапшоты" - в терминах NILFS это "чекпойнты".Что-то типа снапшотов, только временных - их живет некая пачка, самые старые постепенно подчищаются garbage collector'ом для как раз очистки места на диске.Т.е. выводок временных снапшотов живет на ФС чисто за счет принципа ее работы - ФС логгит все что делает, всегда можно выхватить состояние на некий предшествующий момент просто забив на более новые логи.Что и позволяет просто и корректно восстанавливаться после краха, откатываться на прошлые версии некоторое время и т.п.. Сказать что это занимает место можно достаточно условно - старые чекпойнты постепенно прибиваются и как максимум про них можно сказать "временно занимают место".
Создание "постоянного" снапшота из временного чекпойнта = запрету стирать некий набор логов, т.е. просто, быстро и нахаляву, ведь все что было надо для снапшота - уже есть, просто garbage collector-у запрещается прибивать нужные логи когда-то там в будущем.Это, разумеется приводит к съеданию места таким снапшотом - чудес не бывает.А вот временные чекпойнты место занимают достаточно условно.Тем не менее, хоть они и временные, они позволяют некоторое время (пока их не убьет GC) откатываться к старому состоянию.
>скорее всего используется какая-либо инкрементальная разница между снапшотами
>для уменьшения использования дискового пространства.Эта разница называется "логами".Вся ФС состоит из "разниц" в виде логов.Новое состояние = старое + логи.Инкрементальность зашита в принципах работы такой ФС :)
>правильно понимаю?
Да - такая ФС "разницами" и оперирует, потому и log structured.Из логов состоит.
Основной плюс как я понимаю возможность честно журналировать запись и данных файлов и метаданных не теряя от этого в скорости+простая рекавери и ряд интересных возможностей(если загадили некий файл, можно просто на прошлое состояние вернуться, где он был нормальным).
Минусов у такого подхода как я понимаю есть - срач логами по всему диску и нужда их постепенно подтирать.Потенциально может быть фрагментация + требуется достаточно непростой garbage collector и достаточно навороченная логика вокруг всего этого.
ЗЫ если я где-то наврал, пусть гуру типа Фрески меня поправят.
>Новое состояние = старое + логи.Непонятен этот момент. Т.е. текущее состояние - это лог1 + лог2 + лог3 + ... логХХХХ ? Если так, то считывать тысячи разниц, и, плюс к тому, сравнивать их - довольно затратно.
Или всё же после нескольких десятков изменений создаётся снимок состояний, который достаточно один раз прочитать и сразу использовать, без необходимости сравнивать разницы? Заранее спасибо :)
тут тот же принцип, что в ZFS и btrfs, только реализация немного проще. читайте про эти ФС -- станет понятнее.
>тут тот же принцип, что в ZFS и btrfs, только реализация немного
>проще. читайте про эти ФС -- станет понятнее.Кстати, из того что мне интересно:
1) Перестройка+дефрагментеж GCом... а насколько это безопасно?В плане сохранности данных?По наблюдениям - сбои в процессе таких объединений-дефрагментаций - наиболее хреновое что может произойти с подобной структурой.Как с этим борятся?Что-то не нашел у NILFS на сайте внятного освещения этого вопроса(плохо искал?).
2) Если нагрузка постоянная и интенсивная - как это с GC будет уживаться?
3) Такие структуры в принципе склонны к фрагментации? (GC как я понимаю с этим должен бороться).
4) Конеретно у NILFS кажется работа с мелочью и большим числом файлов в каталогах сделана как я понимаю не ахти? Явно не выглядит как ФС для хранения миллионов мелких файлов в 1 дире в данный момент.
>Основной плюс как я понимаю возможность честно журналировать запись и данных файлов и >метаданных не теряя от этого в скоростиЧто-то я сомневаюсь, что она не теряет в скорости. Почему ты думаешь, что она должна быть быстрее обычной ФС c журналированием?
>Что-то я сомневаюсь, что она не теряет в скорости. Почему ты думаешь,
>что она должна быть быстрее обычной ФС c журналированием?В обычной ФС если честно журналить и метаданные ФС и данные файлов, придется писать записываемые данные 2 раза. Сперва в журнал, потом в ФС. Двойная запись данных разумеется сажает скорость записи. Зато честно реализуется "все или ничего".Запись аннулируется если обломалась при записи в журнал или доводится до конца по данным из журнала если обломалась уже при записи в основную ФС.
Обычно такая просадка считается неприемлимой (просадка вдвое, плюс-минус лапоть) и для большинства некритичных задач пользуют компромиссные варианты, когда в журнал идут только метаданные.Цена компромисса - честного "все или ничего" уже не получается.Валидное состояние ФС - да, есть.А вот в каком состоянии файлы?Правильно, никто ничего не гарантирует.Грамотный подход (типа ordered в ext3) может помочь данным оставаться более-менее корректными в типовых сценариях.Но честные транзакции через журнал надежнее.И этак вдвое тормознее...
"Версионники" пишут новые данные ОДИН раз.Как этакий "лог".Похожий по смыслу на лог журнала классической ФС.Из-за такого принципа работы "все или ничего" получается само (недописанные логи - в топку, дописанные - юзать, сконструировав из них текущий вид файла).При этом получается честное журналирование не только метаданных но и данных.И даже "машина времени" с разными версиями файла - просто свойство такой ФС(достаточно забить на логи позднее чем X - и вот вам ФС в состоянии на момент X).А запись вообще недеструктивна - исходный вариант файла вообще как правило не трогается (как минимум сразу, на момент записи).Отсюда вытекает и достаточно корректный откат (можно просто вернуться к прошлому состоянию файла на котором сорвалась запись) и богатые возможности по части снапшотов(все что надо для снапшота - уже существует).Минусы ... разгребать старье подтирая старые версии версионнику все-таки когда-то придется а сам этот процесс не то чтобы очень уж тривиальный.
>так снапшоты можно ведь через LVM реализовать. нужна ли тогда для этих
>функций новая ФС? не считая независимых деревьев, конечно.на LVM не работают барьеры если используется больше одного физического диска, отсюда как следствие у программ и у ФС пишущих через LVM нет гарантии что после выхода из *sync() данные действительно записались на диск, а это может привести к повреждению данных или журнала ФС при неожиданном отключении питания.
поэтому эта ФС нужна, а LVM не всегда можно использовать.
>на LVM не работают барьеры если используется больше одного физического дискачто такое барьеры? с LMV я совсем недавно начал знакомиться.
>>на LVM не работают барьеры если используется больше одного физического диска
>
>что такое барьеры? с LMV я совсем недавно начал знакомиться./usr/src/linux/Documentation/block/barrier.txt
ОС для обработки запросов ввода/вывода ставит их в очередь и может менять порядок запросов в этой очереди так как считает нужным. если не вдаваться в подробности, барьер - это специальный запрос в этой очереди который гарантирует что все запросы находящиеся в очереди до него, будут выполнены до него и не поменяются местами с последующими.
если этот механизм не работает, информация о том что транзакция успешно выполнена может попасть на диск в файл журнала до того как целиком запишутся сами данные описывающие транзакцию. после неожиданного отключении питания попытка восстановления (файловой системой или например базой данных) такой "пустой" или частично записанной транзакции приведёт к непредсказуемым последствиям.
Нужна. LVM-snapshot - настолько общая вещь, что она неэффективна. Кроме того, NILFS2 должна будет внущать больше доверия к надёжности в плохих условиях, чем LVM.
Ура в Linux снова изобрели ZFS, когда же наконец просто возьмут и будут использовать ZFS?
>Ура в Linux снова изобрели ZFS, когда же наконец просто возьмут и
>будут использовать ZFS?Никогда. Лицензия же.
Угу, причем лицензия линукса.
>Ура в Linux снова изобрели ZFS, когда же наконец просто возьмут и
>будут использовать ZFS?Когда BRTFS допишут ZFS уже будет не нужна :-)
Btrfs уже не нужна - ZFS уже давно в лапах Оракля
А Оракль, что, уже в меинтейнеры линуксового ядра записался и будет решать, что нужно?
>будет решать, что нужно?будет. у них бабки
>будет. у них бабкиНу да, анонимам конечно виднее :).А чего тогда Chris Mason из оракла ничего такого не говорит про пиндец и во всех интервью утверждает что btrfs-у - быть?Может и правда у оракла бабки есть и потому на зарплату одному своему програмеру при потенциально интересном для их бизнеса результате они явно могут денег наскрести? :)
>Btrfs уже не нужна - ZFS уже давно в лапах ОракляВо первых, btrfs по своей задумке будет уметь ряд плюшек которые ZFS не умеет(и неизвестно будет ли уметь).
Во вторых, очень интересно смотрится заява "ZFS уже давно в лапах Оракля" - а что, сделка уже окончательно и бесповоротно завершена?А чего тогда сан до сих пор выступает не под брендом Оракл а под своим?
В третьих - советую подумать о том что линукс столько лет жил вообще без оракла.А вот то что оракл вообще захочет долговременно тягать развитие соляры (и ZFS) в 1 рыло - как-бы не факт.Это куда дороже и геморнее чем совместная разработка с размазыванием затрат на всю ораву.А сил кроме оракла способных работать над такой системой как-то не видно.Тут сан сам себя в пятку своим жлобством по части монопольного контроля развития системы подстрелил, имхо.Они это поняли, но выправить ситуацию не успели.И как известно, Sun хоть и обладал большими доходами, обладал и большими расходами.
>Ура в Linux снова изобрели ZFSЭто не ZFS, NILFS явно менее наворочен.На функциональный аналог ZFS больше BTRFS смахивает, местами по задумке даже переплевывая оный.
> Никогда. Лицензия же.Дык нынче Oracle у руля, он может и сменить на GPL2 лицензию, в добавок к CDDL.
>> Никогда. Лицензия же.
>
>Дык нынче Oracle у руля, он может и сменить на GPL2 лицензию,
>в добавок к CDDL.может, но не сменил.
и не сменит. там патенты, не совместимые с GPL. забудьте.
>>> Никогда. Лицензия же.
>>
>>Дык нынче Oracle у руля, он может и сменить на GPL2 лицензию,
>>в добавок к CDDL.
>
>может, но не сменил.Дык не является он пока официальным её владельцем, как купит SUN, так и сможет сменить, а пока он только может подруливать, но не рулить, ждём августа.
> Когда BRTFS допишут ZFS уже будет не нужна :-)К тому времени мы все поседеем и умрём, а вообще Oracle в случае покупки SUN, может просто отправить сию FS в аналы истории...комунити, как уже не раз делалось в опенсорсе, на вроде ReiserFS.
>К тому времени мы все поседеем и умрём,Что-то мне не хотелось бы так быстро подохнуть. Чтобы помереть за считанные годы наверное надо жить на свалке ядерных отходов и ядохимикатов?...
"Для хранения всех данных в NILFS2 используются подобные логам структуры, в которых только добавляются новые записи и никогда не переписываются активные."
- эт как понять? Если я запишу на винт из сети надцать гигабайт фильмов, закатаю их на ДВД и удалю с винта, что - эти надцать гигабайт будут вечно заняты? :)
они будут помечены как свободные и со временем будут перезаписываться новыми данными по мере устаревания. А пока не перезаписались сохраняется версионость ФС в рамках данных файлов.
Это что 64-х битная реинкорнация BSD LFS?
Да.
>Да.Точно, давайте все "версионники" будем валить в кучу :).Ведь идея в основе их работы одинаковая :)