RAID は、HDDの故障によるデータ消失は防げますが、自分自身で誤ってデータを削除した場合は、両HDDのデータが削除されてしまい復旧が行えません。消してしまったデータを復旧させる為にはデータのバックアップが必須です。
USB接続のHDDであれば手軽に準備出来ると思いますので、バックアップ方法を紹介したいとおもいます。tar コマンドは、アーカイブ(書庫)の作成・展開をするコマンドです。複数のファイル、ディレクトリをファイル所有者、パーミッション、タイムスタンプ情報を保持したまま1つのファイルにまとめる事が出来るのでデータのバックアップをするのに便利です。
例えば RAID 構成にした /var/www/html/ 配下の設定ファイルを1つのアーカイブファイル(/media/taro/BAFACE59FACE1215/html.tar.gz) に圧縮するには以下のコマンドを実行します。
# tar cvfz /media/taro/BAFACE59FACE1215/html.tar.gz /var/www/html/ 保存先(/media/taro/BAFACE59FACE1215/)は、接続したUSB接続のHDDとする。
アーカイブファイル(/media/taro/BAFACE59FACE1215/html.tar.gz)を元のディレクトリに展開するには以下のコマンドを実行します。
# tar xvfz /media/taro/BAFACE59FACE1215/html.tar.gz -C /
c アーカイブを新規に作成する x アーカイブからファイルを取り出す。 v 処理したファイルの一覧を詳細に表示する f 指定したアーカイブファイルを使用する。 z gzipで圧縮する。 C 指定したディレクトリに移動してからコマンドを実行する。 N 指定した日より新しい日付けのファイルだけをアーカイブする。 --exclude 指定したファイルを除外する。
しかし、この方法は一度のバックアップには向いていますが、定期的に何度もバックアップするにはむいていません。このままでは全てのデータをその都度バックアップしてしまい容量がかさむので、ファイルの差分だけをバックアップします。
tar コマンドは、-N オプションを使うと、指定した日より新しい日付けのファイルだけをアーカイブしてくれます。date コマンドは現在の日時を表示するコマンドですが + オプションを使用する事により出力フォーマットを変更する事が出来るので、tar と date コマンドを組み合わせて、日付指定のバックアップを取ってみます。
tar コマンド実行後、実行した日時を /var/www/html/lastupdate ファイルに保存します。
# date "+%Y-%m-%d %H:%M:%S" >/var/www/html/lastupdate # cat /var/www/html/lastupdate 2018-08-21 11:23:29 <- 現在の時刻が lastupdate ファイルに保存される。
%Y 年 (1970~) %m 月 (01~12) %d 日 (01~31) %H 時 (00~23) %M 分 (00~59) %S 秒 (00~61)
`` でdateコマンドを囲み実行結果の日時をファイル名の一部に使用します。 tar コマンド成功後、/var/www/html/lastupdate ファイルを更新します。 # tar cvfz /media/taro/BAFACE59FACE1215/html.`date "+%Y%m%d%H%M%S"`.tar.gz -N "`cat /var/www/html/lastupdate`" --exclude /var/www/html/lastupdate /var/www/html/ && date "+%Y-%m-%d %H:%M:%S" >/var/www/html/lastupdate '' で cat コマンドを囲み、-N オプションのパラメータに使用します。 /var/www/html/lastupdate ファイルを除外してアーカイブします。
データを保存したディレクトリを確認する。
# ls -l /media/taro/BAFACE59FACE1215/ -rw-r--r--. 1 root root 7040517 8月 31 11:44 html.20180831114412.tar.gz <- /var/www/html/ 配下を全てアーカイブ。 -rw-r--r--. 1 root root 3417 8月 31 11:44 html.20180831114418.tar.gz <- 差分のみのアーカイブ
定期的にバックアップを取りたい場合は、cron の設定をしておくと便利です。cron に設定しておくと指定した時刻に、指定したコマンドを実行してくれます。
cron の編集画面を開きます。
# crontab -e 3 5 * * * /usr/bin/tar cvfz /media/taro/BAFACE59FACE1215/html.`date "+\%Y\%m\%d\%H\%M\%S"`.tar.gz -N "`cat /var/www/html/lastupdate`" --exclude /var/www/html/lastupdate /var/www/html/ && date "+\%Y-\%m-\%d \%H:\%M:\%S" >/var/www/html/lastupdate ※'%' には、エスケープシーケンスを追加します。
それぞれの項目は以下の通り、サンプルの設定は朝の05:03にコマンドが実行されます。
分 (0〜59) 時 (0〜23) 日 (1〜31) 月 (1〜12 または jan〜dec) 曜日 (0〜6 または sun〜sat) 実行するコマンド
なお 整数間にハイフン-やカンマ(,)を使用するとことも可能です。8-11は、8,9,10,11を表します。1,2,5,8 は、1,2,5,8を表します。またスラッシュ(/)を使用すると、ステップ値を設定することが出来、時項目で */2 とした場合、1時間おきの間隔を定義することが可能です。