LINUX.ORG.RU

Простой скрипт для бэкапа системы


0

2

Доброго вечера.
Хотел бы поделиться скриптом для бэкапа системы с использованием rsync:

#!/bin/sh
#backup_system.sh

# (C) Sakalou Aliaksei <nullbsd at gmail dot com>

# path for backup
path=/mnt/work/distrib/backup/system

if [ `whoami` != "root" ]; then
	echo "Run 'sudo $0'"
	exit
fi

dir=$path/`date +"%F"`
if [ ! -d $dir ]; then
	mkdir $dir || exit
fi 
rsync -auxvS / $dir 

Перед использованием определяем переменную $path, где будут храниться резервные копии системы, ну и запускаем всё это дело через sudo.
Бэкапы будут храниться в $path/YY.MM.DD
Хотелось бы заметить, что за смонтированные ФС (/mnt, /media, etc...) переживать не стоит, т.к. ключ '-x' исключает их из списка синхронизации.

Спасибо за внимание.
Предложения принимаются.

★★★★★

неплохо бы догадаться не бекапить /tmp /var/apt/cache (и прочие кеши и мусорки)

сжимать и еще дату лучше со временем писать `date +%Y.%m.%d_%H-%M-%S`

kifer ()
Ответ на: комментарий от kifer

а вообще самое бесполезное это бекапить /, ибо там восполнимые данные - достаточно пеерставить дистр. А вот базыданных, база svn и прочие могут лежать денить там где твой rsync не плезет

kifer ()

Ну собственно да. Прикрутить список путей, которые будут бэкапиться и научить накатывать бэкапы обратно.

Nervous ★★★★★ ()
Ответ на: комментарий от kifer

Да, --exclude можно добавить.

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

soko1 ★★★★★ ()

Что-то как-то больно уныло. Смахивает на типовой пример из книжек по шеллу.

Хотелось бы заметить, что за смонтированные ФС (/mnt, /media, etc...) переживать не стоит, т.к. ключ '-x' исключает их из списка синхронизации.

У ровных пацанов сюда же попадут /usr, /var, /tmp, /usr/local, /opt, /srv... Нутыпонел, да?

GotF ★★★★★ ()
Ответ на: комментарий от Nervous

>и научить накатывать бэкапы обратно

Изначально такой цели не преследовал, т.к. если что-то и приходится восстанавливать (а такое довольно редко бывает), то делаю это руками и не глобально, а частями (например, только что нибудь из /home).
Но если надо - могу сделать.

soko1 ★★★★★ ()
Ответ на: комментарий от GotF

Что-то как-то больно уныло. Смахивает на типовой пример из книжек по шеллу.

Я не для онанирования код пишу, а для результата

У ровных пацанов сюда же попадут /usr, /var, /tmp, /usr/local, /opt, /srv... Нутыпонел, да?

Неровным я себя не считаю, т.к. делать сей изврат на домашней тачке бессмысленно.

Для «ровных» можно сделать и такой вариант:

#!/bin/sh
# path for backup
path=/mnt/work/distrib/backup/system

if [ `whoami` != "root" ]; then
echo "Run 'sudo $0'"
exit
fi

if [ $# -ne 1 ]; then
echo "<name_part>" #/var, /usr/,...
exit
fi

dir=$path/`date +"%F"`
if [ ! -d $dir ]; then
mkdir $dir || exit
fi 
rsync -auxvS $1 $dir 
soko1 ★★★★★ ()
Ответ на: комментарий от Quark_p

Пробовал конечно =)

Как-то так:

%sudo rsync -auxS $dir /mnt #где mnt - смонтированный корень "будущей" системы

soko1 ★★★★★ ()
Ответ на: комментарий от soko1

Я это и имел ввиду. Еще бы хорошо если бы из скрипта убиралась/подключалась опция -x rsync

Moses ()

я обычно в скриптах пишу полные опции, в целях самодокументирования. А то потом через полгода будешь скрипт править, придётся снова в man лезть, смотреть, что за опции rsync'у передаются.

gorilych ★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.