Резервное копирование Ubuntu
Размещено: 13-04-2015, 13:46 | Просмотров: 5052 | Комментариев: 0
Короткий обзор резервного копирования Ubuntu постараюсь пойти от простого к сложному, начиная от простого резервного копирования все системы 1 командой и заканчивая резервным копированием Ubuntu в автоматическом режиме без нашего участия. А так же дополню это все облегченным способом при резервном копировании Ubuntu через панель администрирования сервера Webmin.
Для удобства работы с Linux Ubuntu server устанавливаем mc - аналог Norton Commander:
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install mc

Так же есть альтернативный способ в Windows, за счет применения программы WinSCP, так же похож на Norton Commander разница лишь в том, что работает она исключительно по сети, а так же производит подключение через SSH протокол. Обратите внимание, что при подключении вы должны быть root пользователем, а на сервере заранее должен быть активирован и установлен супер пользователь (прописан пароль).

Простое резервное копирование Ubuntu

Для того что бы выполнить резервное копирование всей системы, достаточно выполнить всего одну команду:
sudo tar cvpzf /backup.tgz --exclude=/proc --exclude=/lost+found --exclude=/backup.tgz --exclude=/mnt --exclude=/sys /

А теперь распишу что означает это команда. С правами суперпользователя (sudo) создаём тарбол (tar с ключём c) и архивируем его архиватором gz (ключ z). При этом с помощью ключа --exclude исключаем из архива системные директории и файлы устройств и, конечно же, сам архив (чтобы он рекурсивно не начал паковаться сам в себя). В итоге, получаем в корне наш полный архив системы в файле backup.tgz
Как его потом развернуть? Ну, во-первых, нужна будет всё-таки работающая система. Например, можно провести «читсую» установку (или же загрузиться с LiveCD). Будем считать, что у нас есть работающая система, в которой мы хотим развернуть наш архив. Хватит тоже одной команды:
tar xvpfz /backup.tgz -C /

Благодаря ключику p они сохраняются в исходном состоянии и правами.
Поскольку заранее не известно какого типа у Вас данные и, соответсвенно, насколько плотно они сожмутся. Как минимум вы должны иметь на диске 50% свободного места, для ее проверки выполните седующую команду:
df

Как образец:
root@server:~# df
Файловая система 1K-блоков использовано, Разрешено использовать% смонтирована на
/dev/mapper/server-root
474881160 3791780 446966808 1% /
none 954556 200 954356 1% /dev
none 961680 0 961680 0% /dev/shm
none 961680 88 961592 1% /var/run
none 961680 0 961680 0% /var/lock
none 474881160 3791780 446966808 1% /var/lib/ureadahead/debugfs
/dev/sda1 233191 58548 162202 27% /boot

В реальности же, если у вас не лежит множество других архивов на диске и всяких фильмов с прочими медиа, то должно хватить и 30%.

Автоматическое резервное копирование Ubuntu

Создаем файл backup.save в корне, в котором будет скрип для резервного копирования:
sudo nano /backup.save

Жмем Ctrl+O для сохранения и Ctrl+X для выхода
Создаем папку /mnt/backup в которую будем делать резервную копию системы:
sudo mkdir /mnt/backup

Делаем наш файл backup.save исполняемым:
sudo chmod a+x /backup.save

Заходим в mc (для удобства):
sudo mc

Далее идем в корень и открываем наш файл нажатием F4 и вставляем в наш backup.save файл следующий код (нажав Shift+Insert):
#!/bin/bash
cd /mnt/backup
sudo tar cvpzf /mnt/backup/backup_`date +%Y.%m.%d_%H_%M`.tgz --exclude=/proc --exclude=/lost+found --exclude=/mnt --exclude=/sys / >> /dev/null 2>&1

Этот код создает архив дата_и_время_создания.tgz в папке /mnt/backup/ исключая папки: proc, lost+found, mnt, sys
Жмем F2 для сохранения и F10 для выхода. Проверяем работоспособность просто запустив наш файл в mc нажатием Enter.
Если все сделали правильно, то в папке /mnt/backup появится наш файл. Периодически заходя в эту папку мы увидим как меняется размер файла. Время резервного копирования естественно зависит от количества информации на сервере и его скорости.
Для перехода в mc в терминал жмем Ctrl+O и обратно, а так же не забываем про Меню в mc - F9

Автоматическое резервное копирование Ubuntu на другой диск или по сети

Примечание
Сеть должна быть настроена
Винчестер, на который будем делать резервную копию, должен быть подготовлен

Подготавливаем жесткий диск

Смотрим наш жесткий диск и монтируем в /mnt/hdd:
sudo fdisk -l
Диск /dev/sda: 40.0 ГБ, 40020664320 байт
255 heads, 63 sectors/track, 4865 cylinders
Units = цилиндры of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0000c5e7

Устр-во Загр Начало Конец Блоки Id Система
/dev/sda1 * 1 4661 37431296 83 Linux
/dev/sda2 4661 4866 1648641 5 Расширенный
/dev/sda5 4661 4866 1648640 82 Linux своп / Solaris

Диск /dev/sdb: 20.0 ГБ, 20020396032 байт
255 heads, 63 sectors/track, 2434 cylinders
Units = цилиндры of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xd5df5ded

Устр-во Загр Начало Конец Блоки Id Система
/dev/sdb1 1 2434 19551073+ 83 Linux
root@linux:/etc#

Монтируем:
sudo mount /dev/sdb1 /mnt/hdd

Чтобы после перезагрузки сервера hdd автоматом монтировался, допишем строку в файл /etc/fstab:
sudo nano /etc/fstab
[...]
/dev/sdb1 /mnt/hdd ext4 rw,user,auto 0 0

Ctrl+O для сохранения и Crtl+X для выхода

Подготавливаем сетевую папку

sudo mkdir /mnt/win
sudo mount //192.168.0.1/mydoc /mnt/win -o guest,rw,iocharset=utf8

Если для доступа к сетевой папке требуется логин и пароль:
sudo mount //192.168.0.1/mydoc /mnt/win -o user=ваш_логин,password=ваш_пароль,iocharset=utf8

Если имя сетевой папки содержит пробел, то необходимо написать команду следующим образом:
sudo mount "//192.168.0.1/my doc" /mnt/win -o user=ваш_логин,password=ваш_пароль,iocharset=utf8

Для того что бы размонтировать папку выполните команду:
sudo umount /mnt/win

Я не стал прописывать в /etc/fstab автомонтирование сетевой папки. Я буду монтировать ее только тогда, когда будет запускаться скрипт на резервное копирование.
Создаем файл backup.save в корне системы и делаем его исполняемым:
#!/bin/bash
cd /mnt/hdd
sudo tar cvpzf /mnt/hdd/backup_`date +%Y.%m.%d_%H_%M`.tgz --exclude=/proc -- exclude=/lost+found --exclude=/mnt --exclude=/sys / >> /dev/null 2>&1
sudo mount //192.168.0.1/mydoc /mnt/win -o user=ваш_логин,password=ваш_пароль,iocharset=utf8
cd /mnt/win
sudo tar cvpzf /mnt/win/backup_`date +%Y.%m.%d_%H_%M`.tgz --exclude=/proc - - exclude=/lost+found --exclude=/mnt --exclude=/sys / >> /dev/null 2>&1

Жмем Ctrl+O для сохранения и Ctrl+X для выхода. Сделаем его исполняемым:
sudo chmod a+x /backup.save

Для проверки запустим его и проверим его работу. Для создания запуска по расписанию выполним следующее:
sudo nano /home/123

название файла и его местонахождения в данном случае роли не играет
В файл пропишем следующее:
SHELL=/bin/bash
MAILTO=user
00 21 * * * /backup.save

Далее выполним:
sudo crontab /home/123

После этого в каталоге /var/spool/cron/crontabs/ будет создан файл "root" примерно с таким содержимым:
# DO NOT EDIT THIS FILE - edit the master and reinstall.
# (/home/user/test installed on Mon Mar 29 02:31:34 2004)
# (Cron version -- $Id: crontab.c,v 2.13 1994/01/17 03:20:37 vixie Exp $)
SHELL=/bin/bash
MAILTO=user
00 21 * * * /backup.save

еперь наш скрипт backup.save будет автоматически запускаться каждый день в 21:00.
Если надо запускать в другое время, то просто меняем строку 00 21 * * * /backup.save
Пример:

* * * * * выполняемая команда
- - - - -
| | | | |
| | | | ----- День недели (0 - 7) (Воскресенье =0 или =7)
| | | ------- Месяц (1 - 12)
| | --------- День (1 - 31)
| ----------- Час (0 - 23)
------------- Минута (0 - 59)

Для примера пару шаблонов:
# каждый рабочий день в 22:00
0 22 * * 1-5 /backup.save
# выполнять 1 числа каждого месяца в 14 часов 15 минут
15 14 1 * * /backup.save

Восстановление системы из резервной копии

Сохраняем каталог boot нашей чистой системы в папку /mnt/
Туда же сохраняем файл fstab из /etc/
распаковываем архив поверх чистой системы
sudo tar xvzpf /mnt/backup/1.tgz -C /

Далее копируем с заменой нашу сохраненную папку boot из /mnt/boot в корень системы с заменой
И fstab из /mnt/ тоже копируем в /etc/ с заменой
Перезагружаем систему
sudo reboot


Аналогичное резервное копирование Ubuntu в Webmin

Я считаю это самый простой способ выполнения как резервного копирования, так и восстановление. Для начала у Вас уже должна быть установлена панель управления сервером Webmin (Установка Webmin на Ubuntu server) Заходим в пункт резервного копирования файловой системы Система - Резервное копирование.
Резервное копирование Ubuntu

На данном изображении я показал уже созданную команду для резервного копирования всей системы. Для начала создания такой команды мы укажим наш каталог, так как мы копируем всю систему, то указываем корень " / ", и нажимаю кнопку "Добавить для резервного копирования каталог", открывшееся окно заполняем следующим образом. Т.к. я использовал удаленный FTP сервер, то добавил сервер имя пользователя и пароль для доступа а так же указал каталог и имя файла в который будет происходить резервное копирование Ubuntu.
Резервное копирование Ubuntu

Кнопка "Сохранить и приступить к резервному копированию" приведет к созданию правила и немедленного его исполнения. Результат статуса резервного копирования будет выглядеть следующим образом:
Резервное копирование Ubuntu

Расписание на выполнение данного правила я вам посоветовать не могу, в своем личном случае я выполняю резервное копирование в ручную по мере надобности, а вот резервные копии сайтов и настроек системы выполняются автоматически каждый день, раз в неделю и раз в месяц, Резервные копии сайтов включают в себя как сами файлы сайта так и их базы данных.