Короткий обзор резервного копирования 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
if [[ ! -d "/mnt/backup" ]];then mkdir -p /mnt/backup;fi
cd /mnt/backup
sudo tar cvpzf /mnt/backup/backup_$(date +%Y_%m_%d_%H_%M).tgz --exclude=/proc --exclude=/lost+found --exclude=/mnt/backup/ --exclude=/swapfile --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
Добрый день!
В вашем скрипте ошибки, не будет работать.
Ключ исключения пишется через два тире –exclude=
При копировании в консоль, почему то одно тире удаляется.
Так же у вас мало исключений и можно объединить их
И еще, если вы указываете исключить старый бэкап, то надо с полной маской указывать.
Примерно вот так –exclude={“/dev/*”,”/proc/*”,”/sys/*”,”/tmp/*”,”/run/*”,”/mnt/*”,”/media/*”,”/lost+found”,”/backup_`date +%Y.%m.%d_%H_%M`.tgz”}
Добрый день. WordPress сломал код. Поправил.