Σελίδα 1 από 2

Backup Script

ΔημοσίευσηΔημοσιεύτηκε: 19 Αύγ 2008, 20:28
από The_Mentor
Ο sudobash έχει γράψει έναν οδηγό σχετικά με προγραμματισμένες εργασίες. Μια τέτοια εργασία είναι και η αυτόματη λήψη Backup μέσω ενός script.
Το παρακάτω script λειτουργεί πάνω απο χρόνο σε δικούς μου servers και για τις δικές σας ανάγκες πιθανόν να χρειάζεται μικροαλλαγές κυρίως στο ποιά folder χρειάζετε να πάρετε backup.
Το script σώζει σε 2ο δίσκο (/media/disk) το αρχείο backup και κρατάει 7 μέρες backup προς τα πίσω. Την όγδοη μέρα σβήνει το πρώτο και αντικαθιστά με το νεότερο (FirstIN FirstOUT = FIFO).

Κώδικας: Επιλογή όλων
#!/bin/sh
############################################
#
# (Info about)
#
############################################
#
# (Date Installed)
#
############################################
#
# (Other info about editing etc)
#
############################################
# files to backup.
backup_files="/home /var/www /etc /root /boot /opt"

# Where to backup to.
dest="/media/disk/backup"

# Create archive filename.
day=$(date +%A)
hostname=$(hostname -s)
archive_file="$hostname-$day.tgz"

# Print start status message.
echo "Backing up $backup_files to $dest/$archive_file"
date
echo

# Backup the files using tar.
tar czf $dest/$archive_file $backup_files

# Print end status message.
echo
echo "Backup finished"
date

# Long listing of files in $dest to check file sizes.
ls -lh $dest


Στα backup_files μπορείτε να βάλετε όποια folder θέλετε (=χρειάζεστε).

Σώζετε το παραπάνω σε ένα αρχείο backup.sh και το κάνετε εκτελέσιμο.

Κώδικας: Επιλογή όλων
chmod +x backup.sh


τοποθετήστε το στο /usr/local/bin και με το το crontab του Mulder το προγραμματίζετε να εκτελείτε όποτε το θέλετε...

Το δικό μου crontab είναι αυτό:

Κώδικας: Επιλογή όλων
0 0 * * * bash /usr/local/bin/backup.sh


και εκτελεί όπως βλέπετε το backup.sh κάθε μέρα στις 00.00

Re: Backup Script

ΔημοσίευσηΔημοσιεύτηκε: 20 Αύγ 2008, 00:05
από ftso
Πολύ καλό!
Επίσης πολύ καλή ιδέα για κάποιο πιο ολοκληρωμένο project με περισσότερες επιλογές,γραφικό,restore κτλ!!!
Υπάρχει κάτι τέτοιο ή να αρχίσω το γράψιμο? :lol:

Re: Backup Script

ΔημοσίευσηΔημοσιεύτηκε: 20 Αύγ 2008, 00:19
από The_Mentor
ξεκίνα να γράφεις και αν είναι, να κάνουμε κουμάντο να μπεί σαν σύνολο στο περιοδικό

Re: Backup Script

ΔημοσίευσηΔημοσιεύτηκε: 20 Αύγ 2008, 01:06
από sudobash
Φίλε The_Mentor, πολύ καλό το script σου... απλά έχω μια παρατήρηση... επειδή κάθε μέρα παίρνει backup με το όνομα της τρέχουσας ημέρας και έτσι αντικαθιστά το αρχείο της προηγούμενης βδομάδας ίδιας μέρας, αν κάποια μέρα προκύψει το οποιοδήποτε λάθος στο backup, εσύ θα δεις κανονικά εκεί το αρχείο αλλά δε θα ξέρεις ποιας ημερομηνίας είναι. Οπότε καλό θα ήταν στο script να προσθέτει στο όνομα την ημερομηνία και όχι την ημέρα απλά. Και στο τέλος να διαγράφει ότι αρχείο βρίσκει και είναι παλαιότερο των 7 ημερών.

Οπότε μια μικρή παραλλαγή στο script σου θα μπορούσε να είναι η εξής:

Κώδικας: Επιλογή όλων
#!/bin/sh
############################################
#
# (Info about)
#
############################################
#
# (Date Installed)
#
############################################
#
# (Other info about editing etc)
#
############################################
# files to backup.
backup_files="/home /var/www /etc /root /boot /opt"

# Where to backup to.
dest="/media/disk/backup"

# Create archive filename.
day=$(date +%Y-%m-%0e)
hostname=$(hostname -s)
archive_file="$hostname-$day.tgz"

# Print start status message.
echo "Backing up $backup_files to $dest/$archive_file"
date

# Backup the files using tar.
tar czf $dest/$archive_file $backup_files

# Print end status message.
echo "Backup finished"
date

# Delete files older than <days> days
days=7
echo "Deleting files older than $days days"
find $dest -type f -name "$hostname*.tgz" -daystart -mtime +$days -exec rm -f {} \;
echo "Deleting finished"

# Long listing of files in $dest to check file sizes.
ls -lh $dest


(Φυσικά και όλα τα credits στον The_Mentor για το αρχικό script)

Re: Backup Script

ΔημοσίευσηΔημοσιεύτηκε: 20 Αύγ 2008, 16:17
από The_Mentor
Ορθή αλλαγή και συμπλήρωση... +1 από εμένα.

Για το restore τώρα έχουμε:

Κώδικας: Επιλογή όλων
cd /
sudo tar -xzvf /media/disk/backup/backup_file_xxx.tgz


Αυτό κάνει restore στο original path που σημαίνει πως άν έχετε πάρει και mail αρχεία συστήματος etc backup όλα αυτά θα επανεγγραφούν στην προτέρα κατάσταση.

Re: Backup Script

ΔημοσίευσηΔημοσιεύτηκε: 22 Αύγ 2008, 14:49
από ftso
Λοιπόν αν τον παρακάτω κώδικα:
Κώδικας: Επιλογή όλων
# files to backup.
backup_files="/home /var/www /etc /root /boot /opt"

# Where to backup to.
dest="/media/disk/backup"


τον κάνουμε πχ:
Κώδικας: Επιλογή όλων
# files to backup.
backup_files="/home /var/www /etc /root /boot /opt"

# Where to backup to.
dest="/tmp/backup"

Θα υπάρχει κανένα πρόβλημα που το backup γίνετε στον ίδιο δίσκο, άσχετα αν είναι αποτελεσματικό ή όχι?

Επίσης η επαναφορά του backup υποθέτω μπορεί να γίνει απο την ίδια εγκατάσταση αν ακολουθήσει reboot? ή όχι?

Re: Backup Script

ΔημοσίευσηΔημοσιεύτηκε: 22 Αύγ 2008, 15:15
από sudobash
ftso έγραψε:Θα υπάρχει κανένα πρόβλημα που το backup γίνετε στον ίδιο δίσκο, άσχετα αν είναι αποτελεσματικό ή όχι?

Δε θα υπάρχει κανένα πρόβλημα.. όμως δεν είναι καλή ιδέα να είναι το backup στον ίδιο δίσκο (κυρίως γι'αυτό άλλωστε παίρνουμε backup, σε περίπτωση που πάθει κάτι ο δίσκος...). Όπως επίσης δεν είναι καλή ιδέα να βάζεις χρήσιμα δεδομένα στον φάκελο /tmp...

ftso έγραψε:Επίσης η επαναφορά του backup υποθέτω μπορεί να γίνει απο την ίδια εγκατάσταση αν ακολουθήσει reboot? ή όχι?

Ναι, μπορεί να γίνει επαναφορά και μετά από reboot.

Re: Backup Script

ΔημοσίευσηΔημοσιεύτηκε: 22 Αύγ 2008, 17:31
από The_Mentor
Βασικά πρέπει να αναφερθεί και το εξής:

Πολλά συστήματα ΔΕΝ κάνουν automount τους δίσκους που είναι συνδεδεμένοι πάνω τους με αποτέλεσμα το path στο script να βγάζει error.
Μετά λοιπόν το boot το σύστημα ΠΡΕΠΕΙ να κάνει mount τους δίσκους (ιδιαίτερα αυτόν που αφορά το backup).

Και επειδή σε λίγο καιρό θα γίνουμε windows :o ο πιο απλός τρόπος είναι με την εγκατάσταση του pysdm ο οποίος είνα GUI storage device manager και μπορείτε να κάνετε automount, modify και τα λοιπά σε δίσκους / partitions. Το πρόγραμμα αυτό τροποποιεί το fstab επομένως χρειάζεται ΠΡΟΣΟΧΗ!!!
Mετά την εγκατάσταση θα το βρείτε στο System > Administration > Storage Device Manager

Το να κάνεις backup στον ίδιο δίσκο που έχεις και το λειτουργικό είναι ρώσικη ρουλέτα.

Re: Backup Script

ΔημοσίευσηΔημοσιεύτηκε: 22 Αύγ 2008, 17:50
από ftso
Ετοιμάζω ένα script το οποίο θα εκτελείτε με τις εξής παραμέτρους:
Κώδικας: Επιλογή όλων
-n , --new       Give the parameters and start backup using cron
-h , --help      This screen
-j , --job       Make a backup now
-l , --log       View and-or clear logs
-r , --resrore   Restore a back file
-d , --delete    View and-or Delete backups or jobs or log or all
-v , --view      View backups and jobs that exists


Το script έχει περιορισμούς στην εισαγωγή παραμέτρων για την αποφυγή λάθους και έλεγχο πριν εκτελεστεί οτι όλα είναι OK.
Σε περίπτωση σφάλματος τυπώνει μήνυμα και αν εκτελείτε απο τον cron βάζει το σφάλμα στα logs.
Επίσης σκέφτομαι να βάλω και κώδικα που θα πετάει μήνυμα με k(dialog) κάθε φορά που ξεκινάει απο τον cron ή υπάρχει σφάλμα την ώρα που πάει να εκτελεστεί.

Επιτρέπει δυνατότητα πχ να κάνεις backup τον κατάλογο /home/user στο /home αλλά όχι το αντίθετο.
Το μόνο πλεονέκτημα εδώ είναι οτι μπορείς να κάνεις "επαναφορά συστήματος" κατα κάποιο τρόπο.

Μόλις το τελειώσω θα το ανεβάζω για debug και μετάφραση.
Αν δείτε τα αγγλικά μου θα πέσετε κάτω απο τα γέλια :lol: .

Μελλοντικά αν δουλέψει καλά, σκέφτομαι για μια πιο user friendly εφαρμογή βασισμένη σε αυτό που θα τρέχει πχ στο tray και θα έχει αρκετές ρυθμίσεις.


Πως σας φαίνεται?

Αυτά :)

Re: Backup Script

ΔημοσίευσηΔημοσιεύτηκε: 23 Αύγ 2008, 00:41
από The_Mentor
ftso εξήγησε μου λίγο με την -n τί εννοείς; Ποιά παράμετρο περνάς;