USB接続HDDへの定期バックアップ(tarによるフル、増分、差分)

LINEで送る
Pocket

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時間おきの間隔を定義することが可能です。

LINEで送る
Pocket

  • このエントリーをはてなブックマークに追加

コメントを残す

*

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください