Σενάρια εντολών κελύφους

Ένας από τους απλούστερους τρόπους για να κρατήσετε αντίγραφα ασφαλείας ενός συστήματος είναι με τη χρήση ενός σεναρίου εντολών κελύφους. Για παράδειγμα, ένα σενάριο εντολών μπορεί να χρησιμοποιηθεί για να ρυθμίσετε από ποιους καταλόγους θα διατηρούνται αντίγραφα ασφαλείας και να χρησιμοποιείτε αυτούς τους καταλόγους ως παραμέτρους στο εργαλείο tar, δημιουργώντας έτσι ένα συμπιεσμένο αρχείο. Το αρχείο μπορεί μετά να μετακινηθεί ή να αντιγραφεί σε κάποια άλλη τοποθεσία. Το αρχείο μπορεί επίσης να δημιουργηθεί απευθείας σε ένα απομακρυσμένο σύστημα αρχείων όπως σε κάποια τοποθεσία NFS.

Το εργαλείο tar δημιουργεί ένα συμπιεσμένο αρχείο από περισσότερα αρχεία ή καταλόγους. Το tar μπορεί επίσης να περάσει τα αρχεία από εργαλεία συμπίεσης, μειώνοντας έτσι το μέγεθος του τελικού αρχείου.

Απλό σενάριο εντολών κελύφους

Το παρακάτω σενάριο εντολών κελύφους χρησιμοποιεί το tar για να δημιουργήσει ένα συμπιεσμένο αρχείο σε ένα απομακρυσμένο σύστημα αρχείων NFS που έχει προσαρτηθεί. Το όνομα του αρχείου προσδιορίζεται με τη χρήση επιπλέον εργαλείων γραμμής εντολών.

#!/bin/sh
########################################
#
# Σενάριο εντολών δημιουργίας αντιγράφων ασφαλείας σε NFS.
#
########################################

# Τι θα αντιγραφεί. 
backup_files="/home /var/spool/mail /etc /root /boot /opt"

# Πού θα δημιουργηθεί το αντίγραφο ασφαλείας.
dest="/mnt/backup"

# Δημιουργία του ονόματος του αρχείου.
day=$(date +%A)
hostname=$(hostname -s)
archive_file="$hostname-$day.tgz"

# Εμφάνιση μηνύματος έναρξης.
echo "Δημιουργείται αντίγραφο των αρχείων $backup_files στο $dest/$archive_file"
date
echo

# Δημιουργία αντιγράφου των αρχείων με τη χρήση του tar.
tar czf $dest/$archive_file $backup_files

# Εμφάνιση μηνύματος ολοκλήρωσης.
echo
echo "Η διαδικασία δημιουργίας αντιγράφου ασφαλείας ολοκληρώθηκε"
date

# Εμφάνιση λεπτομερούς λίστας των αρχείων στο $dest για τον έλεγχο του μεγέθους των αρχείων.
ls -lh $dest
  • $backup_files: μια μεταβλητή που περιέχει τους καταλόγους από τους οποίους θέλετε να κρατήσετε αντίγραφο ασφαλείας. Η λίστα θα πρέπει να προσαρμοστεί ώστε να ταιριάζει στις ανάγκες σας.

  • $day: μια μεταβλητή που περιέχει την ημέρα της εβδομάδας (Δευτέρα, Τρίτη, Τετάρτη, κτλ). Αυτό χρησιμοποιείται για να δημιουργείται ένα αρχείο για κάθε ημέρα της εβδομάδας, παρέχοντας έτσι ένα ιστορικό αντιγράφων ασφαλείας επτά ημερών. Υπάρχουν και άλλοι τρόποι για να επιτευχθεί αυτό, συμπεριλαμβανομένων άλλων τρόπων χρήσης του εργαλείου date.

  • $hostname: μεταβλητή που περιέχει το σύντομο όνομα του συστήματος. Προσθέτοντας το όνομα του συστήματος στο όνομα του αρχείου, σας δίνεται η επιλογή να τοποθετείτε καθημερινά αρχεία, από πολλά συστήματα, στον ίδιο κατάλογο.

  • $archive_file: το πλήρες όνομα του αρχείου.

  • $dest: προορισμός του αρχείου. Ο κατάλογος πρέπει να δημιουργηθεί και σε αυτή την περίπτωση να προσαρτηθεί πριν από την εκτέλεση του σεναρίου εντολών δημιουργίας αντιγράφων ασφαλείας. Δείτε το “Σύστημα Αρχείων Δικτύου (NFS)” για λεπτομέρειες στη χρήση του NFS.

  • μηνύματα κατάστασης: προαιρετικά μηνύματα που εμφανίζονται στην κονσόλα χρησιμοποιώντας το εργαλείο echo.

  • tar czf $dest/$archive_file $backup_files: η εντολή tar που χρησιμοποιείται για τη δημιουργία του αρχείου.

    • c: δημιουργεί ένα αρχείο.

    • z: περνάει το αρχείο μέσα από το εργαλείο gzip, συμπιέζοντας έτσι το αρχείο.

    • f: χρήση ενός αρχείου. Ειδάλλως, το αποτέλεσμα του tar θα αποσταλεί στο STDOUT.

  • ls -lh $dest: προαιρετική εντολή που εμφανίζει μια πλήρη λίστα (-l) σε φιλική προς τον άνθρωπο μορφή (-h) των αρχείων του καταλόγου προορισμού. Αυτό είναι χρήσιμο για έναν γρήγορο έλεγχο του μεγέθους του αρχείου. Αυτός ο έλεγχος δεν θα πρέπει να αντικαθιστά τον έλεγχο του αρχείου.

Αυτό είναι ένα απλό παράδειγμα ενός σεναρίου εντολών δημιουργίας αντιγράφων ασφαλείας. Υπάρχει μια πληθώρα επιλογών που μπορούν να συμπεριληφθούν σε ένα σενάριο εντολών δημιουργίας αντιγράφων ασφαλείας. Δείτε το “Αναφορές” για συνδέσμους που παρέχουν περισσότερο αναλυτικές πληροφορίες σχετικά με τα σενάρια εντολών κελύφους.

Εκτέλεση του σεναρίου εντολών

Εκτέλεση από τερματικό

Ο απλούστερος τρόπος για να εκτελέσετε το παραπάνω σενάριο εντολών δημιουργίας αντιγράφων ασφαλείας είναι να αντιγράψετε τα περιεχόμενα σε ένα αρχείο, backup.sh για παράδειγμα. Μετά από ένα τερματικό, εκτελέστε:

sudo bash backup.sh

Αυτός είναι ένας πολύ καλός τρόπος για να ελέγξετε το σενάριο εντολών ώστε να σιγουρευτείτε πως τα πάντα δουλεύουν όπως περιμένατε.

Εκτέλεση με το cron

Το εργαλείο cron μπορεί να χρησιμοποιηθεί για την αυτοματοποίηση της εκτέλεσης του σεναρίου εντολών. Η υπηρεσία cron, επιτρέπει την εκτέλεση σεναρίων εντολών, ή εντολών, κάποια συγκεκριμένη ώρα και ημερομηνία.

Το cron ρυθμίζεται μέσα από καταχωρήσεις σε ένα αρχείο crontab. Τα αρχεία crontab χωρίζονται σε πεδία:

# m h dom mon dow   command
  • m: το λεπτό το οποίο εκτελείται η εντολή, μεταξύ 0 και 59.

  • h: η ώρα την οποία εκτελείται η εντολή, μεταξύ 0 και 23.

  • dom: η ημέρα του μήνα την οποία εκτελείται η εντολή.

  • mon: ο μήνας τον οποίο εκτελείται η εντολή, μεταξύ 1 και 12.

  • dow: η ημέρα της εβδομάδας την οποία εκτελείται η εντολή, μεταξύ 0 και 7. Η Κυριακή μπορεί να γραφτεί χρησιμοποιώντας 0 ή 7, και οι δύο τιμές είναι έγκυρες.

  • command: η εντολή που θα εκτελεστεί.

Για να προσθέσετε ή να τροποποιήσετε καταχωρήσεις σε ένα αρχείο crontab, θα πρέπει να χρησιμοποιηθεί η εντολή crontab -e. Επίσης, το περιεχόμενο ενός αρχείου crontab μπορεί να προβληθεί χρησιμοποιώντας την εντολή crontab -l.

Για να εκτελέσετε το σενάριο εντολών backup.sh που υπάρχει παραπάνω χρησιμοποιώντας το cron, πληκτρολογήστε το ακόλουθο σε ένα τερματικό:

sudo crontab -e
[Σημείωση]

Χρησιμοποιώντας το sudo με την εντολή crontab -e, επεξεργάζεστε το crontab του χρήστη root. Αυτό είναι απαραίτητο αν δημιουργείτε αντίγραφα ασφαλείας καταλόγων που έχει πρόσβαση μόνο ο χρήστης root.

Προσθέστε την ακόλουθη καταχώρηση στο αρχείο crontab:

# m h dom mon dow   command
0 0 * * * bash /usr/local/bin/backup.sh

Το σενάριο εντολών backup.sh θα εκτελείται τώρα κάθε μέρα στις 12:00 π.μ.

[Σημείωση]

Το σενάριο εντολών backup.sh θα πρέπει να αντιγραφεί στον κατάλογο /usr/local/bin/ για να μπορεί να εκτελείται αυτή η καταχώρηση σωστά. Το σενάριο εντολών μπορεί να υπάρχει οπουδήποτε στο σύστημα αρχείων· απλά προσαρμόστε την διαδρομή του σεναρίου κατάλληλα.

Για περισσότερο αναλυτικές επιλογές του crontab, δείτε “Αναφορές”.

Επαναφορά από το αρχείο

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

  • Για να δείτε μια λίστα των περιεχομένων του αρχείου, σε ένα τερματικό, πληκτρολογήστε:

    tar -tzvf /mnt/backup/υπολογιστής-Δευτέρα.tgz
    
  • Για να επαναφέρετε ένα αρχείο από το συμπιεσμένο αρχείο σε έναν διαφορετικό κατάλογο, πληκτρολογήστε:

    tar -xzvf /mnt/backup/υπολογιστής-Δευτέρα.tgz -C /tmp etc/hosts
    

    Η επιλογή -C στο tar, κατευθύνει τα αποσυμπιεσμένα αρχεία στον προσδιορισμένο κατάλογο. Το παραπάνω παράδειγμα θα αποσυμπιέσει το αρχείο /etc/hosts στο /tmp/etc/hosts. Το tar επαναδημιουργεί τη δομή καταλόγων που περιέχει.

    Επίσης, παρατηρήστε πως η αρχική "/" δεν συμπεριλαμβάνεται στη διαδρομή του αρχείου που θα επαναφερθεί.

  • Για να επαναφέρετε όλα τα αρχεία που υπάρχουν στο συμπιεσμένο αρχείο, πληκτρολογήστε τα ακόλουθα:

    cd /
    sudo tar -xzvf /mnt/backup/υπολογιστής-Δευτέρα.tgz
    
[Σημείωση]

Αυτό θα αντικαταστήσει τα τρέχοντα αρχεία στο σύστημα αρχείων.

Αναφορές

  • Για περισσότερες πληροφορίες σχετικά με τα σενάρια εντολών κελύφους, δείτε τον οδηγό προχωρημένων σεναρίων εντολών Bash

  • Το βιβλίο Teach Yourself Shell Programming in 24 Hours είναι διαθέσιμο στο διαδίκτυο και είναι μια σπουδαία πηγή για σενάρια εντολών κελύφους.

  • Η σελίδα Wiki του CronHowto περιέχει λεπτομέρειες για προχωρημένες επιλογές του cron.

  • Δείτε το εγχειρίδιο του GNU tar για περισσότερες επιλογές του tar.

  • The Wikipedia Backup Rotation Scheme article contains information on other backup rotation schemes.

  • Το σενάριο εντολών κελύφους χρησιμοποιεί το tar για να δημιουργήσει το αρχείο, αλλά υπάρχουν πολλά άλλα εργαλεία γραμμής εντολών που μπορούν να χρησιμοποιηθούν. Για παράδειγμα:

    • cpio: χρησιμοποιείται για την αντιγραφή αρχείων προς και από συμπιεσμένα αρχεία.

    • dd: μέρος του πακέτου coreutils. Ένα χαμηλού επιπέδου (low level) εργαλείο που μπορεί να αντιγράψει δεδομένα από μια μορφή σε κάποια άλλη.

    • rsnapshot: ένα εργαλείο στιγμιοτύπων που χρησιμοποιείται για τη δημιουργία αντιγράφων ολόκληρου του συστήματος.