Pull to refresh

файловая система ext3cow

Reading time5 min
Views772
ext3cowнедавно попалась на глаза интересная файловая система — ext3cow. Решил сделать маленький обзор.Файловая система ext3cow реализует дополнитульную к функционалу ext3 функцию — сдвиг во времени.

Т.е. это некоторое совмещение системы контроля версий и файловой системы. Вот что говорится в документации:
In time-shifting, ext3cow introduces an interface to versioning that presents a continuous view of time. Users or applications specify a file name and any point in time, which ext3cow scopes to the appropriate snapshot or file version. The time-shifting interface allows user-space tools to create snapshots and access versions. Applications may access these tools to coordinate snapshots with application state. User-space tools are suitable for automation, using software as simple as cron.

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

как это работает со стороны пользователя:

пользователь в определенный момент времени пожелавший сделать бекап файла/ов выполняет команду
[user@host]: snapshot
Snapshot on . 1067992521

(с параметром или без — конкретный файл или все файлы)

Эта команда создает на диске версию данных, актуальную на текущий момент (возвращается дата в формате юникс-эпохи). Это зовется snapshot epoch.
Дальнейшие изменения файла могут быть так же заснапшотены и будут сохранены уже в другой эпохе (что примечательно — изменения файла не сохраняются в рамках одной эпохи. т.е. бекап по желанию. но, исходя из возможностей ext3 — не чаще чем 1 snapshot в секунду. это существенное отличие этой файловой системы от систем контроля версий. subversion, например).
Чтение файла определенной эпохи выглядит так:
[user@host]: cat somefile@1067992521

Просмотреть список эпох, в которых существуют версии определенного файла можно командой
[user@host]: ls file@

Т.е. как будто бы на файловой системы все версии файла хранятся под именами file@TIME, что вполне корректно с точки зрения модели файловой системы в ядре.
Потому возможны интересные штуки —
  • можно монтировать снапшоты как директории. цитата:
    Distinguished snapshots may be created using links, which allows time-shifting to emulate the behavior of systems that put snapshots in their own namespaces or mount snapshot
    namespaces in separate volumes. For example, an administrator might create a read-only
    version of a file system prior to installing new software.

  • древовидно уходить в прошлое:
    it is permissible to have multiple time-shifts in a single path, e.g. /A/B@time1/C/D@time2/E.


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

как это работает изнутри:
Главное отличие ext3cow от ext3 — увеличение количества мета-информации в i-нодах (offtop: ох, вспоминая Симоненко и 3ю пересдачу :) ). Цитата:
ext3cow does not interfere or replace the Linux common file model, therefore, it integrates easily, requiring no changes to the VFS data structures or interfaces. Modifications are limited to on-disk metadata and the in-memory file system specific fields of the VFS metadata. Ext3cow adds metadata to inodes, directory entries, and the superblock that allows it to scope requests from any point-in-time into a specific file version and support scoping inheritance.

Далее:
Both on-disk and in-memory inodes were retrofitted to support snapshot and copy-on-write by adding three fields: an inode epoch number, a copy-on-write bitmap, and field pointing to the next inode in the version chain.

Т.е. версии файла — это связанный список i-нодов, головой которого является последняя версия файла. Каждый из которых содержит в себе номер эпохи, битовую маску копирования-при-записи (кстати, cow наверное отсюда и пошло :) ) и ссылку на следующий i-нод со следующей версией.

Подробней по каждому элементу:
  • номер эпохи. в ОС хранится счетчик эпохи, который соответствует текущему времени. когда идет snapshot — значение этого счетчика записывается в i-нод, а сам счетчик инкрементируется. т.е. новер эпохи в i-ноде — версия файла
  • a copy-on-write bitmap. эта карта предназначена для хранения отметок изменений. Т.е. структура тут напоминает svn-о подобные системы — каждый i-нод хранит ссылки на блоки файла. Если блок файла не поменялся в текущей версии по сравнению с прошлой — ссылка на блок просто копируется и два i-нода указывают на один блок. Ссылки на изменившиеся/удаленные блокои хранятся в i-нодах старых версий. Бит-карта же содержит в себе флажки — нужно ли копировать ссылку или блок изменился и ссылка останется в старой версии файла.
  • указатель на следующий i-нод. Тут разработчики предложили не очень красивое решение. Т.к. в ext3 цепь i-нодов ограничена по длине, то и цепь версий файла мы не сможем продолжать вечно. Нужно сказать, что мета-информация директории тоже расширена — в ссылках на i-ноды файлов хранятся birthepoch и deathepoch. Это нужно для хранения удаленных в новых версиях, но оставшихся в старых вариантах директорий, файлов. Потому ограничение на длину цепи i-нодов обойдено таким workaround-ом:
    When the length of a version chain meets a threshold value, ext3cow terminates that chain by setting the death epoch of the directory entry used to access this chain to the current system epoch and creates a new chain (of length one) by creating a duplicate directory entry with a birth epoch equal to the system epoch. The stability of inodes ensures that other directory entries linking to the same data find the new chain. Data blocks may be shared between inodes in the two chains. A long-lived, frequently-updated file is described by many short chains rather than a single long chain. While directory entries are also
    linear-search structures, this scheme increases search by a constant factor. It will improve the performance of version search from O(n) to O(1) when ext3 adopts extensible hashing for directories.

Вот. Структура довольно проста и ясна (автор на ней PhD получил).

По использованию. Говорят, система вполне стабильна и может уже сейчас использоваться, хотя в текущей реализации много TO-DO и иногда не хватает чущественного функционала (bugs and todos). Цитата:
The authors have been running ext3cow to store data on their laptops and personal workstations since June 2003. We have not experienced a system crash or data loss incident in that period. Ext3cow has appeal beyond the regulatory environment for which it is designed; it has been adopted as the storage platform for several research projects.

С быстродействием тоже проблем не должно быть — в документации есть сравнительный тест с ext3, так вот ext3cow проигрывает на 5-6 ms на двух-трех типах тестов, что уже впечатляет.

немного подождать и можно делать разделы и тестировать. если, конечно, такой функционал файловой системы востребован :)

by-the-way. интересно, как реализована славно-известная новая TimeMachine эппловская. программный журнал?

ну, и в конце, конечно же:
Ext3cow is stable and ready for use under the GNU Public License. It is available for download at http://www.ext3cow.com.

Tags:
Hubs:
+1
Comments4

Articles

Change theme settings