Храните несколько версий больших двоичных файлов с минимальным дублированием данных (предпочтительно Linux)
Мне нужно хранить несколько версий двоичного файла размером ~ 150 ГБ (qcow2) на серверах Linux с локальным хранилищем, и я надеялся, что есть какое-то решение, которое заключается в сохранении различий, которые могут быть объединены по мере необходимости, так что мне не нужно создавать другую копия файла объемом 150 ГБ, когда изменилось только 4 гигабайта. Это вопрос хранения, а не вопрос об особенностях KVM/qcow2. Я уже исследовал некоторые из этих вариантов. В настоящее время используется CentOS 6.3 с EXT4. Файлы должны храниться неопределенно долго и должны быть полностью исправны при восстановлении. Я готов изменить файловую систему и т.д., если решение того стоит.
3 ответа
ZFS на Linux с дедупликацией может быть вашим другом в этом случае. Для установки доступны RPM / репозитории Red Hat.
Даже без дедупликации, если вы можете включить это в рабочий процесс создания снимков ZFS, есть некоторые существенные преимущества при попытке сделать это с ZFS.
Можете ли вы объяснить немного больше о том, как вы хотите работать с этими файлами? Вы ищете моментальные снимки или копируете несколько ревизий одних и тех же / похожих файлов в хранилище данных?
Я бы посмотрел на снимки LVM как на решение. Не вдаваясь в подробности, я бы сделал это:
- Создайте том LVM, достаточно большой, чтобы вместить ваши данные.
- Загрузите исходную копию вашего большого двоичного файла на этот том.
- Создать снимок LVM.
- Используйте rsync, чтобы скопировать другую версию большого файла вместо существующего файла.
На этом этапе вы можете получить доступ к исходному файлу, смонтировав снимок LVM. Также будет доступна последняя версия большого файла. Вы можете создать несколько снимков таким образом.
Я использую librsync для этой цели. Он доступен для CentOS и других клонов RHEL в репозитории EPEL.
Просто используйте:
rdiff signature new.qcow2 /tmp/new.qcow2.rdiffsig
rdiff delta /tmp/new.qcow2.rdiffsig old.qcow2 new.qcow2--old.qcow2.rdiff
rm /tmp/new.qcow2.rdiffsig
xz new.qcow2--old.qcow2.rdiff
Вы можете удалить old.qcow2
, Когда вам это понадобится снова, вы сделаете:
xz -d < new.qcow2--old.qcow2.rdiff.xz > /tmp/new.qcow2--old.qcow2.rdiff
rdiff patch new.qcow2 /tmp/new.qcow2--old.qcow2.rdiff old.qcow2
rm /tmp/new.qcow2--old.qcow2.rdiff
Это может быть цепочка - вы можете создать RDIFF из old.qcow2
в evenolder.qcow2
и так далее. Это довольно медленно, но очень экономно - мне обычно не нужно удалять старые резервные копии, используя это. Также есть программа rdiff-backup, которая автоматизирует аналогичную схему для целых каталогов.