🐧

Git リポジトリとバックアップ:Linux 使い(略)Advent Calendar 2024

2024/12/03に公開

はじめに

これは「Linux 使いになりたい人のための Advent Calendar 2024」の記事です。

筆者は、Web エンジニアを志望する人には、セルフホスト Git サービスを稼働させて利用することをオススメしています。もし Git を使ったことがないなら、Git を学ぶときに、セルフホスト Git サービスを稼働させることも視野に含めながら学習するのが効率的だと考えています。

Git リポジトリとバックアップ

セルフホスト Git サービスを稼働させることを考えると、Git リポジトリとバックアップの対応方法について考えておく必要があります。

今回は、これについて考えてみましょう。

Git リポジトリ

Git は分散バージョン管理システムと呼ばれるもので、Git リポジトリは分散させて利用することが可能となっています。そのため、Git リポジトリのバックアップを用意するとなったら、まず最初に考えるのは「Git リポジトリを分散させて利用すること」になります。

説明をわかりやすくするために、ここでは app001 というリポジトリがあったとします。また、所有しているパソコンが2台あり、ubuntu001 と win001 があったとします。ubuntu001 はデスクトップマシン、win001 はノートパソコンだとしましょう。

最初の Git リポジトリ app001 はデスクトップマシンの ubuntu001 で用意するとします。これを ubuntu001:/git/app001.git としましょう。

このバックアップを手軽にとるには、win001 に ubuntu001:/git/app001.git をクローンします。クローンしたものは win001:/home/node/workspace/app001 に置いたとします。

こうしておくと、 ubuntu001:/git/app001.git が消失しても、win001:/home/node/workspace/app001 から復旧させることができます。ただし、復旧できるのは、ubuntu001:/git/app001.git と win001:/home/node/workspace/app001 を最後に同期させた時点のものになります。

Git を使うと、ubuntu001 と app001 とで別々に作業をすることができて、同期を簡単にすることができるようになります。同期をするときは差分データだけになるので、通常のフルバックアップのような時間はかかりません。

ただし、ubuntu001 と app001 とで別々に作業をした結果については、同期をしないと一致しないので、差分がある状態で片方を消失すると、その分は自力で復帰が必要です。

とはいえ、セルフホスト Git サービスを個人的に使っている場合は、よほど昔のものでない限りは、思い出しながらもう一度作ることはできるでしょうし、消失したら困るものについては優先的に同期をとるように気をつければ対策ができます。

日常的に作業をする中で Git を使うことで自動で簡易的なバックアップができるということは、大きなメリットだと個人的には考えています。

このように、Git リポジトリを分散させることで、簡易的なバックアップが可能となります。

Git リポジトリのバックアップ

ということで、Git リポジトリを複数台のマシンにクローンしておけば簡易的なバックアップができるのですが、パソコンを1台しか所有していない場合はどうすれば良いでしょうか。

その場合の基本は「ubuntu001:/git/app001.git のあるディスクとは別のディスクにバックアップ」となります。ディスククラッシュがあっても、復旧用のデータが別のディスクにあれば良いのです。

このとき、使用するバックアップ用のディスクの選択肢はいくつかあります。

  • 内蔵 HDD
  • USB HDD
  • NAS

ここまでは Git リポジトリそのものをバックアップすることを想定していましたが、セルフホスト Git サービスを稼働させている場合は、セルフホスト Git サービスのデータを丸ごとバックアップするという選択肢もあります。

また、セルフホスト Git サービスを仮想環境で稼働させている場合は、仮想環境を丸ごとバックアップするという選択肢もあります。

いずれにせよ、バックアップするときに「ubuntu001:/git/app001.git のあるディスクとは別のディスクにバックアップ」という点は同じです。

筆者は、個人のセルフホスト Git サービスを仮想環境で稼働させていて、1週間に1度、次の処理をしています。

  1. 仮想環境を停止
  2. 仮想環境のバックアップ
  3. アップデート
  4. サービス再開

なお、バックアップ処理については自動化することもできるのですが、きづかないうちにエラーが起きるようになっていてバックアップがとれていなかったとなると困るので、確認も兼ねて手動で作業をしています。忙しくて、この作業ができないときもありますが、自分しか使っていないので自己責任ということで割り切っています。消えたら困るデータが出たら、きちんとバックアップするようにしています。

会社などで複数名で使う場合は自動化し、計画的な動作確認を作業として組み込んで管理するのが良いでしょう。

Git リポジトリの作成単位

同じ Git リポジトリを継続して使っていると、どんどんサイズが大きくなって同期やクローンに時間がかかるようになります。特定アプリケーション向けの Git リポジトリの場合は仕方がないのですが、セルフホスト Git サービスで個人向けデータをバージョン管理する場合は、工夫して対策したいところです。

筆者の場合は、毎年専用のリポジトリを用意して Git リポジトリの肥大化対策をしています。セルフホスト Git サービスの Git リポジトリには10年分のデータがありますが、パソコンでは手元で作業に必要な年のデータ用のリポジトリだけクローンしてあります。

こうしておくことで、あまり使わない過去のリポジトリのデータは、必要なときだけ取り出すといったことができます。特に、ノートパソコンは外出するときに余計なデータをいれておきたくありません。盗難があったときでも、10年分のデータが含まれるのか、今年の分のデータだけなのか、で話が変わってきます。

なお、ノートパソコンにはそもそも入れずに、短期的にクラウドストレージなどに入れておいて盗難時はアカウントロックで対策するという手もあるので、このあたりはデータによって選択が変わります。

基本は、プライベートなデータはノートパソコンへ持ってくるとしても Git クローンで一時的として、使用が済んだら消しておくようにしています。

こういった扱いをしたいプライベートなデータについては、年単位でリポジトリを用意しておくことで、管理がしやすくなると考えています。

おわりに

今回は、筆者がセルフホスト Git サービスを稼働させている経験の中でバックアップについて考えたことを紹介しました。具体的な方法までは紹介していませんが、方針についてわかれば、自分のスキルに合わせて対応することは可能なはずです。

セルフホスト Git サービスがあると、そのデータをバックアップするときでも、ローカルの Git リポジトリを使って作業ができるので重宝しています。

また、ハードウェアを更新するときも、データについてはセルフホスト Git サービスに入れてあるので、Git が使える環境になったら、クローンするだけで基本的なデータの移行はおしまいです。

また、自分の場合はセルフホスト Git サービスそのものも仮想環境で構築してあるので、これを新しいハードウェアへ移行することになっても、簡単にできます。新しいマシンで仮想環境の実行環境を用意したら、環境をまるごと移動してすぐに利用再開ということができるのです。

ただし、動画や高解像度の写真などのデータは、セルフホスト Git サービスで管理するのは難しいので、それらについて別途単純なファイル管理としています。

とはいえ、セルフホスト Git サービス環境を用意するまでは、ファイルの同期やバックアップに手間をかけてましたが、随分と楽になりました。セルフホスト Git サービス環境構築してからもう数年になりますが、ファイルの消失や上書きで困ったということはありません。

ディスククラッシュで慌てたことはありますが、バックアップをとってあって大丈夫でした。ディスククラッシュからパソコンを復旧させるときも、それとは別のパソコンにあった Git リポジトリでそれまでしていた作業は継続できました。そのため、パソコンの復旧については、急ぐ必要はなくて、のんびりとできました。

ということで、セルフホスト Git サービス環境は良いですよ!

Discussion