質問

使用できますか Apache サブバージョン (SVN) を汎用バックアップ ツールとして使用しますか?(一種として rsync 代替。)

役に立ちましたか?

解決

この記事は、svn を使用してホーム ディレクトリなどをバックアップする方法について非常にわかりやすく説明されていると思いました。

Linux ボックスのバックアップには Subversion を使用しています。ちょっとした工夫で、以下のことを簡単にカバーできます。

  • 毎日のスナップショットとオフサイトのバックアップ。
  • ファイルやフォルダーの追加と削除が簡単に行えます。
  • ファイルバージョンの詳細な追跡。

また、いくつかのボーナス機能も利用できます。

  • Subversion のイベント フックを介してファイル システムのアクティビティを追跡するための定期的なログ電子メール。
  • ユーザーは、任意のリポジトリ リビジョンからホーム フォルダーのチェックアウトを要求できます。
  • 新しいサーバーまたは代替サーバーは、いくつかの svn checkout コマンドを使用してセットアップできます。

ソース: http://www.mythago.net/svn_for_backup.html

こちらも見つかりました この記事 これは、ホーム ディレクトリのバージョン管理の例を示しています。これにより、ホーム ディレクトリを新しいマシンにチェックアウトして、環境をそのまま持ち込むことができます。私も似たようなことをやっていたのですが、とても便利だと思いました。

他のヒント

バイナリ ファイルのバックアップとして SVN を使用する場合に留意すべき点の 1 つは、SVN では各ファイルのローカル コピー (.svn/text-base 内) ファイルが保持されるため、ファイルのサイズが 2 倍になるということです。

それとは別に、私はバックアップにもSVNを使用しています。すべてのファイルを追加して、スクリプト経由でコミットするだけです。

「汎用」バックアップとしては、主に他の人が挙げた理由 (大量の余分なフォルダーと無駄なディスク領域) から、これはおそらく最良のアイデアではないと思います。単にバックアップを保持したい場合は、ニーズに応じて、おそらくより良いオプションがあると思います。例:すべての単一ファイルのすべてのバージョンを保持する必要がありますか、それともデータの特定のスナップショットで十分でしょうか?

ただし、私のオフィスには、共有ファイルを扱う 6 人の小さなチームがあります (例:ポリシーおよび手順マニュアル、登録フォームなど)。多くの場合、チーム メンバーはリモート (自宅または旅行中) で作業し、オフラインで作業することもよくあります。中央の共有フォルダー設定を使用するのではなく、SVN を使用して、各ユーザーが可能な限り作業、参照、同期できるフォルダーの作業コピー全体を提供します。これは一石二鳥です:オフラインでも誰もがファイルにアクセスして編集でき、さらにバックアップに非常に優れた冗長性が得られます。私のラップトップの場合 引火する, 、別のコピー (もちろん別のコンピューター上) をチェックアウトするだけなので、面倒ではありません。サーバーが火災になった場合、リポジトリのバックアップがあれば復元できます。サーバーとすべてのリポジトリのバックアップが発火した場合、失われるのは古いバージョンのファイルだけです。現在のデータが失われる唯一の方法は、サーバー、リポジトリのバックアップ、およびチェックアウトを備えたすべてのコンピュータがすべて不思議なことに発火した場合です。

ただし、一部の人が言っているように、SVN はリポジトリから情報を削除することはありません。つまり、バックアップを 60 日間だけ保持したい場合は、それはできません。これは正確には真実ではありません。の使用を通じて 輸出, ごみ そして 輸入 古いバージョンのファイルを効果的に消去できます。あまりきれいではありませんが、可能です。

私を非常に悩ませているのは、svn が追跡するすべてのフォルダーに配置される「.svn」フォルダーです。

迷惑に見えるので、フォルダーをコピーするときはコピーしないように注意する必要があります (そうしないとサンドボックスがイライラする可能性があります)。また、多くの場合、.txt ファイルに多くのヒットがあるため、大量のフォルダーを grep するのは非常に困難です。 svnリソースフォルダー。

私はソース管理を使用して環境を制御するというアイデアが好きです。しかし、私個人としては、この仕事に svn を選択するつもりはありません。私なら git のようなものを使います。しかし、それはおそらく私だけです...

私はコンピューターのバックアップとラップトップとデスクトップの同期に SVN を使用しています。ただし、以前の回答で述べた問題、主にディスク使用量が 2 倍になる問題があります。また、過剰なファイルと SVN プロセスが HD の変更を常にチェックしているため、マシンの速度が遅くなっているように感じます。

ただし、SVN はさまざまなマシンの同期に最適であり、必要に応じてどこからでもファイルをチェックアウトできるという利点もあることを強調したいと思います。私は Web インターフェイスを介してブラウザーでチェックアウトすることもあります。時々。

要約すると、私は汎用バックアップに SVN を使用することについて複雑な感情を抱いています。でも、もしそうなら、私がお勧めします ない 映画、写真、音楽などのライブラリを保存する場合、ライブラリはサイズが大きくなり (スペース使用量が 2 倍になるため非常に問題になる)、不変であることが多いためです。そのためのバージョン管理システムは必要ありません。ファイルを作成する場合、通常は古いバージョンは必要ありません (SVN はバイナリ ファイルの差分を作成/保存するのが苦手なので、ファイルの新しいバージョン全体を保存します)。したがって、SVN がこれらのケースに適応できない限り (私の長年のプロジェクトの意図)、この種のファイルのバックアップには別の方法を使用することをお勧めします。

検討することもできます ぶっ - git Packfile 形式に基づいた高効率のファイル バックアップ システム。 データの保存方法は git に基づいており、ファイルとその差分を保存するのに非常に効率的です。

私は CVS を Ghost の代わりに使用したことがありますが、なぜ使用しないのかわかりません。

ベースラインにタグを付けることができるので便利です。管理マシンを変更できます。

明らかに、これは Windows よりも UNIX の方がうまく機能します。

私がその考えを思いとどまらせてしまうのは、一般的な用途ではバイナリ データは変更されるたびにコピーされるのに対し、SCM システムのベースとなるテキスト コンテンツは diff の形式で簡単に更新できることです。

したがって、それを行うこともできますが、編集を頻繁に行う場合は、写真リポジトリなどの管理には使用したくないかもしれないことに注意してください。

より汎用的なバックアップ ソリューション (Time Machine など) の優れた点は、スペースを節約するために、しばらくしてから複数のバイナリ変更をロールアップできることです。SVN、git、mercurial でそれがどれほど簡単になるかはわかりません。

バックアップに SVN を使用すると機能する場合があります。ただし、時間が経つと、不要な古いリビジョンを削除することが困難になる場合があります。30 日または 60 日分のバックアップのみを保持したいとします。SVN には、X 日より古い履歴を削除する簡単な方法はありません。古い履歴を消去する方法がない場合、最終的にはバックアップ ドライブの容量が不足してしまいます。

以下はからの引用です svndumpfilter に関する SVN ブック 指示:

Subversionはすべてを不透明なデータベースシステムに保存するため、手動の調整を試みることは賢明ではありませんが、非常に困難ではありません。そして、データが リポジトリに保存されている Subversion 一般的に、簡単な方法を提供しません をクリックして、そのデータを削除します。[13]

[13] ちなみに、これは機能であり、バグではありません。

見つけました ユニゾン rsync の代替手段としては svn よりも優れたオプションとなります。

JoaoPSF の次の声明は正しくありません。

(SVN はバイナリ ファイルの差分を作成/保存するのが苦手で、ファイルの新しいバージョン全体を保存します)

この引用を参照してください Subversion はバイナリ ファイルをどのように処理しますか:

ファイルがバイナリかどうかは、そのファイルへの変更を保存するために使用されるリポジトリ領域の量には影響せず、クライアントとサーバー間のトラフィックの量にも影響しないことに注意してください。保存と送信の目的で、Subversion はバイナリ ファイルとテキスト ファイルで同様に機能する差分メソッドを使用します。これは、svn diff コマンドで使用される比較方法とはまったく関係ありません。

ソース コード管理を使用して /etc をバックアップすると、システムに影響を与えた変更を元に戻したり、変更を試したり、あるサーバーから別のサーバーに変更を移したりするときに非常に役立ちます。

しかし、Subversion の多数の .svn ディレクトリは、検索時だけでなく、*.d フォルダなどの場合によっては、設計が不十分なシステムによって .svn フォルダ自体が構成データを含むものとして解釈される可能性があります。

現在では、/etc の下に単一の .hg フォルダーが配置されるため、/etc のバックアップには Mercurial を使用することを好みます。バージョン管理だけでなく実際のバックアップを行うには、その .hg フォルダーを別の場所にコピーする必要があります。

Linux で SVN をバックアップとして使用するには、次の手順を実行します。

  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. 。ログを作成し、最後に表示します。もう 1 つの詳細:最初 export svn が適切な言語を見つけるために必要です。機能させるには、この行を自分のローカル言語に調整する必要がある場合があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top