SUSE LINUX Enterprise & openSUSE Community
มกราคม 18, 2019, 04:09:07 AM *
ยินดีต้อนรับคุณ, บุคคลทั่วไป กรุณา เข้าสู่ระบบ หรือ ลงทะเบียน
ส่งอีเมล์ยืนยันการใช้งาน?

เข้าสู่ระบบด้วยชื่อผู้ใช้ รหัสผ่าน และระยะเวลาในเซสชั่น
ข่าว:
 
   หน้าแรก   ช่วยเหลือ ค้นหา เข้าสู่ระบบ สมัครสมาชิก  

[Why we need your support] SUSE and openSUSE are trademarks of Attachmate Group, Inc. - WE ARE NOT IN ANY WAY ASSOCIATED WITH SUSE AND ATTACHMATE GROUP. SUSEThailand.com is a SUSE Linux user and community found in Thailand but not limited to other country suse linux user to join in. Currently active contents (How to's, Scripts, Tips, Tricks, Tutorials, Linux Command Line, and Troubleshooting) this suse linux how to's and expert support are SUSE Linux.
หน้า: [1]   ลงล่าง
  พิมพ์  
ผู้เขียน
หัวข้อ: Script rsync Differential incremental backup (สคริปต์สำรองข้อมูลแยกข้อมูลเป็นวันๆ)  (อ่าน 1883 ครั้ง)
0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้
Sontaya
Administrator
Expert : ผู้เชี่ยวชาญ
*****

Karma: +1/-0
ออฟไลน์ ออฟไลน์

กระทู้: 1931


Administrator


เว็บไซต์
« เมื่อ: มีนาคม 09, 2012, 03:16:07 PM »


Script rsync Differential incremental backup (สคริปต์สำรองข้อมูลแยกข้อมูลเป็นวันๆ)

สคริปต์สำหรับสำรองข้อมูลแบบ differential incremental โดยแยกสำรองข้อมูลเป็นวันๆ โดยสำรองข้อมูลเก็บไว้นาน 30 วัน ถึงทำการลบ พร้อมส่งเมลแจ้งเตือน

ตัวอย่าง output directory
/data/storage_branches/
2012-01-01
2012-01-02
2012-01-03
เป็นต้น

IMPORTANT: #rsync options ใช้สำหรับการสำรองข้อมูล local network เท่านั้น ไม่ใช่ rsync ออปชันสำหรับ over a local network

รายละเอียดออบชัน
โค๊ด:
man rsync

สคริปต์

โค๊ด:
#!/bin/bash

#: Title       : rsync_inc.sh
#: Date Created: 2012-03-01
#: Last Edit   : 2012-03-09
#: Author      : SONTAYA PITUBT <susethailand.com@gmail.com>
#: Version     : 1.0.0
#: Description : Rsync incremental backups script
#: Options     :

#
# This is the standard GPL Statement, leave at the top of the script.
# Just use the command show_gpl after this function for it to be shown.
#

function show_gpl {
echo ""
echo "rsync_inc.sh is a bash script file written to be used with SUSE Linux."
echo "Copyright (C) 2012 by SONTAYA POTIBUT, susethailand.com@gmail.com"
echo ""
echo "This program is free software; you can redistribute it and/or modify"
echo "it under the terms of the GNU General Public License as published by"
echo "the Free Software Foundation; either version 2 of the License, or"
echo "(at your option) any later version."
echo ""
echo "This program is distributed in the hope that it will be useful,"
echo "but WITHOUT ANY WARRANTY; without even the implied warranty of"
echo "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the"
echo "GNU General Public License for more details."
echo ""
echo "You should have received a copy of the GNU General Public License"
echo "along with this program; if not, write to the Free Software"
echo "Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA"
echo ""
}

#mail setting
MAILFROM="logs@domain.com"
MAILADMIN="it.support@domain.com"

#log files
LOGHOME="/data/storage_branches/rsync_home.log"
LOGDATA="/data/storage_branches/rsync_data.log"
echo $'\n\n' > $LOGHOME
echo $'\n\n' > $LOGDATA

#todays date
DAY0=$(date +%Y-%m-%d)

#yesterdays
DAY1=$(date +%Y-%m-%d -d "1 days ago")

#2 days ago
DAY2=$(date +%Y-%m-%d -d "2 days ago")

#30 days ago
DAY30=$(date +%Y-%m-%d -d "30 days ago")

#directoris to backup
SRCDIR="/data/"
SRCDIR2="/home/"

#where to storage the backups
BACKUPDIR="/data/storage_branches/data/$DAY0"
BACKUPDIR2="/data/storage_branches/home/$DAY0"

#hostname or IP address of rsync remote
REMOTE="192.168.1.100"
USER="root"

#link destination directory:
LINK="/data/storage_branches/data/$DAY1"
LINK2="/data/storage_branches/home/$DAY1"

#limit bandwidth rsync uses in its network communications
BWLIMIT='' #KByte/s

#exclude file
EXCLUDE="/data/scripts/rsync_exclude_branches"

#rsync options
OPT="--archive --one-file-system --hard-links --human-readable --inplace --numeric-ids --delete --delete-excluded --exclude-from=$EXCLUDE
--itemize-changes --recursive --whole-file --times --bwlimit=$BWLIMIT --log-file=$LOGDATA --link-dest=$LINK" OPT2="--archive --one-file-system
--hard-links --human-readable --inplace --numeric-ids --delete --delete-excluded --exclude-from=$EXCLUDE --itemize-changes --recursive --whole-file
--times --bwlimit=$BWLIMIT --log-file=$LOGHOME --link-dest=$LINK2"

        #delete the backup from 30 days ago, if it exists
        if [ -d /data/storage_branches/data/$DAY30 ]
            then
                rm /data/storage_branches/data/$DAY30 -r
                rm /data/storage_branches/home/$DAY30 -r
            else
                #find out if a directory exists or not
                if [ -d /data/storage_branches/data/$DAY1 ]
                        then
                        #sync data
                        rsync $OPT $USER@$REMOTE:$SRCDIR $BACKUPDIR
                        #sync home
                        rsync $OPT2 $USER@$REMOTE:$SRCDIR2 $BACKUPDIR2

                        #notify to system administrator
                        mail -s "Rsync branches data - Incremental backup finished" -a $LOGHOME -a $LOGDATA -r $MAILFROM $MAILADMIN

                                else

                        #create a link directory using hard link (in case a public holidays)
                        cp -al $DAY2 $DAY1

                        #sync data
                        rsync $OPT $USER@$REMOTE:$SRCDIR $BACKUPDIR
                        #sync home
                        rsync $OPT2 $USER@$REMOTE:$SRCDIR2 $BACKUPDIR2

                        #notify to system administrator
                        mail -s "Alert: Rsync branches data - $DAY1 Directory not found and script auto created hard link" -r $MAILFROM $MAILADMIN
                fi
        fi
exit 0;
# End Of Script


ลองนำไปประยุกต์ใช้งานกันดูสามารถ define valuables ต่างๆ ตามเราเข้าใจได้เลยครับ
แจ้งลบกระทู้นี้หรือติดต่อผู้ดูแล   บันทึกการเข้า

ageLOC Technology
Sontaya
Administrator
Expert : ผู้เชี่ยวชาญ
*****

Karma: +1/-0
ออฟไลน์ ออฟไลน์

กระทู้: 1931


Administrator


เว็บไซต์
« ตอบ #1 เมื่อ: มีนาคม 12, 2012, 12:00:47 PM »


Updated: 12/03/2012

เนื่องจากการทำงานของสคริปต์ต้องสร้าง hard link กับไดร์เรกทอรี (yesterday) ปัญหาคือ ถ้าเป็นวันหยุด เช่น วันอาทิตย์ หรือเครื่องปลายทางถูกปิด (หรือมีปัญหาอื่นๆ) พอมาวันจันทร์สคริปต์ทำงานตาม crontab ที่ได้ตั้งไว้ สคริปต์จะเซคว่ามีไดร์เรกทอรี (yesterday) ถูกสร้างไหม? ไหน case อย่างนี้ไม่มีไดร์เรกทอรีแน่นอน ผมเลยเขียน if, else ให้มันตรวจสอบสร้าง hard link ให้โดยอัตโนมัติ ดังสคริปต์ด้านล่างนี้

และในกรณีเป็นวันหยุดหลายวัน (public holidays) หรือเครื่องปลายทางถูกปิดมากว่า 1 วัน ผู้ดูแลระบบจะได้รับเมลแจ้ง "Directory not found" ระบบไม่สามารถสำรองข้อมูลได้

โค๊ด:
...

        #delete the backup from 30 days ago, if it exists
        if [ -d /data/storage_branches/data/$DAY30 ]; then
                rm /data/storage_branches/data/$DAY30 -r
                rm /data/storage_branches/home/$DAY30 -r
        else
                #find out if a directory exists or not
                if [ -d -d /data/storage_branches/data/$DAY1 ]; then
                        #sync data
                        rsync $OPT $USER@$REMOTE:$SRCDIR $BACKUPDIR
                        #sync home
                        rsync $OPT2 $USER@$REMOTE:$SRCDIR2 $BACKUPDIR2
                        #notify to system administrator
                        mail -s "Rsync branch data - Incremental backup finished" -a $LOGHOME -a $LOGDATA -r $MAILFROM $MAILADMIN

                else
                #in case a public holiday (Sunday)
                        #find out if a directory exists or not
                         if [ -d /data/storage_branches/data/$DAY2 ] && [ -d /data/storage_branches/home/$DAY2 ]; then
                         #create a link directory using hard link
                         cp -al /data/storage_branches/data/$DAY2 /data/storage_branches/data/$DAY1
                         #sync data
                         rsync $OPT $USER@$REMOTE:$SRCDIR $BACKUPDIR

cp -al /data/storage_branches/data/$DAY2 /data/storage_branches/data/$DAY1
                         #sync home
                         rsync $OPT2 $USER@$REMOTE:$SRCDIR2 $BACKUPDIR2
    
                    #notify to system administrator
                         mail -s "Alert: Rsync branch data - Created hard link and backup finished" -r $MAILFROM $MAILADMIN

                        else
                        #in case a public holidays
#notify to system administrator
                         mail -s "Alert: Rsync branch data - Directory not found" -r $MAILFROM $MAILADMIN
                        fi
                fi
      fi
exit 0;
#end of script

« แก้ไขครั้งสุดท้าย: มีนาคม 12, 2012, 04:33:01 PM โดย Sontaya » แจ้งลบกระทู้นี้หรือติดต่อผู้ดูแล   บันทึกการเข้า

ageLOC Technology
หน้า: [1]   ขึ้นบน
  พิมพ์  
 
กระโดดไป:  

(@)2007 SUSE Linux user community found in Thailand. This site is not an official openSUSE and SUSE website, and is not in any way affiliated with or endorsed by SUSE Linux GmbH or Novell. openSUSE and SUSE are trademarks of Novell, Inc. in the United States and other countries.
Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!
หน้านี้ถูกสร้างขึ้นภายในเวลา 0.046 วินาที กับ 19 คำสั่ง (Pretty URLs adds 0.011s, 2q)