バックアップシェルスクリプトver.1


バックアップシェルスクリプト

rsyncコマンドを並べただけのバックアップシェルスクリプトサンプルです。
Cygwinなどで実行します。

backup01.sh
#!/bin/sh
echo "This program take backup..."
echo "bk01:WorkDrive to FileServer,and to BackUp_HDD_k"
echo "bk02:ShareData in fileServer to BackUp_HDD_Q"

#bk01:WorkDriveのファイルサーバーへのバックアップ
rsync -a -delete -v /cygdrive/w/ //192.168.01.01/share/\ 部署A_bk/w_drive

#bk01:WorkDriveのバックアップ(ToHDD:K)
rsync -a -delete -v /cygdrive/w/ /cygdrive/k/w_drive/

#bk02:ファイルサーバ内のShareDataのバックアップ
rsync -a -delete -v //192.168.01.01/share/ShareData/ /cygdrive/Q/ShareData_bk/

やりたいこと

  • "my_PC"(Cygwin環境)とLAN内にある"FileServer"の間で、バックアップをとりつとられつ。
  • LAN内の通信量を減らすため差分バックアップを行いたい。
  • コマンドラインでサクッと毎回実行したい

ファイル構成

< my_PC(cygwin) >
w:WorkDrive
│workfiles...

k:BackUpDrive1(外付けHDDです)
│w_drive

q:BackUpDrive2(外付けHDDです)
│ShareData_bk

< FileServer >(アドレス192.168.01.01)
|share
|部署A
|w_drive

シェルの指定
#!/bin/sh

バックアップのコードとは関係ないですが、動かすシェルプログラムを指定します。
例えばCygwinだと

シェルの場所を調べる
$ echo $SHELL
/bin/bash

という風にシェルの場所が分かります。

実行時のメッセージ
echo "This program take backup..."
echo "bk01:WorkDrive to FileServer,and to BackUp_HDD_k"
echo "bk02:ShareData in fileServer to BackUp_HDD_Q"

このスクリプトを起動したときにシェルにメッセージを表示させてみました。プログラムの動作が分かるように。

バックアップコマンド
#bk01:WorkDriveのファイルサーバーへのバックアップ
rsync -a -delete -v /cygdrive/w/ //192.168.01.01/share/10\ 部署A_bk/w_drive

rsyncを利用して、差分バックアップを行っています。
rsyncのオプションは以下の通り
-a:フォルダのコピーを行い、リンクを相対的につくりなおし、ファイルのタイムスタンプ・編集権限は保ってコピーを行う。
-delete:2回目以降のバックアップの際、バックアップもとで削除されたファイルはバックアップ先でも削除する。
-v:rsyncが行う操作を表示させながら動かす。現在どのファイルをコピーしているのかという情報。

rsyncの文法

rsync [-オプション] [バックアップ元ディレクトリ/] [バックアップ先ディレクトリ/]

また、上記サンプルでバックアップ先に「\ 」(バックスラッシュ+スペース)はwindowsにおけるディレクトリ名に半角スペースを表しています。(共有フォルダ内はちゃんとシェルから指定しやすいフォルダ名にしてほしい!(まさかの☆とか★とかつけるのやめてほしい!!!orz))

Cygwinでネットワークドライブにアクセスするときは「//」をつけてアクセスします。

以上のシェルスクリプトをPC使わない時間に実行してます。

課題など

  • 1世代しかバックアップ取れてない
  • 実際のところ、バックアップファイルの権限がオリジナルファイルと変わっている。winだといちいちファイルの権限を編集してから使用しないといけない。