Главная | Контакты



Главная > Операционные системы > UNIX > BSD > FreeBSD

Несколько примеров скриптов создания backup системы FreeBSD

FreeBSD умеет делать дампы примонтированных разделов из рабочей системы в файл.

По этому я решил делать бэкапы именно так - много места не занимает (пустое место не дампит есс-но)

И так - приступаем к созданию бэкапа

Получаем список примонтированного...

# df -h
Filesystem	Size	Used	Avail	Capacity Mounted on
/dev/ad0s1a	48G	307M	44G	1%	/
devfs		1.0K	1.0K	0B	100%	/dev
/dev/ad0s1e	48G	16K	45G	0%	/tmp
/dev/ad0s1f	302G	4.6G	273G	2%	/usr
/dev/ad0s1d 	48G	118M	44G	0%	/var
devfs		1.0K	1.0K	0B	100%	/var/named/dev 

Получили список примонтированного... Сохраним его как инфо тхт (что бы знать что вообще было - этот файл приложим к бэкапу)

# df -h > info.txt 
Теперь сделаем дамп примонтированного...

# sudo dump -0 -L -f - /dev/ad0s1a > root.img
# sudo dump -0 -L -f - /dev/ad0s1e > tmp.img
# sudo dump -0 -L -f - /dev/ad0s1f > usr.img
# sudo dump -0 -L -f - /dev/ad0s1d > var.img 
Визуально смотрим итог что все удачно!

Заливаем бэкап на наш сервак где хранятся бэкапы.

(Предположим мы создавали папку backup и все складывали в нее - значит у нас в этой папке только бэкапные файлы
В папке куда лили бэкап делаем (есс-но на конечном серваке такой путь должен быть) (комманда при условии что там только файлы для переноса и ничего более)
# scp * USER_NAME@Ip_FOR_BACKUP_SERVER:/data/ftp/__IP___FREEBSD___/dump 

Там на серваке распределено все по ипам - в данном случае по внешнему ипу - т.е. бэкап будет хранится в директории которая названа по внешнему ипу сервера

Восстановение из бэкапа

А вот разбить новый hdd диск придется ручками (вспоминаем df -h > info.txt)....
Диск разбиваем при помощи /stand/sysinstall, можно руками - но это не для слабонервных=).
Не забываем сделать раздел активным (загрузочным)!
Прикол в следующем, если для будущего корневого раздела, поставить точку монтирования отличную от "/" то он не присваивает разделу букву "a".
Нужно проделать такие комбинации - установить при создании раздела точку монтирования "/", затем поменять её клавишей "M".
Потом второй прикол, то, что если сразу все разделы настругать, то он не разобьёт диск, ругнётся на какую-то ошибку.
Посему, записываем изменения буковкой "W", выходим, заходим снова в /stand/sysinstall и делаем остальные разделы.

Восстановить данные можно при помощи другой программы - restore

Теперь монтируемся и восстанавливаем.
Пример восстановления /usr

# cat /home/backup/usr.2009.05.06.img | ( cd /usr ; restore -rf - ) 

Есть еще вариант - ставим на хард новую фрю (и при установке получаем загрузочный разбитый диск (или в процессе установки разбиваем опять таки))
И потом в эту фрю восстанавливаем по аналогии с вышенаписанным но не забываем что не надо грузиться с того диска на который восстанавливаем!

Справочная информация

dump -0 -L -f - /dev/da0s1a > /home/backup/root.`date +%Y.%m.%d`.img - это если у нас нет RAID-а(зеркала) (малоли есть разброс какой-то файлов)
-L говорит о том, что это "живая файловая система" т.е. она смонтирована в режиме запись/чтение
-f запись копии в файл (по умолчанию dump пишет данные на стример - это такой накопитель внешний для резервных копий, нам нужно в файл, поэтому опцию нужно указать)

Можно еще делать так dump -0 -L -f - /usr - это если у нас есть RAID(зеркало) (малоли есть разброс какой-то файлов)
Внимание! Существующие данные при восстановлении уничтожаются! Поэтому экспериментируйте осторожно. Важно освоить этот простой механизм резервного копирования и восстановления в спокойной, штатной обстановке, чтобы потом быть уверенным в том, что вы все делаете правильно, и ваши резервные копии действительно работают.

SHELL Script для этого дела можно сделать примерно таким

#!/bin/sh
WFS="/backup"
`/bin/mkdir -p ${WFS}/$(date +%Y-%m-%d)`
# Backup USR FS
`/sbin/dump -L -0auf ${WFS}/$(date +%Y-%m-%d)/usr_fs.dump /usr`
# Backup HOME FS
`/sbin/dump -L -0auf ${WFS}/$(date +%Y-%m-%d)/home_fs.dump /home`
# Backup VAR FS
`/sbin/dump -L -0auf ${WFS}/$(date +%Y-%m-%d)/var_fs.dump /var`
# Backup TMP FS
`/sbin/dump -L -0auf ${WFS}/$(date +%Y-%m-%d)/tmp_fs.dump /tmp`
# Backup ROOT FS
`/sbin/dump -L -0auf ${WFS}/$(date +%Y-%m-%d)/root_fs.dump /`

WFS = путь к папке куда кладем бэкапы.
Скрипт есс-но правим под себя.
Работа с утилитой restore предельно проста. Для восстановления данных с ее помощью следует перейти на нужную папку (точку монтирования файловой системы) и указать команде, из какого файла разворачивать бекап. Например:

# cd /mnt/servers-fs/usr
# restore rf /mnt/ntfs-backups/bsd-fs/2008-01-03/usr_fs.dump

Вообще, данную процедуру можно производить прямо на "живой" системе, на "лету" меняя файлы

Мой sh скриптик

#!/bin/sh
BACKUP_FOLDER_LOCAL="/usr/home/vch54ti/backup"
BACKUP_FOLDER_REMOTE="/data/ftp/xxx.xxx.xxx.xxx/dump"
IP_REMOTE_SERVER="xxx.xxx.xxx.xxxx"

/bin/mkdir -p ${BACKUP_FOLDER_LOCAL}/$(date +%Y-%m-%d)
df -h > ${BACKUP_FOLDER_LOCAL}/$(date +%Y-%m-%d)/info.txt
sudo /sbin/dump -0 -L -f - /dev/ad0s1a > ${BACKUP_FOLDER_LOCAL}/$(date +%Y-%m-%d)/root_fs.dump
sudo /sbin/dump -0 -L -f - /dev/ad0s1e > ${BACKUP_FOLDER_LOCAL}/$(date +%Y-%m-%d)/tmp_fs.dump
sudo /sbin/dump -0 -L -f - /dev/ad0s1f > ${BACKUP_FOLDER_LOCAL}/$(date +%Y-%m-%d)/usr_fs.dump
sudo /sbin/dump -0 -L -f - /dev/ad0s1d > ${BACKUP_FOLDER_LOCAL}/$(date +%Y-%m-%d)/var_fs.dump

echo "scp -r ${BACKUP_FOLDER_LOCAL} Vch54ti@${IP_REMOTE_SERVER}:/${BACKUP_FOLDER_REMOTE}"
scp -r ${BACKUP_FOLDER_LOCAL} Vch54ti@${IP_REMOTE_SERVER}:/${BACKUP_FOLDER_REMOTE}

echo "NOW SCRIPT DELETE ${BACKUP_FOLDER_LOCAL}/$(date +%Y-%m-%d)"
/bin/rm -rf ${BACKUP_FOLDER_LOCAL}/$(date +%Y-%m-%d)

Что делает этот скрипт бэкапа:
У меня сделано так:
- В директории BACKUP_FOLDER_LOCAL лежит наш sh скриптик
- Скрипт бэкапит через dump заданный файловые системы
- Складывает их в BACKUP_FOLDER_LOCAL/Дата-Запуска-Скрипта
- Заливает по scp на сервер бэкапов в директорию BACKUP_FOLDER_REMOTE
- После заливки дабы файлы на резервируемой машинке не занимали место скрипт удаляет директории BACKUP_FOLDER_LOCAL/Дата-Запуска-Скрипта
(т.е. удаляется только директория Дата-Запуска-Скрипта).


Еще один интересный вариантик - тут уже с отправкой на емайл

#!/bin/sh
# Enter info:
e_mail="onyx@xxx.xxx.ua"
backup_date= "`date +%d-%m-%Y`"


# Path to command
mount= "/sbin/mount"
umount= "/sbin/umount"
dump= "/sbin/dump"
# Path to programm
massive= "/mnt/usb_mass"

# Mount usb massive
${mount} /dev/da0s1 ${massive}

# Create dump slice
${dump} -0ua -L -f ${massive}/dump_root.img /dev/ad0s1a
${dump} -0ua -L -f ${massive}/dump_usr.img /dev/ad0s1d
${dump} -0ua -L -f ${massive}/dump_var.img /dev/ad0s1e

# If file exists
if [ -f $massive/dump_root.img ]
then dump1= "Image dump_root.img was created";
else echo  "Image dump_root.img was not created, please see this dump!" | mail -s  "!!ERROR Dump!!" ${e_mail}
exit 2;
fi

if [ -f $massive/dump_usr.img ]
then dump2= "Image dump_usr.img was created";

else echo  "Image dump_usr.img was not created, please see this dump!" | mail -s  "!!ERROR Dump!!" ${e_mail}
exit 2;
fi

if [ -f $massive/dump_var.img ]
then dump3= "Image dump_var.img was created";
else echo  "Image dump_var.img was not created, please see this dump!" | mail -s  "!!ERROR Dump!!" ${e_mail}
exit 2;
fi

# Umount usb massive
${umount} ${massive}

# Mail to me
echo  "
${dump1} 
${dump2} 
${dump3} 
" | mail -s dump_${backup_date} ${e_mail} 

Материал взят с сайта: http://macpronet.ru/linux/269-freebsd-бэкап-hdd-dump.html

Главная > Операционные системы > UNIX > BSD > FreeBSD