Як отримати прозорий, ефективний знімок або версію файлової системи на ext3 / 4?


11

Я довго думав над версійними файловими системами. Це вбивча функція, і я переглянув Wayback, ext3cow, zfs, рішення запобіжників або просто накладки cvs / svn / git.

Я вважаю модель ext3cow відповідно до моїх вимог. Прозорий, ефективний, але я можу обійтися без зайвих ls abc@timestampфункцій. Поки я якось отримую автоматизовану, прозору версію своїх файлів.

Це може бути миттєве або може бути засноване на знімках з інтервалом 10s, 30s, 1m, 5m, 15m і т. Д. Просто щось, що дозволить ефективно обробляти тисячі файлів у заданому каталозі всіх різних розмірів, самих малих, але деяких вгору від 100м до 1гб.

ZFS насправді не є варіантом, оскільки я перебуваю на Linux (і я вважаю за краще не використовувати його через запобіжник, оскільки у мене вже є налаштування ext3, я хочу версію, а не щось нове).

Які рішення є там?

Відповіді:


7

Якщо ви обмітаєте файлові системи за допомогою LVM, ви можете створити об'єм знімка, використовуючи нижній логічний рівень гучності. Це досить простий процес і напрочуд ефективний для стандартних "знімків" речей, таких як резервне копіювання та rm -frвідміняння упс.


Дякую за відповідь. На жаль, я шукаю те, що можна застосувати в існуючій файловій системі.
Дейл Лісник

6

Після 8 років пошуку я знайшов SVNFS по Марко Р. Gazzetta (який відрізняється від старшого проекту з тим же ім'ям Джон Медден [який один робить різні речі]). Цей SVNFS прозоро використовує svn в операціях з виводу на робочий стіл:

Замість створення файлової системи, яка робить власну версію, я використав існуючий інструмент версії, підрив і зробив його використання прозорим. Перевага полягає в тому, що ця файлова система не вимагає, щоб ви засвоїли новий інструмент, якщо ви знаєте підрив

Він написаний на Python і використовує FUSE:

Тепер ви запускаєте файлову систему версій, використовуючи доданий сценарій:

python svnfs.py -o svnroot=/home/marco/svnfiles /home/marco/myfiles

Як тільки все буде добре, ви зможете отримати список обох каталогів і побачити, що вміст однаковий.

Тепер, якщо ви створите (майже) будь-який файл у будь-якому каталозі, він з’явиться і з іншого боку забору. Велика різниця полягає в тому, що якщо ви створите файл у каталозі myfiles, він автоматично розміститься під контролем версій (навпаки не вірно).

У прикладі SVNFS використовує окремий каталог для репо. Хоча я його не перевіряв. Для моїх потреб я хотів би мати сховище прямо в своєму робочому режимі.


Я також знайшов посилання на можливості версії Reiser4 4 роки тому:

Див. Різер 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/).

Отже, тут немає жодного робочого проекту, хоча мені здається, що концепція файлів, що складаються з файлів, яка може скластися. Хтось хотів би розпочати проект на основі обгортки , повідомте мене, будь ласка :)


3

Ви можете перевірити gitfs . Це FUSE файлова система, заснована на git, досить стабільна і дуже проста у використанні.

В основному, це накладка над git. Кожного разу, коли ви оновлюєте файл або каталог, ви створюєте команду з цією зміною (знає, що пакетні комісії не знаходяться в результаті, коли ви скасовуєте архів). Також знає, як синхронізувати ваш віддалений та об'єднувати конфлікти, використовуючи стратегію "завжди приймай моє".

Коли ви монтуєте його, він пропонує вам два каталоги: поточний та історія . ├── 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

Більше інформації можна знайти на цій сторінці .


Додавання додаткової інформації покращило б цю відповідь.
Дейв М

2

буп виглядає перспективно.

Старіші обговорення тут: http://lwn.net/Articles/380983/


Є одне застереження із використанням чогось на основі git, зміни в git не трактуються як дельти від походження - кожен коміт - це повний файл, навіть якщо ви просто змінюєте один байт.
синтезатор

0

Спробуйте rsnapshot - я сам не користувався цим, але натрапив на нього, переглядаючи системи дедупликації на рівні файлів @.


Це цікаво. Я обов'язково загляну в це. Мене хвилює те, що його навантаження на іоні спричинить заїкання в моїй системі (я не робив щось подібне з rsync деякий час тому і перестав його використовувати через поведінку зачіпки / заїкання на інших консолях, коли він працював).
Дейл Форестер

Я поглянув на rsnapshot, і мені подобається його ідея, але дуже, дуже прикро, що для цього потрібна копія копії будь-якого знімка. На жаль, і для необхідності, я працюю з дисками на їх межі, і я хочу зробити вміст знімків, який трохи більше, ніж залишилося вільного місця.
Дейл Форестер

1
Складність полягає у ваших вимогах. крім того, як rsnapshot або LVM, ext2 / ext3 не вбудований механізм зйомки. Ви вказуєте на ext3cow, але вам доведеться змінити основу основної системи. Зауважте, що, схоже, ви можете використовувати rsnapshot і зберігати свої дані на іншому автоматі, я не знаю, про який простір ви говорите, але можливо, має сенс зберігати знімки на іншій машині? Також майте на увазі, що для знімків будь-якого виду буде потрібно місце на диску. Якщо ваші диски майже потужні, скільки місця вам залишилося для знімків?
Джейсон

0

Погляньте на Hot Copy від R1Soft.

http://www.r1soft.com/tools/linux-hot-copy/

Це модуль ядра, який надає знімки з копією на запис для стандартних систем без використання LVM. Для мене це працює досить добре, і я можу встановити його без перезавантаження.

Також дивіться: http://www.r1soft.com/tools/linux-hot-copy/hcp-tips/

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.