Использование Subversion для резервного копирования общего назначения
Можно ли использовать Apache Subversion (SVN) как инструмент резервного копирования общего назначения? (В качестве альтернативы rsync.)
Ответы
Ответ 1
Я нашел эту статью довольно приятным описанием использования svn для резервного копирования вашего домашнего каталога и т.д.:
Я использую Subversion для резервного копирования своих ящиков Linux. С небольшим творческим потенциалом он легко охватывает:
- Ежедневные снимки и резервное копирование на месте.
- Простое добавление и удаление файлов и папок.
- Подробное отслеживание версий файлов.
Он также позволяет несколько бонусных функций:
- Регулярные электронные письма для отслеживания активности файловой системы с помощью перехватчиков событий Subversion.
- Пользователи могут запросить проверку своих домашних папок из любой версии репозитория.
- Новые или заменяющие серверы могут быть настроены с помощью нескольких команд проверки svn.
Источник: http://www.mythago.net/svn_for_backup.html
Также найдено в этой статье, в котором показан пример версии вашего домашнего каталога. Это позволяет вам принести вашу среду, проверив домашний каталог на новую машину. Я делал что-то подобное и считал его очень полезным.
Ответ 2
При использовании SVN в качестве резервной копии для двоичных файлов необходимо помнить, что SVN удваивает размер ваших файлов, поскольку он хранит локальную копию каждого файла (в файле .svn/text-base).
Кроме того, я использую SVN для резервного копирования. Просто добавьте все файлы, а затем зафиксируйте через script.
Ответ 3
Как резервная копия общего назначения, я бы сказал, что это, вероятно, не самая большая идея, главным образом по причинам, данным другими (много лишних папок и потерянное дисковое пространство). Если вы хотите просто сохранить резервные копии, я бы сказал, что в зависимости от ваших потребностей, вероятно, есть лучшие варианты, например: нужно ли хранить каждую отдельную версию каждого отдельного файла или быть достаточным для моментальных снимков ваших данных?
Однако в моем офисе у нас есть небольшая группа из 6 человек, которые работают с общими файлами (например: руководства по политикам и процедурам, регистрационные формы и т.д.). В большинстве случаев члены команды будут работать удаленно (из дома или во время путешествия) и часто в автономном режиме. Вместо того, чтобы использовать центральную настройку общих папок, мы используем SVN, чтобы дать каждому человеку всю рабочую копию папки, в которой они могут работать, и ссылаться и синхронизировать, когда это возможно. Это убивает двух птиц одним камнем: каждый может получить доступ и редактировать файлы даже в автономном режиме, а также дает нам действительно большую избыточность в наших резервных копиях. Если мой ноутбук загорается, это не проблема, потому что я могу просто проверить другую копию (очевидно, на другом компьютере). Если сервер загорается, мы восстановим резервные копии хранилища. Если сервер и все резервные копии репо загорелись, то все, что вы потеряли, это старые версии файлов. Единственный способ, которым вы потеряете текущие данные, - это то, что сервер, резервные копии репо и каждый компьютер, у которого есть чек, все таинственно загорелись.
Как утверждают некоторые люди, SVN никогда не удалит информацию из репозитория, а это значит, что если вы хотите сохранить резервные копии в течение 60 дней, тогда вы не сможете. Это не совсем так. Используя export, dump и import, вы могли бы эффективно уничтожить старые версии файлов. Это не очень, но это возможно.
Ответ 4
Одна вещь, которая сильно меня раздражает, это папки ".svn", которые svn помещает в каждую папку, которую он отслеживает.
Они выглядят раздражающими, когда вы копируете папку, вы должны помнить, что не копируете их (или ваша песочница может быть раздражена), и намного сложнее вставить кучу папок, поскольку часто бывает много хитов в папках ресурса .svn.
Мне нравится идея использования источника-контроля для управления вашей средой. Но я лично не выбрал бы svn для этой работы. Я бы пошел на что-то вроде git. Но это, наверное, только я...
Ответ 5
Я использую SVN для резервного копирования своего компьютера, а также для синхронизации моего ноутбука и моего рабочего стола. Но у него есть проблемы, упомянутые в более ранних ответах, в основном удвоение использования диска. Я также чувствую, что избыток файлов и процесс SVN, постоянно проверяющий мой HD на изменения, замедляет работу моей машины.
Я хотел бы подчеркнуть, однако, что SVN отлично подходит для синхронизации разных машин, и вы также получаете бонус, чтобы иметь возможность проверять файл где угодно, если вам нужно - я даже делаю это в своем браузере через веб-интерфейс, иногда.
В целом, у меня смешанные чувства по поводу использования SVN для резервного копирования общего назначения. Но если вы это сделаете, я рекомендую не хранить такие библиотеки, как фильмы, фотографии и музыку, потому что они, как правило, большие (сильно страдают от использования удвоенного пространства) и неизменяемы - вам не нужно это система управления версиями, потому что в редких случаях, когда вы меняете файл, вам обычно не нужны старые версии (а SVN не подходит для создания/хранения различий двоичных файлов, он сохраняет всю новую версию файл). Таким образом, если SVN не может быть адаптирован (долгосрочное намерение проекта) для этих случаев, я предлагаю использовать альтернативный метод для резервного копирования этих файлов.
Ответ 6
Вы также можете рассмотреть bup - Высокоэффективная система резервного копирования файлов на основе формата файла git. Он основан на git в том, как он хранит данные, что очень эффективно для хранения файлов и их различий.
Ответ 7
Я использовал CVS в качестве замены для призрака, поэтому я не понимаю, почему нет.
Мне нравится, когда вы можете пометить базовую линию: вы можете изменить управляющие машины.
Это работает лучше на unixes, чем окна, очевидно.
Ответ 8
То, что отталкивает меня от этой идеи, заключается в том, что для общего использования любые двоичные данные будут скопированы в любое время, когда они будут изменены, тогда как текстовые контентные системы SCM могут быть легко обновлены в виде различий.
Итак, вы можете это сделать, просто знайте, что вы можете не использовать его для управления такими вещами, как фоторепозитории, если вы много редактируете.
Хорошая вещь о более общих решениях резервного копирования (скажем, Time Machine) заключается в том, что через некоторое время они могут свернуть несколько бинарных изменений, чтобы сэкономить место. Я не уверен, как легко это сделать в SVN или git или mercurial.
Ответ 9
Использование SVN для резервного копирования может работать. Однако со временем может быть сложно удалить старые версии, которые не нужны. Скажем, вы хотели сохранить 30 или 60 дней резервных копий. SVN не предоставляет простой способ удалить любую историю старше X дней. Если у вас нет возможности очистить старую историю, вы в конечном итоге запустите резервный диск из пространства.
Вот цитата из SVN Book в команде svndumpfilter:
Так как Subversion хранит все в непрозрачная система баз данных, попытка ручные настройки неразумны, если не совсем сложно. И как только данные были хранится в вашем репозитории, Subversion как правило, не обеспечивает простой способ чтобы удалить эти данные. [13]
[13] Это, кстати, особенность, а не ошибка.
Я нашел unison лучшим вариантом, чем svn для альтернативы rsync.
Ответ 10
Резервное копирование /etc с помощью управления исходным кодом может стать большой помощью, когда вы хотите вернуть изменения, которые закрывали вашу систему, экспериментировать с изменениями или переносить изменения с одного сервера на другой.
Но множество подпрограмм .svn-каталогов может мешать этому, а не только при поиске, но в некоторых случаях, например в папках *.d, плохо разработанные системы могут интерпретировать сами папки .svn как содержащие данные конфигурации.
Теперь я предпочитаю использовать Mercurial для резервного копирования /etc, так как он помещает одну .hg-папку в /etc. Для реального резервного копирования, а не только для контроля версий вам нужно скопировать эту папку .hg в другое место.
Ответ 11
Это утверждение JoaoPSF неверно:
(и SVN не подходит для создания/хранения различий двоичных файлов, он сохраняет всю новую версию файла)
Смотрите эту цитату из Как Subversion обрабатывает двоичные файлы:
Обратите внимание, что независимо от того, является ли файл двоичным, не влияет на объем пространства репозитория, используемый для хранения изменений в этом файле, и не влияет на объем трафика между клиентом и сервером. Для целей хранения и передачи Subversion использует различный метод, который одинаково хорошо работает в двоичных и текстовых файлах; это совершенно не связано с различимым методом, используемым командой svn diff.
Ответ 12
Чтобы использовать SVN в качестве резервной копии в Linux, выполните следующие действия:
- Создайте пустое репо.
- Оформить пустое хранилище в дереве папок, которое вы хотите создать.
- Используйте следующий фрагмент кода (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"
script выше будет добавлять/удалять и обновлять любые файлы и подкаталоги в текущем каталоге. Чтобы использовать его просто cd
в папку, которую вы хотите сделать резервной копией (которая, конечно же, должна быть рабочей копией), и запустите svnauto
. Обратите внимание, что вам нужно установить grep и sed в вашу систему, и он создает временный файл в /tmp. Его можно использовать из задания cron для ночного фиксации, используя следующий cron script:
#!/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 script предполагает, что /my/directory
- это папка, которую вы хотите создать резервную копию (при необходимости замените). Также предполагается, что вы положили svnauto
script в /root
. Он создает журнал и отображает его в конце. Еще одна деталь: первый export
необходим для svn, чтобы найти правильный язык. Возможно, вам придется настроить эту линию на свой собственный локальный язык, чтобы заставить ее работать.