【自己責任でお願いします】gitでmacのhome directoryをバックアップ

———-追記ここから———-
@2012-10-21
実際にやってみて、出来ました。こちら
———-追記ここまで———-

———-追記ここから———-
@2012-10-18

.gitignoreに、ステージするディレクトリを登録と書いてありますが、どうやら、
!/Desktop/
などとすると、Desktop以下のディレクトリなどが保存されないみたいです。

なので、この記事はまったく参考になりません。
現在、サブディレクトリを含める方法を調べています。
!/Desktop/**/*/
などとすればよいという噂も…。
———-追記ここまで———-

git覚えたてなので、バカの一つ覚えというやつでgitでmacのhome directoryをバックアップしようと思いました。gitには実質的なゴミ箱的な機能すら付いているので(削除しても残っている)、いいんじゃないでしょうか。内部的にはrsyncも使っているようですし、rsync知らなくてgit知っている人ならやってみるのも面白いのではと思ってやってみました。Time-Machineなんていらんかったんや!

友人には、gitだとパーミッションとかまずいのではと言われました。そうかもしれません。というわけで人柱向けな内容です。

ところで、普段きちんとバックアップを取っている人ってどの程度いるんですかね…。割と危険な状態なのに、面倒だからとついそのままにしてしまいます…。が、今日は頑張ってgitで管理というわけです。

構成:
本ポストで考えている環境は↓。
– MacBookPro (ここのホームディレクトリの内容をバックアップしておきたい)
– Linuxサーバー (ここに↑のデータを保存しておきたい。yum install git-all しているとする)
– MacBook (↑のLinuxサーバーに保存された、MacBookProのデータを取り出せるか確かめる用途)

まずは、Linuxサーバーで共有レポジトリを作りましょう。Linuxサーバーでの作業です↓。

cd
# ↑ホームディレクトリに戻ります

cd my_repos
# ↑git専用のディレクトリに移動します。無ければ作りましょう。

mkdir mbp-backup.git
# ↑保存先のディレクトリを作ります。

cd mbp-backup.git
# ↑移動します

git init --bare --shared
# git用のディレクトリだよと宣言するようなコマンドだと思います。よく分かりません。とにかくこれをやります。git init --bare だけでも動きましたが、--sharedしておいた方が良いと思います。よく分かっていませんが。

次に、MacBookPro側で作業します。まずは.gitignoreファイルを作りましょう。一時ファイルとか含まれていると無駄ですし、いらないっぽいファイルってありますね、.DS_Storeとか。

一旦全部無視して、必要な物だけ書いて含める、という形式にしました。無視するものをリストアップしていくのは、無視しなくてはならないものが無限に出てきてたいへんかなぁと思いましたので。

.gitignore (場所は、~/.gitignore となります)
# すべてのファイルを一旦無視
/*

# ドットから始まる設定ファイルを無視
/.*

# .DS_Store と .localized は無視
.DS_Store
.localized

# 無視したくないファイルを設定(つまりgitで管理したい設定ファイルを指定)
!/.bash_profile
!/.bashrc
!/.gitconfig
!/.gitignore

# 無視したくないディレクトリを設定(=含めるディレクトリ。新しくディレクトリを作ったらここに追加)
!/Desktop/
!/Documents/
!/Movies/
!/Music/
!/Pictures/
!/my_repos/
!/.ssh/

↑まあこんな感じでいいんじゃないでしょうか。DownloadsやLibrary、PublicやSiteはいらないと思うので含めていません。!/.vimrcなど適宜追加してみてください。

さて、ホームディレクトリ(~/)でgit init します↓。
[hoge@localhost: ~] git init

次に、git add, commit, remote add, pushをします↓。
git add .
# ↑ 結構時間が掛かるコマンドです。配下にあるファイル・ディレクトリをステージにあげます。「ステージ?なにそれ美味しいの?」って人は検索して調べてください。僕もあとで調べます。

git commit -m "ホームディレクトリの内容をコミット"
# ↑ コミットします。

git remote add origin ssh://root@192.168.0.200/root/my_repos/mbp-backup.git/
# ↑ は ssh root@192.168.0.200 が通る環境下のコマンドです。適宜、ssh://xxx@xxx.xxx.xxx.xxxにおいてxxxを調整してください。
# ~/.ssh/config で、Hostnameを設定している場合、右に示すコマンドでもいけます。 git remote add origin ssh://yoshi/root/my_repos/mbp-backup.git/ (← ssh yoshi でログイン出来る環境下ですのでご注意ください)

git push -u origin master
# sshで、MacBookProからLinuxサーバーへと、データをコピーしています。uオプションを付けると、次回pushしたいときに、git push だけで済みます(origin masterと書かなくて良い)。
# 速度があまり出ない気がします。MacBookPro <- 無線 -> ルーター <- GbE -> Linux鯖 という環境ですと2.0MB/s程度…うーん、何かがおかしいのだろうか(´・ω・`)

これでたぶん行けると思います。さて、きちんとデータを取り出せるか試してみましょう。別のMacBookで、バックアップしたデータを取り出してみます。

MacBook(先のMacBookProとは別のマシンです)↓
cd
cd my_repos
# ↑ 無ければ、mkdir my_repos として作る

git clone ssh://yoshi/root/my_repos/mbp-backup.git
# ↑サーバーから、データを取り出す。

cd mbp-backup
# 先のgit cloneコマンドで取り出したデータを見てみる

↑これで無事データが見えればOKです。ちなみに、空のディレクトリはgit add . しても、保存されないようですね。

さて以上により、

MacBookProのホームディレクトリの内容をLinuxサーバーに保存して、そのバックアップデータを他のマシンで復元することが出来た

ので、終わりです。

ちなみにMacBookProにはcrontabなどで定期的に、
git add .
git commit -m "commit"
git push
すると自動化されて良いのではないでしょうか。なお、新しくディレクトリを作った場合、.gitignoreにきちんと明記しないと参照されませんので注意してください。

ちなみに速度ですが、サーバー(Atom N2800) <= 有線ケーブル => GbEルーター <=無線=> MacBookですと、
$ git clone ssh://yoshi/root/my_repos/mbp2009middle.git
Cloning into 'mbp2009middle'...
remote: Counting objects: 42, done.
remote: Compressing objects: 100% (33/33), done.
remote: Total 42 (delta 8), reused 0 (delta 0)
Receiving objects: 100% (42/42), 125.39 MiB | 5.28 MiB/s, done.
Resolving deltas: 100% (8/8), done.
とまあ、5.28MB/sでした。これは遅い…。うーん、sshでの暗号化の解除とかに時間が掛かっているのでしょうか…他のプロトコルの使用を考えたほうが良いかも知れません。

認証の不要な読み取り専用アクセスを一般に公開する場合は、HTTP を捨てて Git プロトコルを使うことを考えることになるでしょう。主な理由は速度です。Git プロトコルのほうが HTTP に比べてずっと効率的で高速です。Git プロトコルを使えば、ユーザーの時間を節約することになります。

http://git-scm.com/book/ja/Git-%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC-Git-%E3%83%87%E3%83%BC%E3%83%A2%E3%83%B3


↑こんなふうに書いていますし。

———-追記ここから———-
苦労してgitプロトコルにしてみました(あとで記事書きます)が特に速度に変化はありませんでした。こんな感じです↓

$ git clone git://192.168.0.200/mbp-bk.git
Cloning into 'mbp-bk'...
remote: Counting objects: 42, done.
remote: Compressing objects: 100% (33/33), done.
remote: Total 42 (delta 8), reused 0 (delta 0)
Receiving objects: 100% (42/42), 125.39 MiB | 6.51 MiB/s, done.
Resolving deltas: 100% (8/8), done.

↑残念な結果です。誤差の範囲と言えるでしょう…。

また、Windows7のマシン(git鯖 -有線- ルーター -有線- Windows7マシン)で、cygwinを使って↑と全く同じようにgit cloneしてみましたが、5.62MiB/sでした…

もしかすると、私の用意したgitサーバーが悪いのかも知れません。Atom N2800, 1GB*2 DRAM, 2.5inch HDD(94.35 MB/sec by hdparm -tT /dev/sda)なのですが、CPUがネックといえばネックですからね…。

→ CPUが原因ではないかと思って、git clone git://192.168.0.200/mbp-bk.git を実行中に、CPU使用率を見てみました。案の定でした。システム全体のCPU利用率が50%近くになっており、coreの1つはフルロード状態になっていました。CPUがボトルネックになっていたわけですね。道理で無線だろうが有線だろうが速度が変わらないわけです。

転送に関してここまでCPUに負荷がかかるものなのか疑問ではありますが、いろいろと処理をしているのでしょう。どうやら、gitの転送速度を向上させたければ、N2800のような非力なCPUは使うべきではないということなのでしょう。最低でもcore2duoですかね。今度機会があれば良いCPUを使ってみて、gitプロトコルとsshでの場合の速度比較をしてみたいと思います。
———-追記ここまで———-

———-追記ここから———-
基本的に、gitで管理するレポジトリは、/Users/hoge/my_repos (←macの場合) においておきたいものです。しかし上記のホームディレクトリの管理においては、直接ホームディレクトリにgitの設定ファイルが置いてある状態です。まあこれでも良いといえばいいのですし気分の問題ですが、一元化の徹底という意味で、シンボリックリンクを貼ると良いかも知れません。

MacBookPro側での作業↓
cd ~/my_repos/
# ↑git管理ディレクトリに移動

ln -s /Users/hoge ./MBP-BackUp
# MBP-BackUpというディレクトリが勝手に作られるので、事前にmkdir MBP-BackUpなどとしなくて良い。
# シンボリックリンクを削除するときは要注意です。
# rm MBP-BackUpとしてください。rm -rf MBP-BackUp/とすると全部消えてしまいます。
# というかMacなのでFinderからシンボリックリンクを消したほうが良いです。


シンボリックリンクを削除するときは要注意です。rm MBP-BackUpとしてください。rm -rf MBP-BackUp/とすると全部消えてしまいます。というかMacなのでFinderからシンボリックリンクを消したほうが良いです。というかそうしてください。大事なことなので二回書きました。私はこれをやってしまって酷い目にあいました。
———-追記ここまで———-

Bookmark the permalink.

Comments are closed.