Последнее время стали популярны посты на тему бекапа. Продолжу и я эстафету под девизом "Много бекапов хороших и разных".
Сам я давно пользуюсь rsnapshot для бекапа серверов, да и не только. Для тех, кто не в курсе, что оно такое - это базирующаяся на rsync утилита на Perl для создания резервных копий. Особенностью является ориентация на создание полных снапшотов файловой системы через заданный интервал времени, для экономии места на диске, не изменившиеся с момента первого бэкапа файлы линкуются как hard link.
Я работаю на Ubuntu 11.10 на ноутбуке и потому статья будет описывать метод бекапа этого самого ноутбука на внешний USB HDD, который не постоянно подключен, а подключается лишь периодически. В момент подключения и будет запускаться скрипт для бекапирования системы.
Итак, начнем. Для начала подготовим внешний винт для создания на нем бекапов. Запускаем
1
|
$
sudo
tail
-
f
/
var
/
log
/
syslog
|
grep
"[sd"
|
и подключаем винт по USB. Главное - понять каким устройством подключился наш диск, в моем случае - sdb. На этом винте можно использовать любую линуксовую файловую систему. Я использую по старой привычке ext3:
1
2
3
|
$
sudo
umount
/
dev
/
sdb1
$
sudo
mkfs
.ext3
/
dev
/
sdb1
$
sudo
lsusb
-
v
|
Вывод последней команды будет ооочень длинным, но нам надо найти примерно следующее:
1
2
3
4
5
6
|
Bus
001
Device
004
:
ID
04fc
:
0c25
Sunplus
Technology
Co
.
,
Ltd
SATALink
SPIF225A
Device
Descriptor
:
.
.
.
idVendor
0xYYYY
Sunplus
Technology
Co
.
,
Ltd
idProduct
0xXXXX
SATALink
SPIF225A
.
.
.
|
Эти "XXXX" и "YYYY" нам надо где-то записать или запомнить. Теперь винт можно отключить, пока мы подготовим конфиги rsnapshot для работы. Для начала устанвливаем его:
1
|
$
sudo
apt
-
get
install
rsnapshot
|
Теперь настраиваем конфиг:
1
|
$
sudo
nano
/
etc
/
rsnapshot
.conf
|
Меняем snapshot_root на /media/backup и указываем количество бекапов в строке daily. Что мы хотим бекапить, указываем строками вида:
1
2
3
4
|
backup
/
home
/
user
/
Sync
localhost
/
backup
/
home
/
user
/Картинки
localhost
/
backup
/
home
/
user
/Картинки_RAW
localhost
/
backup
/
home
/
user
/Видео
localhost
/
|
Остается автоматизировать запуск rsnapshot при подключении HDD.
Создаем файл /etc/udev/rules.d/94-usb-backup.rules с содержимым:
1
2
3
|
--
/
etc
/
udev
/
rules
.
d
/
94
-
usb
-
backup
.
rules
--
SUBSYSTEM
==
"block"
,
ENV
{
DEVTYPE
}
==
"partition"
,
SYSFS
{
idProduct
}
==
"XXXX"
,
SYSFS
{
idVendor
}
==
"YYYY"
,
SYMLINK
+=
"backup"
,
RUN
+=
"/usr/local/bin/usb-backup.sh"
|
Вот тут нам и нужны те цифро-буквы "XXXX" и "YYYY". Вписываем то, что соответствует нашему HDD и рестартуем udev:
1
|
$
sudo
service
udev
restart
|
Более подробно настройка udev рассмотрена по этой ссылке.
Осталось подготовить скрипт /user/local/bin/usb-backup.sh:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
#!/bin/bash
export
XAUTHORITY
=
/
home
/
user
/
.
Xauthority
export
DISPLAY
=
:
0.0
timeout
=
5000
notify
-
send
-
i
/
usr
/
share
/
pixmaps
/
usbhdd
.
png
-
t
$
timeout
Backup
"Found backup device"
### Монтируем устройство
mkdir
/
media
/
backup
mount
-
t
ext3
/
dev
/
backup
/
media
/
backup
chmod
777
/
media
/
backup
### Проверяем на наличие свежего бекапа
DATE
=
`
date
+
%
Y
-
%
m
-
%
d
`
OLDDATE
=
`
ls
-
l
--
time
-
style
=
+
%
Y
-
%
m
-
%
d
/
media
/
backup
|
grep
daily
.
0
|
awk
`
{
print
$
6
}
`
`
if
[
[
"$DATE"
==
"$OLDDATE"
]
]
;
then
notify
-
send
-
t
$
timeout
-
i
/
usr
/
share
/
pixmaps
/
usbhdd
.
png
Backup
"Backup alredy exists. Exiting."
### Размонтируем устройство и выходим
umount
/
media
/
backup
rmdir
/
media
/
backup
exit
1
;
fi
### Создаем бекап
rsnapshot
daily
### Unmounting device
umount
/
media
/
backup
rmdir
/
media
/
backup
notify
-
send
-
i
/
usr
/
share
/
pixmaps
/
usbhdd
.
png
-
t
$
timeout
Backup
"Backup finished"
exit
0
|
В первой строке скрипта "user" исправьте на свой логин в системе. Так же можно положить свою иконку на место /usr/share/pixmaps/usbhdd.png для более красивого сообщения.
При подключении устройства скрипт проверяет наличие сегодняшнего бекапа и если он есть, то просто выходит. Если его нет - создается новый снепшот указанных данных.
Надеюсь кому-то это будет полезно.
Источник: habrahabr.ru.