LoginSignup
7
5

More than 5 years have passed since last update.

rsyncで外付けHDDに定期バックアップするシェルスクリプト

Last updated at Posted at 2015-08-20

1週間分+αのバックアップをしてくれるシェルスクリプトです。
昔使ってたヤツですが動作保証ナイデス。

daily_backup.sh
#!/bin/bash

# bkuprootには外付けHDDなどのマウントディレクトリを、backuptoにはblkidなどで調べた外付けHDDのUIDを指定
bkupdir=`date +%y%m%d`
bkuproot="/tmp/backup"
bkupto="-U qiitadot-com0-15rs-23yn-c1567bk2788a"

mkdir -p $bkuproot

# unmount for safe
umount /mnt 2>&1 > /dev/null
umount $bkuproot 2>&1 > /dev/null

# mount backup drive
mount $bkupto $bkuproot || exit 1

# 日曜日には過去一週間以前のデータを消す
if [ 0 -eq `date +%w` ]; then

  # 最新7つ以外は削除
  declare -a backups=(`ls -1t $bkuproot`)
  backups=("${backups[@]:7}")
  for x in ${backups[@]}; do rm -rf $x; done

  # 最新のバックアップを新しいフルバックアップとして扱う
  newroot=`ls -1t $bkuproot | head -1`
  if [ -d $bkuproot/root -a "root" != $newroot ]; then
    rm -rf $bkuproot/root
    mv $bkuproot/$newroot $bkuproot/root
  fi
fi


# フルバックアップがまだならフルバックアップを、済みなら差分を
# /, /home, /rootが別パーティションである場合…
mount -r --bind / /mnt
if [ -d $bkuproot/root ]; then
  rsync -av --delete --link-dest=$bkuproot/root /mnt/ $bkuproot/$bkupdir
  rsync -av --delete --link-dest=$bkuproot/root/home /home/ $bkuproot/$bkupdir/home/
  rsync -av --delete --link-dest=$bkuproot/root/boot /boot/ $bkuproot/$bkupdir/boot/
else
  rsync -av /mnt/ $bkuproot/root
  rsync -av /home/ $bkuproot/root/home/
  rsync -av /boot/ $bkuproot/root/boot/
fi
umount /mnt

# バックアップ終わり、接続解除
umount $bkuproot
rmdir $bkuproot

新規/更新ファイルは普通にコピー、バックアップ済ファイルはハードリンクで省スペース設計な感じ。

バックアップ先を

daily_backup.sh
rsync -av --delete \
  --link-dest=$bkuproot/root /mnt/ $bkuproot/$bkupdir

ではなく

daily_backup.sh
rsync -av --delete \
  --link-dest=$bkuproot/root /mnt/ $bkuproot/daily/$bkupdir

とかにしとけば

hourly_backup.sh
rsync -av --delete \
  --link-dest=$bkuproot/root /mnt/ $bkuproot/hourly/$bkupdir

とかに設定したヤツと共存出来るかもデスね。
Mac OS XのTime Machineみたい。

7
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
5