Инструмент для упрощения использования жестких ссылок для версионного контроля большой директории

Вопрос или проблема

У меня относительно большая директория с данными. Она обновляется время от времени, но обычно только небольшая часть дерева меняется. В настоящее время я обновляю её, используя cp -Rl previous_version/ new_version/, чтобы рекурсивно создать жесткие ссылки в new_version/, затем я вхожу в new_version и вручную обновляю файлы, которые изменились. Это очень эффективно с точки зрения занятых ресурсов, но утомительно, и я должен быть осторожным, чтобы заменить обновленные файлы новыми инодами. Если я случайно изменю файлы, это изменит предыдущие версии.

Что мне действительно хотелось бы, так это возможность создать новую директорию updates/, которая будет содержать только обновленные версии тех файлов, которые изменились, а затем иметь гипотетический инструмент, который я могу запустить вот так:

some-tool previous_version/ updates/ new_version/

Что some-tool должен делать, так это создать new_version/ с использованием жестких ссылок из previous_version/, а затем для каждого файла в updates/ он заменит существующий файл в new_version/ на жесткую ссылку из updates/.

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

Существует ли что-то подобное, или есть, возможно, другой способ решить мою проблему?

Решение этой проблемы так очевидно, что мне немного стыдно оставлять этот вопрос:

cp -Rl previous_version new_version
cp -Rlf updates/* new_version

Несколько старая тема, но интересный вопрос. Вы рассматривали возможность использования ZFS с дедупликацией? В теории это должно делать магию прозрачно для пользователя. Кроме того, вы можете добавить сжатие lz4 с уровнем 3. Эта комбинация должна сделать размер хранилища еще меньше и быстрее. Единственный минус — это большое количество необходимой оперативной памяти.

Ответ или решение

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

Первый подход, который вы уже упомянули, включает использование команд cp -Rl и cp -Rlf. Это простой и эффективный способ работы с версиями файлов:

cp -Rl previous_version/ new_version/
cp -Rlf updates/* new_version/
  • Первая команда создает новую директорию new_version/, где все файлы берутся как жесткие ссылки из previous_version/, что позволяет экономить дисковое пространство.
  • Вторая команда заменяет только измененные файлы в new_version/ на жесткие ссылки из директории updates/. Параметр -l (или --link) используется для создания жестких ссылок, и -f (или --force) позволяет перезаписать существующие файлы.

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

Преимущества использования ZFS:

  1. Дедупликация: ZFS может автоматически удалять дубликаты данных, что позволяет экономить место на диске, даже если у вас много версий одних и тех же файлов.
  2. Снимки: Вы можете легко создавать снимки (snapshots) на уровне файловой системы, что позволяет вам быстро возвращаться к предыдущим версиям.
  3. Компрессия: Включение сжатия (например, lz4) позволит еще уменьшить потребление дискового пространства и повысить скорость.
  4. Требования к памяти: Учтите, что использование таких функций, как дедупликация, может потребовать значительного объема оперативной памяти.

Пример использования ZFS:

  1. Создайте пул ZFS:

    zpool create mypool /dev/sdX
  2. Создайте файловую систему:

    zfs create mypool/mydata
  3. Активация дедупликации и компрессии:

    zfs set dedup=on mypool/mydata
    zfs set compression=lz4 mypool/mydata
  4. Создание снимков:

    zfs snapshot mypool/mydata@current_version
  5. Для обновления просто добавьте файлы в mypool/mydata, и изменения будут автоматически отслеживаться.

Такой подход значительно упростит процесс управления версиями и сделает его более безопасным.

В заключение, использование комбинации команд cp и более современных файловых систем, таких как ZFS или Btrfs, может значительно облегчить работу с версионностью больших директорий.

Оцените материал
Добавить комментарий

Капча загружается...