2019年12月21日土曜日

raspberry pi : SDカードの定期バックアップ

目的:

ラズベリーパイのバックアップを定期的に取る。
バックアップは、SDカードの中身を丸ごと外付けの USB HDD に イメージファイルとしてバックアップする。

手順: 

  1.  SDカードのデバイス名を確認する。
    fdisk -l を実行し、SDカードのデバイス名を確認する。
    自環境では、/dev/mmcblk0
     
  2. バックアップ取得用スクリプト
    バックアップは dd コマンドを使用して 外付けの USB HDD に 取得する。
    以下の様なスクリプトを作成し、バックアップファイルを作成した後、バックアップファイルが指定ファイル数を超えた場合は古いファイルを削除するようにした。
     ( バックアップ先ディレクトリ名等、各環境に合わせて修正が必要 )
    vi backup.sh
    で作成後、
    chmod 770 backup.sh
    で 実行権限を付与。
      
    #!/bin/sh
    
    #バックアップファイル数の上限
    MAXFNUM=4
    
    #バックアップ先のディレクトリ
    BKDIR=/mnt/hdd1/backup/raspi_bkup/
    
    #バックアップファイル名
    BKFNAME="rp4bup_"`date +%Y%m%d`.img
    
    #バックアップ実行
    echo "Back Up start    : " `date '+%y/%m/%d %H:%M:%S'`
    dd bs=4M if=/dev/mmcblk0 of=${BKDIR}${BKFNAME}
    echo "Back Up Complete : " `date '+%y/%m/%d %H:%M:%S'`
    ##echo "Backup Complete !"
    
    #古いバックアップファイルの削除
    num=0
    for FN in `ls -tl ${BKDIR}rp4bup_*.img | awk '{print $9}'`
    do
      if [ ${num} -ge ${MAXFNUM} ];
        then
          rm ${FN}
          echo "delete " ${FN}
      fi
      num=$(($num + 1)) 
    done
    

    上記スクリプトでは、バックアップファイルが 4つを超えた場合、古いバックアップファイルを削除する。

    上記 スクリプトをテストし、問題ないことを確認する。
    sudo ./backup.sh
    自環境での確認時、バックアップ時間は 32GB のSDカード使用で約13分かかった。 
     
  3. スクリプトを定期的に実行
    上記スクリプトを cron で定期実行する。
    SDカードアクセスに root権限が必要なため、
    sudo crontab -e
    で設定する。設定内容は、
    実行する ‘分’ ‘時’ ‘日’ ‘月’ ‘曜日’ ‘コマンド’ の順に指定する。
    曜日は 0:日, 1:月, 2:火, — ,6:土,7:日 を指定する。
    今回は、

    00 03 * * 1 sh <スクリプトを保存したフォルダ>/backup.sh
    

    とした。(毎週 月曜日 3:00 にbackup.sh を実行。)



0 件のコメント:

コメントを投稿