Использование Subversion для резервного копирования общего назначения

StackOverflow https://stackoverflow.com/questions/61888

  •  09-06-2019
  •  | 
  •  

Вопрос

Можно ли использовать Подрывная деятельность Apache (SVN) как инструмент резервного копирования общего назначения?(Как своего рода rsync альтернатива.)

Это было полезно?

Решение

Я нашел в этой статье довольно интересное описание использования svn для резервного копирования вашего домашнего каталога и многое другое:

Я использую Subversion для резервного копирования своих Linux-боксов.При некотором небольшом творческом подходе он легко охватывает:

  • Ежедневные снимки и удаленное резервное копирование.
  • Простое добавление и удаление файлов и папок.
  • Подробное отслеживание версий файлов.

Это также позволяет использовать несколько бонусных функций:

  • Регулярные электронные письма журнала для отслеживания активности файловой системы с помощью перехватов событий Subversion.
  • Пользователи могут запросить проверку своих домашних папок из любой новой редакции.
  • Новые или заменяющие серверы можно настроить с помощью нескольких команд svn checkout.

Источник: http://www.mythago.net/svn_for_backup.html

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

Другие советы

Одна вещь, которую следует иметь в виду при использовании SVN в качестве резервной копии для двоичных файлов, заключается в том, что SVN удвоит размер ваших файлов, потому что он хранит локальную копию каждого файла (в файле .svn/text-base).

Кроме того, я также использую SVN для резервного копирования.Просто добавьте все файлы, а затем зафиксируйте с помощью скрипта.

Как резервная копия "общего назначения", я бы сказал, что это, вероятно, не самая лучшая идея, в основном по причинам, указанным другими (множество лишних папок и потраченное впустую дисковое пространство).Если вы хотите просто сохранить резервные копии, опять же, я бы сказал, что, вероятно, есть варианты получше, в зависимости от ваших потребностей, например:нужно ли вам сохранять каждую версию каждого отдельного файла, или будет достаточно определенных снимков ваших данных?

Однако в моем офисе у нас есть небольшая команда из 6 человек, которые работают с общими файлами (например:руководства по политике и процедурам, регистрационные формы и т.д.).Большую часть времени члены команды будут работать удаленно (из дома или во время путешествий), а часто и офлайн.Вместо того чтобы использовать централизованную настройку общей папки, мы используем SVN, чтобы предоставить каждому пользователю полную рабочую копию папки, с которой они могут работать, ссылаться на нее и синхронизировать, когда это возможно.Это убивает двух зайцев одним выстрелом:каждый может получить доступ к файлам и редактировать их даже в автономном режиме, плюс это дает нам действительно большую избыточность в наших резервных копиях.Если мой ноутбук загорается, это не доставляет никаких хлопот, потому что я могу просто просмотреть другую копию (очевидно, на другом компьютере).Если сервер загорится, у нас будут резервные копии хранилища для восстановления.Если сервер И все резервные копии репозитория загорятся, то все, что вы потеряли, - это старые версии файлов.Единственный способ потерять какие-либо текущие данные - это если сервер, ваши резервные копии репозитория и каждый отдельный компьютер, на котором есть проверка, таинственным образом загорятся.

Однако, как уже говорили некоторые люди, SVN никогда не удалит информацию из хранилища, а это означает, что если вы хотите хранить резервные копии только в течение 60 дней, то, в общем, вы не можете.Это не совсем так.Благодаря использованию экспорт, свалка и импорт вы могли бы эффективно удалить старые версии файлов.Это некрасиво, но это возможно.

Одна вещь, которая меня бы сильно раздражала, - это папки '.svn', которые svn помещает в каждую папку, которую он отслеживает.

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

Мне нравится идея использования системы управления версиями для управления вашей средой.Но лично я бы не выбрал svn для этой работы.Я бы выбрал что-то вроде git.Но это, наверное, только у меня так...

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

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

Таким образом, у меня смешанные чувства по поводу использования SVN для резервного копирования общего назначения.Но если вы это сделаете, я рекомендую нет для хранения библиотек, таких как фильмы, фотографии и музыка, потому что они, как правило, большие (сильно страдающие от удвоенного использования пространства) и неизменяемые - для этого вам не нужна система управления версиями, потому что в редких случаях, когда вы меняете файл, вам обычно не нужны старые версии (а SVN не очень хорош в создании / хранении различий двоичных файлов, он сохраняет всю новую версию файла).Итак, если SVN не может быть адаптирован (мое давнее проектное намерение) для этих случаев, я предлагаю использовать альтернативный метод резервного копирования файлов такого типа.

Вы могли бы также рассмотреть буп - Высокоэффективная система резервного копирования файлов, основанная на формате git packfile. Он основан на git в том, как он хранит данные, что очень эффективно для хранения файлов и их различий.

Я использовал CVS в качестве замены ghost, так что не понимаю, почему бы и нет.

Я рад, что вы можете пометить базовую линию:вы можете сменить управляющие машины.

Очевидно, что это работает лучше в unix, чем в Windows.

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

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

Преимущество решений для резервного копирования более общего назначения (скажем, Time Machine) заключается в том, что они могут свернуть несколько двоичных изменений через некоторое время для экономии места.Я не уверен, насколько легко это было бы сделать в SVN, git или mercurial.

Использование SVN для резервного копирования может сработать.Однако со временем может быть трудно удалить старые версии, которые не нужны.Допустим, вы хотели сохранить резервные копии только на 30 или 60 дней.SVN не предоставляет простого способа удалить любую историю старше X дней.Если у вас нет способа очистить старую историю, то в конечном итоге на вашем диске с резервной копией не хватит места.

Вот цитата из SVN-файл записывается в svndumpfilter команда:

Поскольку Subversion хранит все в непрозрачной системе баз данных, пытаться настраивать вручную неразумно, если не совсем трудный.И как только данные были сохранены в вашем репозитории, Subversion как правило, не предоставляет простого способа удалить эти данные.[13]

[13] Это, кстати, особенность, а не ошибка.

Я нашел унисон чтобы быть лучшим вариантом, чем svn, для альтернативы rsync.

Это утверждение JoaoPSF неверно:

(и SVN не очень хорош в создании / сохранении различий двоичных файлов, он сохраняет всю новую версию файла)

Смотрите эту цитату из Как Subversion обрабатывает двоичные файлы:

Обратите внимание, что независимо от того, является файл двоичным или нет, это не влияет на объем пространства репозитория, используемого для хранения изменений в этом файле, и не влияет на объем трафика между клиентом и сервером.Для целей хранения и передачи Subversion использует различный метод, который одинаково хорошо работает с двоичными и текстовыми файлами;это совершенно не связано с методом diffing, используемым командой svn diff.

Резервное копирование /etc с помощью source code control может оказать большую помощь, если вы хотите отменить изменения, которые повлияли на вашу систему, поэкспериментировать с изменениями или перенести изменения с одного сервера на другой.

Но множество каталогов subversion .svn может помешать этому не только при поиске, но и в некоторых случаях, например, в папках * .d, плохо спроектированные системы могут интерпретировать сами папки .svn как содержащие данные конфигурации.

Теперь я предпочитаю использовать Mercurial для резервного копирования /etc, поскольку он помещает одну папку .hg в /etc.Для реального резервного копирования, а не только для контроля версий, вам нужно скопировать эту папку .hg в другое место.

Чтобы использовать SVN в качестве резервной копии в Linux, выполните следующие действия:

  1. Создайте пустое репозиторий.
  2. Поместите пустой репозиторий в дерево папок, которое вы хотите создать для резервного копирования.
  3. Используйте следующий фрагмент кода (svnauto).Вы должны заменить "myuser" и "mypassword" действительными учетными данными для вашего репозитория:
    #!/bin/sh
    svn status --depth=infinity --username=myuser --password=mypassword > /tmp/svnauto_tmp.list
    cat /tmp/svnauto_tmp.list | grep '^?' | sed -e 's/^?       /svn add --depth=infinity --force --username=myuser --password=mypassword "/g' -e 's/$/@"/g' | sh
    cat /tmp/svnauto_tmp.list | grep '^!' | sed -e 's/^!       /svn delete --username=myuser --password=mypassword "/g' -e 's/$/@"/g' | sh
    rm -f /tmp/svnauto_tmp.list
    svn update . --username=myuser --password=mypassword
    svn commit --username=myuser --password=mypassword --message "Automatic backup"

Приведенный выше скрипт добавит / удалит и обновит любые файлы и подкаталоги в текущем каталоге.Использовать его просто cd в папку, которую вы хотите создать резервную копию (которая, конечно, должна быть рабочей копией), и запустите svnauto.Обратите внимание, что в вашей системе должны быть установлены grep и sed, и это создает временный файл в /tmp.Его можно использовать из задания cron для ночной фиксации, используя следующий скрипт cron:

#!/bin/sh
export LANG=en_US.UTF-8 && cd /my/directory && echo Starting backup $(date) > /root/backup_log.txt && /root/svnauto >> /root/backup_log.txt 2>&1 && echo Finished backup. >> /root/backup_log.txt && cat /root/backup_log.txt

Этот cron-скрипт предполагает, что /my/directory это папка, которую вы хотите создать резервную копию (замените по мере необходимости).Это также предполагает, что вы помещаете svnauto сценарий в /root.Он создает журнал и отображает его в конце.Еще одна деталь:первый export необходим для того, чтобы svn нашел нужный язык.Возможно, вам придется адаптировать эту строку к вашему местному языку, чтобы она работала.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top