それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

バックアップについて考えてみた。

世代バックアップについて考えてみた。あまりにアタリマエのこと。当たり前ッす。


バックアップを何世代かにまたがってとっておく、それはそんなに難しいことでもないし、単純なことから考えていけばいいんじゃないかと。

ファイルを何回つくってmv するだけじゃないのかな

Apacheのログローテーションのように、/var/logにあるsyslogのログローテーションと同じじゃん?バックアップを取っておくときにマナエを連番でつければ世代バックアップ

1回目

  1. /var/www を /var/backup/var-www.tgz にバックアップ

2回目

  1. /var/backup/var-www.tgz を /var/backup/var-www.tgz.1 にリネーム
  2. /var/www を /var/backup/var-www.tgz にバックアップ

3回目

  1. /var/backup/var-www.tgz.1 を /var/backup/var-www.tgz.2 にリネーム
  2. /var/backup/var-www.tgz を /var/backup/var-www.tgz.1 にリネーム
  3. /var/www を /var/backup/var-www.tgz にバックアップ

n回目

  1. /var/backup/var-www.tgz.(n-1) を /var/backup/var-www.tgz.n にリネーム
  2. /var/backup/var-www.tgz.(n-2) を /var/backup/var-www.tgz.(n-1) にリネーム
  3. (繰り返し)
  4. /var/backup/var-www.tgz を /var/backup/var-www.tgz.1 にリネーム
  5. /var/www を /var/backup/var-www.tgz にバックアップ


何かに似ている。そうかFIFOか。コマンドを作ってスタックに積んでいって、上から順に片付けるとN世代のローテーションバックアップか

つまり、N世代のバックアップの基本はN-1回のMoveということか。

#!/usr/bin/env ruby
require 'pp'
cmds = []
cmds << "mv /www/backups/flv-videos.tgz /www/backups/flv-videos.old.tgz"
cmds << "tar cvzf /www/flv-videos.tgz /www/flv-videos"
cmds << "mv /www/flv-videos.tgz /www/backups"
cmds.each{|cmd|
  `#{cmd}`
}

コードで表現してみる。

#!/usr/bin/env ruby
require 'pp'
cmds = []
n.times{|i|
  e = i
  cmd << " mv /var/backup/var-www.tgz.#{(e-1)} /var/backup/var-www.tgz.#{e} "
}
cmd << " tar zxvf /var/www  /var/backup/var-www.tgz.0 "
cmds.each{|cmd|
  `#{cmd}`
}


日付でもいいんだけど、日付でもいいんだけどさ。「何世代」ってのが見てわかるほうが嬉しいと思ったり。

同じファイルはバックアップ作ってると無駄

Cory On Writeを使えば、同じファイルをそのまま使えるので便利ですね。ハードリンク使えばはかどりますね。


そういう時はrsyncのオプションを使えばいいと。