Документация по ОС FreeBSD Понедельник, 20.05.2024, 07:51
Приветствую Вас Гость | RSS
Меню сайта

Категории каталога
Мои статьи [0]
Установка и настройка [281]
X Window [25]
Man pages [30]
Ports & Packages [26]
cvs [18]
Multimedia [20]
Нововсти в мире Unix [0]
RFC [4]
RFC (Request for Comments, Запрос на комментарии) - серия документов, публикуемая сообществом исследователей и разработчиков, руководствующихся практическими интересами, в которой описывается набор протоколов и обобщается опыт функционирования Интернет.
Безопасность [52]
Работа с железом [58]
Книги по FreeBSD [17]
Сеть [505]
Программирование [40]
FireWall [58]
Темы экзамена BSDA [14]
Официальные темы экзамена BSDA, включая подробноые описания и советы по обучению.

Главная » Статьи » Установка и настройка

Процедуры резервного копирования и восстановления [2011]
Для компьютера под управлением OS FreeBSD на примере корпоративного сервера Proxy3 под управлением FreeBSD 8.2 PRERELASE #0


Предисловие.


В нашей "конторе" выход в интернет обеспечивал долгое время компьютер с громким именем прокси-сервер. Работал он на windows 2003 R2 в связке с WinGate, Trafmetr в качестве шейпера, и стенка из Outpost pro. Не самая красивая связка, но исторически сложилась и нормально работала, пока канал во внешний мир был 256К. Когда канал вырос до 1М машинка стала тупить и не справляться. Екстенсивное решение заменой железа помогло, но не на долго. На горизонте маячило расширение канала, благо цены падали. Поэтому стал вопрос о создании нового решения. Выбор пал на FreeBSD. Три месяца чтения Лукаса, Таймена, эксперименты с кратким руководством от Корниенко и другими источниками принесли свои плоды - заработал под новый год сервер под FreeBSD. Может не все так как хотелось, но заработал. 

Дальнейшее изучение FreeBSD и модернизация этой системы на рабочем сервере при отсутствии серьезного опыта потребовало обязательного решения по резервированию и восстановлению системы на случай неизбежных ошибок.
Эксперименты с пересборкой ядра и мира, плавный переход с версии 8.1 на 8.2 на этапе экспериментов решался клонированием системы на другой жесткий диск перед каждым более или менее радикальным шагом. Процедура клонирования занимала около часа и при введении сервера в эксплуатацию стала не приемлемой.       
Стал вопрос о нормальной процедуре резервирования и восстановления.
Результат чтения различных источников и нескольких экспериментов был задокументирован на случай сбоев и для других сотрудников нашей "конторы". Хочу заметить, что процедура резервного копирования системы под FreeBSD в интернете освещена более или менее подробно, а вот по восстановлению подробного описания найти не удалось. 

Источники:
1) http://www.freebsd.org/doc/ru/books/handbook/backup-basics.html
2) http://hotfreebsd.ru/rezervnoe-kopirovanie-freebsd-pri-pomoshhi-dump-i-restore/
3) http://rm-rf.ucoz.ru/publ/11-1-0-14  
4) Майкл Лукас, FreeBSD, Санкт-Петербург–Москва,2009,Подробное руководство,
  Второе издание.
5) Корниенко К.А. Корпоративный Интернет-сервер на базе ОС FreeBSD. Киев - 2008.
  http://www.andrewblog.ru/korporativnyj-internet-server-na-baze-freebsd/
  http://www.andrewblog.ru/files/e-books/FreeBSD_server.rar

Процедура резервного копирования.
http://www.freebsd.org/doc/ru/books/handbook/backup-basics.html
Вам нужно выполнить всего лишь четыре шага для того, чтобы быть готовым к любому сбою. Во-первых, распечатайте разметку диска для всех ваших дисков (к примеру, bsdlabel da0 | lpr), таблицу файловых систем (/etc/fstab) и все сообщения, выводимые при загрузке, каждого по два экземпляра.
-Т.01---------------------------------------------------------------------------
160G SATA2 ASPI
"Слики"
всего 71679 МБ ad4s1
всего 80947 МБ ad4s2 ? не размечено, резерв

part Mount вариант2 (авто )
ad4s1a / 1024 (512 )
ad4s1b swap 4062 (4062 )
ad4s1d /var 20480 (3055 )
ad4s1e /tmp 8192 (512 )
ad4s1f /usr 17441 (63538)
ad4s1g /home 20480 ()

-Т.02---------------------------------------------------------------------------
# bsdlabel ad4s1 
# /dev/ad4s1:
8 partitions:
# size offset fstype [fsize bsize bps/cpg]
 a: 2097152 0 4.2BSD 0 0 0 
 b: 8318976 2097152 swap 
 c: 146800017 0 unused 0 0 # "raw" part, don't edit
 d: 41943040 10416128 4.2BSD 0 0 0 
 e: 16777216 52359168 4.2BSD 0 0 0 
 f: 35719168 69136384 4.2BSD 0 0 0 
 g: 41944465 104855552 4.2BSD 0 0 0 
bsdlabel: partition c doesn't cover the whole unit!
bsdlabel: An incorrect partition c may cause problems for standard system 
utilities

-Т.03---------------------------------------------------------------------------
# cat fstab 
# Device Mountpoint FStype Options Dump Pass#
/dev/ad4s1b none swap sw 0 0
/dev/ad4s1a / ufs rw 1 1
/dev/ad4s1g /home ufs rw 2 2
/dev/ad4s1e /tmp ufs rw 2 2
/dev/ad4s1f /usr ufs rw 2 2
/dev/ad4s1d /var ufs rw 2 2
/dev/acd0 /cdrom cd9660 ro,noauto 0 0

-Т.04-------------------------------------------------------------------------— 
Во-вторых, запишите CD диск с 'livefs'. Этот диск позволяет загружаться в режим аварийного восстановления FreeBSD, давая возможность пользователю выполнять ряд утилит, среди которых dump(8), restore(8), fdisk(8), bsdlabel(8), newfs(8), mount(8) и т.д. Образ CD с 'livefs' для FreeBSD/i386 8.1-RELEASE находится по адресу 
FreeBSD-8.1-RELEASE-i386-livefs.iso
(в нашем случае FreeBSD-8.2-RC2-i386-livefs.iso или FreeBSD-8.2-RC2-i386-livefs.iso

Примечание: для восстановления системы можно использовать и полный образ системы объемом примерно 2G, для DVD, используемый при инсталляции. Например из файла "FreeBSD-8.1-RELEASE-i386-dvd1.iso". В нем так же, как и в образе CD с 'livefs', есть все необходимое.     
Могу предположить что для восстановления может подойти любой диск от 7, 8 или даже 9-й версии. Но не проверял.

Резервное копирование. Способ 1.

По мотивам
http://hotfreebsd.ru/rezervnoe-kopirovanie-freebsd-pri-pomoshhi-dump-i-restore

1) С помощью скрипта "/home/backup/backup.sh" информация сохраняется на диск резервируемого компьютера:
#!/bin/sh
# резервное копирование основных разделов за исключением home
echo 'Начал копирование корневого раздела'
DATE=`date +%Y%m%d`
echo 'Начато копирование корневого раздела'
dump -0 -L -f - / | gzip -9 > /home/backup/${DATE}.0.root.img.gz
echo 'Корневой раздел скопирован, жду 4 секунды'
sleep 4
dump -0 -L -f - /usr | gzip -9 > /home/backup/${DATE}.1.usr.img.gz
echo 'Раздел usr скопирован, жду 4 секунды'
sleep 4
dump -0 -L -f - /var | gzip -9 > /home/backup/${DATE}.2.var.img.gz
echo 'Раздел var скопирован.'
sleep 4
dump -0 -L -f - /tmp | gzip -9 > /home/backup/${DATE}.3.tmp.img.gz
echo 'Раздел tmp скопирован.'
sleep 4
dump -0 -L -f - /home | gzip -9 > /home/backup/${DATE}.4.home.img.gz
echo 'Раздел home скопирован.'
sleep 1
echo 'Все задачи резервного копирования выполнены.'
#

Результат работы скрипта (3.5G запакованный) перебрасывается на другой компьютер 
19.01.2011 20:13 122 393 031 20110119.0.root.img.gz
19.01.2011 20:45 1 244 767 957 20110119.1.usr.img.gz
19.01.2011 20:48 393 092 365 20110119.2.var.img.gz
19.01.2011 20:48 16 514 20110119.3.tmp.img.gz
19.01.2011 20:52 1 750 937 084 20110119.4.home.img.gz

Длительность процедуры резевирования для компьютера следующей комплектации:

Intel Pentium 4 630, 3000 MHz (15 x 200)
Asus P5GDC Pro (Intel Grantsdale i915P)
ATI Radeon X550 (RV370) (128 Мб)
2048 Мб (2x1G Мб PC3200 DDR SDRAM Samsung)
SAMSUNG HD160JJ (160 Гб, 7200 RPM, SATA-II)
сеть
1)Onboard (Marvell Yukon 88E8053 PCI-E Gigabit Ethernet Controller)
2)External (Intel(R) PRO/100+)

составляет 42.14 мин или по разделам

раздел    сек    архив,мб
------------------------
root    217    116.72
usr    1914    1187.1
var    175    374.9
tmp    0    0.016
home    222    1669.8
------------------------
summ    2528    3348.5

Недостатком этого способа можно назвать двукратное превышение объема из за рекурсии информации на томе home (файл 20110119.4.home.img.gz) содержит копии всех предыдущих файлов 20110119.4.*.img.gz.
Возможно этого избежать путем записи файлов на разные тома с последующим перемещением или изменения последовательности резервирования (например сначала копировать том home).
В любом случае после копирования информацию необходимо переместить на другой носитель (либо резервный HDD в составе того-же компьютера, либо на другой компьютер, либо на сменный носитель - DVD-R/RW и прочая). Это еще дополнительно время (около получаса).

Резервное копирование. Способ 2.

По мотивам http://rm-rf.ucoz.ru/publ/11-1-0-14

2) Во избежание недостатков первого способа были проведены следующие действия:
2.1) Обеспечен доступ к ftp серверу
   (В моем случае по адресу 192.168.1.3 на сервере под управлением 
    MS Windows 2003 R2 создан в IIS узел ftp на порту 8022 с полным доступом
    для учетной записи proxy3 c паролем proxy3 и резервом дискового
    пространства порядка 50G.)
2.2) Создан следующий скрипт "/home/backup/backup2.sh"
#!/bin/sh
###############################################################################
# Резервное копирование системы 
# по мотивам
#http://hotfreebsd.ru/rezervnoe-kopirovanie-freebsd-pri-pomoshhi-dump-i-restore
#http://rm-rf.ucoz.ru/publ/11-1-0-14
###############################################################################
#
# собственно типовая функция бакапа на ftp Сервер
dump_to_ftp () {
############################################################################
#ftp -i -A -P 8022 -u ftp://proxy3:proxy3@192.168.1.3/ 20110119.*
#ftp -i -A -P 8022 -u ftp://proxy3:proxy3@192.168.1.3/20110119.2.var.img.gz -

 echo "------- Begin dump party '/${party}' copy to ftp ----------------"
 dump -0 -L -f - /${party} | gzip -9 | ftp ${ftpkeys} -u \
ftp://${usr}:${pass}@${ftpsrv}/${DATE}.${num}.${partyn}.img.gz -
 res=${?}
 echo "------- End dump '/${party}', sleep 4c ----"
 sleep 4
 echo ' '
 return ${res}
}

DATE=`date +%Y%m%d%H`
ftpkeys="-i -a -A -P 8022"
usr="proxy3"
pass=${usr}
ftpsrv="192.168.1.3"

num="0"
party=""
partyn="root"
dump_to_ftp
echo ${?}

num=`exp ${num}+1`
party="usr"
partyn=${party}
dump_to_ftp 
echo ${?}

num=`exp ${num}+1`
party="var"
partyn=${party}
dump_to_ftp 
echo ${?}

num=`exp ${num}+1`
party="tmp"
partyn=${party}
dump_to_ftp 
echo ${?}

num=`exp ${num}+1`
party="home"
partyn=${party}
dump_to_ftp 
echo ${?}

sleep 1
echo '---- End dump all party ----------'

Запуск скрипта второго варианта позволяет создать файлы резервной копии сразу на другом компьютере. К недостаткам можно отнести обязательную необходимость нормального функционирования ftp сервера. Общий объем файлов резервной копии составляет около 1.7G.
20.01.2011 16:27 122 395 390 2011012016.0.root.img.gz
20.01.2011 17:01 1 244 749 850 2011012016.1.usr.img.gz
20.01.2011 17:04 420 885 064 2011012016.2.var.img.gz
20.01.2011 17:05 16 562 2011012016.3.tmp.img.gz
20.01.2011 17:05 313 945 2011012016.4.home.img.gz

Процедура восстановления.

По мотивам 17.12.8. Процедура восстановления при сбое

3) Для дополнительной страховки, каждый раз создавайте загрузочный CD диск с 'livefs'. Храните одну из копий в каком-то удаленном месте и НЕ в том же здании, где находится ваш офис. Достаточно большое количество компаний во Всемирном Торговом Центре изучило это на своей шкуре. Это удаленное хранилище должно быть физически отделено на большое расстояние от 
ваших компьютеров и дисковых устройств.

Процедура тестового восстановления:

3.1) Берем компьютер следующей комплектации
Intel Celeron D 325, 2533 MHz (19 x 133)
Asus P4P800-VM i865G
Inboard (Intel(R) 82865G Graphics Controller (64 Мб)
1G (1 PC3200 DDR SDRAM)
HDD 160 Гб, 7200 RPM, Ultra-ATA/133
сеть
 1)Onboard (Intel(R) PRO/100 S) 
 2)External (Intel(R) PRO/100+)

Запускаемся с USB DVD-RW с диском 'livefs' см.выше Т.04)

После загрузки:

1) На экран будет выведено оригинальное меню установки. Выберите требуемую страну, потом в меню "Custom" там разбиваем жёсткий диск – меню "3 Partition". 
Попадаем в программу, чем-то напоминающую fdisk для DOS. Подсказки по меню расположены внизу экрана.Основные команды – клавиша "C"  (создать раздел), "D" (удалить раздел). Cоздаем слайк(slice, Partirion) нужного размера (71679М, в принципе можно и больше и меньше объем, но для теста делаю так). Выходим отсюда клавишей "Q", выбираем стандартный загрузчик (Standard) 

2) И приступаем к разметке – пункт меню "4 Label". Мы попадаем в ещё одну утилиту, напоминающую fdisk. Подсказки так же отображены внизу экрана. Последовательность действий следующая: нажимаем "C" (создать), определяем размер (например 512M или 2G), выбираем "file system" это у нас будет или "swap" и определяем имя файловой системы, начиная от корневого каталога. Первым нужно создать корневой каталог "/", затем swap, затем все остальные, например "/var". Если что-то создали не так, нажмите "D" (удалить). Типы и размеры разделов выбираем как выше, в Т.01. Выходим отсюда клавишей "Q".
Замечание: имена томов могу отличаться. Например, сам слайк(slice, Partirion) в оригинальной системе именуется "ad4s1" а в резервной у меня "ad0s1". Соответственно изменяться имена томов. эту разницу нужно будет потом учесть позже, до первой загрузки, изменив файл "/etc/fstab". 

3) Применяем изменения (пункт 7 "Coommit")

4) Выбираем пункт меню "Fixit - Repair mode with CDROM/DVD/floppy or start a shell.",
а в нём выберите пункт CDROM/DVD - Use the live filesystem CDROM/DVD.

Cмотрим, какие разделы есть, что есть, не факт что ad*, но в моем случае 
Fixit# ls /dev/ad*
/dev/ad0 /dev/ad0s1a /dev/ad0s1d /dev/ad0s1f
/dev/ad0s1 /dev/ad0s1b /dev/ad0s1e /dev/ad0s1g

смотрим выше Т.03.
Запишем соответствия разделов и точек монтирования:
a - /
b - swap
d - /var
e - /tmp
f - /usr
g - /home

заходим в каталог mnt
Fixit# cd /mnt

Создаем папки для монтирования
Fixit# mkdir root
Fixit# mkdir var
Fixit# mkdir tmp
Fixit# mkdir usr
Fixit# mkdir home

создаем файловые системы
Fixit# newfs /dev/ad0s1a
Fixit# newfs /dev/ad0s1d
Fixit# newfs /dev/ad0s1e
Fixit# newfs /dev/ad0s1f
Fixit# newfs /dev/ad0s1g

Для раздела swap (/dev/ad0s1b) можно сразу выполнить активацию раздела
Fixit# swapon /dev/ad0s1b

теперь монтируем каждый том
Fixit# mount /dev/ad0s1a /mnt/root
Fixit# mount /dev/ad0s1d /mnt/var
Fixit# mount /dev/ad0s1e /mnt/tmp
Fixit# mount /dev/ad0s1f /mnt/usr
Fixit# mount /dev/ad0s1g /mnt/home

Настраиваем сеть:

Для начала посмотрим, какие сетевые интерфейсы у нас в системе есть:
Fixit# ifconfig

Вы должны увидеть список сетевых интерфейсов системы, среди которых есть ваши сетевые карты (у меня fxp0 и msk0 - в оригинальной системе, fxp0 и fxp1 в клонируемой) В будущем, после восстановления, нужно пройтись по всем файлам настроек, где фигурируют имена интерфейсов, и их изменить соответствующим образом (/etc/rc.conf, /etc/rc.firewall, /etc/ppp/ppp.conf и другие).
Присвоим нашему восстанавливаемому компьютеру внутренний IP 192.168.1.89, в целях эксперимента - отличный от оригинального (192.168.1.80). Для этих целей используется команда ifconfig, в нашем случае:
Fixit# ifconfig fxp0 inet 192.168.1.89 netmask 255.255.255.0

Пропишем шлюз по умолчанию  команда route:
Fixit# route add default 192.168.1.1

проверяем связь (выход из ping по Ctrl+C):
Fixit# ping 192.168.1.3

переходим смонтированный каталог, достаточного объема для всех файлов резервных копий и который не обязательно восстанавливать. Я выбрал "/mnt/tmp"
Fixit# cd /mnt/tmp

Из этого каталога заходим на ftp, включаем в режим бинарной передачи, забираем все необходимые файлы, выходим (ниже лишний вывод удален, только команды):
Fixit# ftp -A ftp://proxy3:proxy3@192.168.1.3:8022/
ftp> binary
ftp> get 2011012016.0.root.img.gz
ftp> get 2011012016.1.usr.img.gz
ftp> get 2011012016.2.var.img.gz
ftp> get 2011012016.3.tmp.img.gz
ftp> get 2011012016.4.home.img.gz
ftp> exit
Fixit#

Вместо того что бы набирать имя каждого файла в команде ftp> get можно воспользоваться командой ftp> mget с шаблоном:
ftp> mget 2011012016*

на вопрос команды ответить "a" (да, в смысле, все хочу, all).
В общем после относительно длительного окончания копирования файлов выходим из ftp по команде exit.
Запускаем restore с извлечением из архива и выводом на консоль и передачей в поток команде restore:
Fixit# gzip -d -с 2011012016.0.root.img.gz | ( cd /mnt/root ; restore -rf - )
Fixit# gzip -d -с 2011012016.1.usr.img.gz | ( cd /mnt/usr ; restore -rf - )
Fixit# gzip -d -с 2011012016.2.var.img.gz | ( cd /mnt/var ; restore -rf - )
Fixit# gzip -d -с 2011012016.4.home.img.gz | ( cd /mnt/home ; restore -rf - )

Если надо восстановить том "/tmp", следует перекинуть его файл
2011012016.3.tmp.img.gz (или все файлы 2011012016.*.*.img.gz), например, в
каталог "/mnt/home" (или другой, где после восстановления достаточно места)
Fixit# mv /mnt/tmp/2011012016.3.tmp.img.gz /mnt/home/

или
Fixit# mv /mnt/tmp/2011012016.*.*.img.gz /mnt/home/

и выполнить уже
Fixit# cd /mnt/home
Fixit# gzip -d -c 2011012016.3.tmp.img.gz | ( cd /mnt/tmp ; restore -rf - )

Примечание: вообще то после команда restore файлы, которые были на целевом томе, остаются. Но их целостность я не проверял, а интернете пишут что команда restore - деструктивная. Я думаю пока имена существующих файлов не совпадают с именами восстанавливаемых, проблем не будет. Для чистоты эксперимента я предполагаю что restore уничтожает все файлы на целевом томе при восстановлении. Поэтому выше используется команда "mv".
Теперь смотрим результат
Fixit# cd /mnt/root
Fixit# ls

вроде все на месте. Редактируем fstab
Fixit# vi etc/fstab

акуратно меняем все ad4s? на ad0s?
чтобы удалить символ - подводим курсор под него (под "4") и давим "x", чтобы вставить символ - подводим курсор, давим "i", вставляем символ ("0"), давим "ESC" для возврата в командный режим. Как отредактировали - выходим с сохранением, давим в командном режиме ":wq" и
выходим. Обязательно внимательно проверьте результаты, например командой
Fixit# cat etc/fstab

т.к. если будет ошибка, вы не загрузитесь нормально. Для исправления прийдется опять загружаться с диска восстановления, монтировать раздел root и вносить исправления. 
В процессе эксперимента я еще исправил etc/rc.conf, в частности: 
1) Заменил имена интерфейсов msk0 на fxp0, fxp0 на fxp1.
2) Изменил адрес сетевого интерфейса (теперь fxp0) c 192.168.1.80 на 
192.168.1.89 чтобы не "задеть" нормально работающий сервер. Практика показала 
что не он задевается, но лучше поберечься.
3) изменил hostname c "proxy3" на "proxy3d"
4) Закомментировал строку 
 allscreens_flags="-f 8x16 cp866-8x16.fnt MODE_292"

т.к. на другом железе режим наверняка будет другой. Его позже можно определить командой vidcontrol -i mode, но уже загрузившись со своего ядра, т.к. в ядре используемом "Fixit" этот набор очень ограничен.

Если не хотите работать с vi, то перед первой загрузкой откиньте сетевые кабели, загрузитесь в восстановленной системе и правьте этот и другие файлы в другом редакторе (например, mcedit). 

Ну вот, думаю, пробное восстановление закончено, осталось выйти 
Fixit# reboot 

и перегрузиться, нажимая все возможные "Сansel", "Exit".
Успехов.



Источник: http://www.lissyara.su/?id=2157
Категория: Установка и настройка | Добавил: oleg (25.01.2011) | Автор: egor
Просмотров: 680 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа

Beastie

Друзья сайта

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
links

Copyright MyCorp © 2024