Резервное копирование в Linux (BASH + Cron)

Дата публикации: 17-05-2011 | Автор: MelfisFettel | Рубрика: Ubuntu Server

Резервное копирование в Linux через cronРезервное копирование на любом сервер является крайне важной задачей. Будь то каталог с важными документами, почта пользователей или база данных бухгалтерии предприятия (1с к примеру.) Предположим однажды, произошел сбой электропитания, или не сознательный пользователь удалил заветную папку с базой, или иными важными документами. Восстановить базу данных не удалось, копии соответственно нет. Варианта два: Либо вас уволят, либо простят, но вы всегда будете делать резервную копию. А уж тем более если есть ресурсы на «избыточность» то и делать «зеркало» вашей копии. Итак, сегодня создадим скрипт на bash и добавим выполнение скрипта по cron. Что нам для этого понадобится:

Пишем скрипт на BASH

Сам скрипт не представляет собой ничего сверхъестественного и сложного. Он будет брать указанную вами папку, архивировать ее при помощи tar и делать резервную копию копии, т.е. «зеркалировать».

1
touch /home/username/BackAndCompressDir 
touch /home/username/BackAndCompressDir 

Напишем в нем следующее:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/bin/bash
 
SOURCE_DIRECTORY="/home/melfis/Share"                           #Что будем сохранять
DIRECTORY_TO_BACKUP="/home/melfis/backup1/"                 #Куда положить бэкап
COPY_DIR="/home/melfis/backup2"                  #Зеркалирование бэкапа
LOG_FILE="/var/log/backup_test.log"                     #Лог файл
 
function Create_backup()
{
  tar -czf ${DIRECTORY_TO_BACKUP}-`date "+%Y-%m-%d"`.tar.gz $SOURCE_DIRECTORY
  cp ${DIRECTORY_TO_BACKUP}-`date "+%Y-%m-%d"`* $COPY_DIR
  echo $?
  echo "`date` Резервное копирование директории $SOURCE_DIRECTORY завершено." >> $LOG_FILE
}
 
if [[ ! -d $COPY_DIR || ! -d $DIRECTORY_TO_BACKUP ]]; then
        echo "`date` Не обнаружена директория для бекапа. Создание." >> $LOG_FILE
    mkdir -p $DIRECTORY_TO_BACKUP 
        mkdir -p $COPY_DIR
fi
        Create_backup
  
 
############################################
#!/bin/bash

SOURCE_DIRECTORY="/home/melfis/Share"                           #Что будем сохранять
DIRECTORY_TO_BACKUP="/home/melfis/backup1/"                 #Куда положить бэкап
COPY_DIR="/home/melfis/backup2"                  #Зеркалирование бэкапа
LOG_FILE="/var/log/backup_test.log"                     #Лог файл

function Create_backup()
{
  tar -czf ${DIRECTORY_TO_BACKUP}-`date "+%Y-%m-%d"`.tar.gz $SOURCE_DIRECTORY
  cp ${DIRECTORY_TO_BACKUP}-`date "+%Y-%m-%d"`* $COPY_DIR
  echo $?
  echo "`date` Резервное копирование директории $SOURCE_DIRECTORY завершено." >> $LOG_FILE
}

if [[ ! -d $COPY_DIR || ! -d $DIRECTORY_TO_BACKUP ]]; then
        echo "`date` Не обнаружена директория для бекапа. Создание." >> $LOG_FILE
	mkdir -p $DIRECTORY_TO_BACKUP 
        mkdir -p $COPY_DIR
fi
        Create_backup
  

############################################

Сделаем наш скрипт исполняемым:

1
sudo chmod +x /home/username/BackAndCompressDir
sudo chmod +x /home/username/BackAndCompressDir

или

1
sudo chmod 755 /home/username/BackAndCompressDir
sudo chmod 755 /home/username/BackAndCompressDir

Запускаем скрипт по Cron

Скрипт готов. Осталось запускать его в определенное время. В *nix системах существует такая волшебная вещь как cron. (Тот-же планировщик задач Windows). Cron позволяет осуществить неоднократный запуск заданий. То есть задание можно запустить в определенный день, час, минуту, или запускать через определенный промежуток времени. Ему можно скормить скрипт, команду или даже целую программу на «выполнение». Например, запустить или остановить сервер PostgreeSQL. Наша задача запускать наш скрипт от привилегированного пользователя root. Для создания файла заданий будем использовать crontab. Файлы заданий crontab содержат инструкции для демона cron, который запустит задание(я) описанное в файле. Создадим каталог и файл наших заданий:

1
2
sudo mkdir /home/username/cront
sudo touch /home/username/BackUpTask
sudo mkdir /home/username/cront
sudo touch /home/username/BackUpTask

Теперь отредактируем файл BackUpTask любым текстовым редактором и напишем туда вот такой текст:

1
2
SHELL=/bin/bash
59 23 * * * /home/username/BackAndCompressDir 
SHELL=/bin/bash
59 23 * * * /home/username/BackAndCompressDir 

Запускать наш скрипт каждый месяц, каждый день в 23 часа 59 минут.

Запускаем скрипт от root

Используем следующие команды:

1
sudo crontab /home/username/cront/BackUpTask
sudo crontab /home/username/cront/BackUpTask

Вот и все. Проверить добавилось ли задание в cron можно следующей командой:

1
sudo  crontab –l
sudo  crontab –l

А очистить список заданий:

1
sudo crontab –r
sudo crontab –r

Помните что если вы вводите команду crontab через sudo то редактируете задачи cron именно пользователя root. Свои задачи можно посмотреть используя те же команды но бeз sudo.

Понравилась статья? Расскажи друзьям:


Комментариев (2)

Добрый день, как реализуется копирование всей системы? Не отдельные папки, а образ рабочей системы.

Загрузитесь в однопользовательском режиме, примонтируйте root-раздел в консоли
mount -o remount,ro /dev/sda1 (Вместо sda1 ваш подключенный диск), примонтируйте внешний жесткий диск(например sdb1 Почитать про монтриование можете тут), mount /dev/sdb1 /mnt и копируйте ваш раздел на диск dd if=/dev/sda1 of=/mnt/sda1.bak bs=1024

А вообще для этих целей лучше использовать что ни будь типа Acronis или Paragon Partition Manager (Просто великолепно работает с EXT разделами).

Обсудить