サイトバックアップ(2)

fileリストの分割は、実際には分割ファイルは作成せずに仮想的に行う方がよさそうだ。
また、owner権限で動作するperlCGI(suExec)を使用する方が、
other権限で動作するphpを使うより、トラブルは少ないように推測される。

さて、まずは、
partlist.cgi:
perl -w partlist.cgi n j
で、 をn等分し、1-nのうちのj番目の部分listを出力するスクリプトを
作成してみるか。

暗黙の了解として、 は、10行以上
nは1-9
jは、1-n
とする。

10行のファイルを8分割する場合は

list1:1,2
list2:3,4
list3:5
list4:6
list5:7
list6:8
list7:9
list8:10

となるようなアルゴリズムを考えることとしよう。

サイトバックアップ(1)

新規にサイトを制作する場合、旧サイトのデータバックアップのリクエストがある。

sshでログインし、ドキュメントルートの下を
丸ごと、

zip -r public_html.zip public_html

で一気に固め、FTP等でバックアップ用のサイトに持っていき、そのまま解凍できるのが理想的ではあるが、一般にそううまくはいかない。

そこで、ドキュメントルートの直下に、
バックアップ用のフォルダを作成し、そこのperlスクリプトを呼ぶことにより、
適当なサイズで、分割圧縮することを試みる。

前提条件として
・perlスクリプトがowner権限で動作すること。
・perlのsystem関数を利用して、
(du)
(which)
(touch)
(grep)
(wc)
(sed)
find
xargs
zip
が利用できること。

本当は、phpを使用したいのだが、
昔のサーバーだと、phpがowner権限で動作しない場合があり、
その場合、プログラムの実行や、ファイルの作成が面倒なので
perlを使用する。

perlスクリプトは、一行目にperlの実行パスを記述する必要があるが、

#!/usr/local/bin/perl

で、動作しないサーバーは珍しい。

てなわけで、動作環境のチェックはphpで行い、
実際の圧縮処理は、perl経由のunixコマンドで行うこととする。

ディレクトリ名は仮決めで、
.oldbackup
とする。

バックアップ元のファイルリストは、こんな感じで作成できるはず。

zipファイルのサイズ、圧縮ファイル作成の実行時間に制約がなければ、
こんな感じで、docroot.zipは作成できるはず。

分割圧縮のために必要なCGIは、
指定したファイル名(default:filelist.txt)のファイルリストをN分割したとして、連番のzipファイルを作成するCGI
指定したファイル名(default:filelist.txt)のファイルリストをN分割した場合のM番目のfileリストを、更にN1分割したとして
連番のzipファイルを作成するCGI

実際にfilelist.txtをN分割するCGI
filelist.txtをある指定したディレクトリ以下のファイルとそれ以外で2分割するCGI

こんな感じかな。