Я давно думал об управлении версиями файловых систем. Это потрясающая функция, и я смотрел на Wayback, ext3cow, zfs, решения fuse или просто наложения cvs / svn / git.
Считаю ext3cow моделью для своих требований. Прозрачный, эффективный, но я могу обойтись без лишних ls abc@timestamp
характерная черта. Если я каким-то образом получаю автоматическое прозрачное управление версиями моих файлов.
Это может быть мгновенно или основываться на снимках с интервалами в 10, 30, 1, 5, 15 и т. Д. Просто то, что будет эффективно работать с тысячами файлов в заданном каталоге всех размеров, самых маленьких, но некоторых от 100 м до 1 ГБ.
ZFS на самом деле не вариант, поскольку я использую Linux (и я бы предпочел не использовать его через fuse, поскольку у меня уже есть установка ext3, которую я хочу обновить, а не что-то новое).
Какие есть решения?
Если вы обертываете файловые системы с помощью LVM, вы можете создать том моментального снимка, используя базовый уровень логического тома. Это довольно простой процесс и на удивление эффективен для стандартных вещей, связанных с созданием моментальных снимков, таких как резервное копирование и отмена. rm -fr
ой.
Через 8 лет поиск Я нашел SVNFS по Марко Р. Газзетта (который отличается от более старого проекта с тем же именем на Джон Мэдден [который делает разные вещи]). это SVNFS использует svn прозрачно в операциях чтения / записи:
Вместо создания файловой системы, которая сама поддерживает управление версиями, я использовал существующий инструмент управления версиями, Subversion, и сделал его использование прозрачным. Преимущество заключается в том, что эта файловая система не требует от вас изучения нового инструмента, если вы знаете Subversion.
Он написан на Python и использует FUSE:
Теперь вы запускаете файловую систему управления версиями, вызывая прикрепленный скрипт:
python svnfs.py -o svnroot=/home/marco/svnfiles /home/marco/myfiles
Когда все будет в порядке, вы сможете получить список обоих каталогов и убедиться, что их содержимое одинаково.
Теперь, если вы создадите (почти) любой файл в любом каталоге, он также появится по другую сторону забора. Большая разница в том, что если вы создаете файл в каталоге myfiles, он автоматически переходит в систему контроля версий (обратное неверно).
В примере SVNFS использует отдельный каталог для репо. Хотя не тестировал. Для моих нужд я хотел бы иметь репозиторий прямо в моем рабочем каталоге.
Я также нашел ссылка на Reiser4возможности управления версиями 4 года назад:
См. Reiser 4. Файлы - это каталоги.
например:
diff -u main.C main.C/r/123
Или для доступа к свойствам
cat main.C/p/svn-eolstyle
echo "foobar" > main.C/p/my-property
Кажется, что было бы лучше следовать этой модели, поскольку основная файловая система уже идет по этому пути.
-Пол Кверна
Но я тоже не проверял.
Два года назад пошел искать дальше, нашел проект FiST для создания стекируемых файловых систем и связался с проф. Эрез Садок из Университет Стоуни-Брук кто был советником / наставником проекта, позвонил versionfs давным-давно. Цитата:
http://www.fsl.cs.sunysb.edu/docs/versionfs-fast04/
http://www.fsl.cs.sunysb.edu/docs/versionfs-msthesis/versionfs.pdf
позволяет пользователям легко и эффективно управлять своими версиями. Versionfs обеспечивает эту функциональность с накладными расходами не более 4% для типичных пользовательских рабочих нагрузок. Versionfs позволяет пользователям выбирать как версии, так и способы их хранения с помощью политик хранения и политик хранения соответственно. Пользователи могут выбрать компромисс между пространством и производительностью, который лучше всего отвечает их индивидуальным потребностям: полные копии, сжатые копии или блочные дельты. Хотя пользователи могут контролировать свои версии, администратор может устанавливать минимальные и максимальные значения и предоставлять пользователям разумные значения по умолчанию.
Кроме того, с помощью libversionfs неизмененные приложения могут проверять, изменять и восстанавливать версии. Пользователи могут просто запускать знакомые инструменты для доступа к предыдущим версиям файлов, вместо того, чтобы требовать от пользователей изучения отдельных команд или просить системного администратора перемонтировать файловую систему. Без libversionfs предыдущие версии полностью скрыты от пользователей.
Наконец, Versionfs выходит за рамки простого копирования при записи, использовавшегося в прошлых системах: мы реализуем копирование при изменении. Хотя сначала мы ожидали, что сравнение старых и новых страниц будет слишком дорогостоящим, мы обнаружили, что увеличение системного времени более чем компенсируется уменьшением времени ввода-вывода и процессорного времени, связанного с записью неизмененных блоков. Когда используются более дорогие политики хранения (например, сжатие), копирование при изменении еще более полезно.
Мне это показалось очень интересным, но общение с парнями, работавшими над проектом, показало, что его исходный код неизвестен. Сам профессор заявил в письме:
Код Versionfs сейчас очень старый, и он работал только в ядре 2.4. Если вам по-прежнему нужен стекируемый f / s для управления версиями, то придется написать его с нуля - возможно, на основе wrapfs (см. Wrapfs.filesystems.org/).
Так что здесь нет рабочего проекта, хотя концепция стекируемых файловых систем мне кажется очень хорошей. Кто-нибудь хочет начать проект на основе f обертка, сообщите мне пожалуйста :)
Вы можете проверить gitfs. Это файловая система FUSE, основанная на git, довольно стабильная и очень простая в использовании.
По сути, это наложение на git. Всякий раз, когда вы обновляете файл или каталог, он создает фиксацию с этим изменением (знает, что нужно обработать коммиты, поэтому вы не получите 100 коммитов при распаковке архива). Также знает, как синхронизировать ваш пульт и объединить конфликты, используя стратегию «всегда принимать мой».
Когда вы его монтируете, он открывает вам два каталога: ток и история.
├── current
│ ├── test1.md
│ ├── test2.md
│ ├── test3.md -> current/test2.md
│ ├── test4.md
│ └── test_directory
└── history
├── 2014-11-23
│ ├── 20-00-21-d71d1579a7
│ │ └── testing.md
│ └── 20-42-32-7d09611d83
│ ├── test2.md
│ └── testing.md
├── 2014-12-08
│ ├── 16-38-30-6d6e71fe47
│ │ ├── test2.md
│ │ └── test1.md
Более подробную информацию можно найти на этом страница.
Буп выглядит многообещающе.
Более раннее обсуждение этого здесь: http://lwn.net/Articles/380983/
Пытаться rsnapshot - Сам не использовал, но наткнулся на него при поиске @ файловых систем дедупликации.
Взгляните на Hot Copy от R1Soft.
http://www.r1soft.com/tools/linux-hot-copy/
Это модуль ядра, который предоставляет моментальные снимки копирования при записи для стандартных систем без использования LVM. У меня он работал довольно хорошо, и я могу установить его без перезагрузки.
Также см: http://www.r1soft.com/tools/linux-hot-copy/hcp-tips/