Backup

Матеріал з USIC Wiki

Перейти до: навігація, пошук

Зміст

Операційна система

Використано CentOS 5.5. Інсталяція проведена на флешку jetFlash Transcend 4GB (JF v33). Під час встановлення інсталятор показав розмір 3828MB.
Розмітка диска:

Пристрій Точка монтування Файлова система Розмір(MB) Початок Кінець
/dev/sda1 /boot ext2 78 1 10
/dev/sda2 swap 549 11 80
/dev/sda3 / ext3 3200 81 488

Налаштування мережі:

Адреса 172.16.4.2/29
Шлюз 172.16.4.1
DNS 172.16.200.1
Hostname backup.usic.lan

Створення Software-RAID1

На машині встановлено два HDD Samsung sp0411n ємністю 40GB. На їх основі створюється RAID-масив першого рівня, тобто відбувається дзеркальне відображення даних. Програмний RAID1 реалізується за допомогою утиліти mdadm.
Диск має наступну геометрію:

[root@backup ~]# fdisk -l /dev/hda
Disk /dev/hda: 40.0 GB, 40060403712 bytes
255 heads, 63 sectors/track, 4870 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
  Device Boot      Start         End      Blocks   Id  System
/dev/hda1               1         487     3911796   83  Linux
/dev/hda2             488        4870    35206447+  fd  Linux raid autodetect

Таблиці розділів дисків повинні бути однакові. Для цього можна виконати команду:

[root@backup ~]# sfdisk -d /dev/hda | sfdisk /dev/hdc

Встановлення mdadm:

[root@backup ~]# yum install mkinitrd mdadm

Підключення модулів:

[root@backup ~]# modprobe raid1
[root@backup ~]# modprobe raid0

Перегляд статистики:

[root@backup ~]# cat /proc/mdstat
Personalities : [raid1] [raid0]
unused devices: <none>

Створення RAID1:

[root@backup ~]# mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/hda2 /dev/hdc2
mdadm: size set to 35206336K
mdadm: array /dev/md0 started.

Перегляд статистики:

[root@backup ~]# cat /proc/mdstat
Personalities : [linear] [multipath] [raid1] [raid0]
md0 : active raid1 hdc2[1] hda2[0]
      35206336 blocks [2/2] [UU]
      [==>..................]  resync = 12.4% (4376896/35206336) finish=15.5min speed=32998K/sec
unused devices: <none>

Завершення створення:

[root@backup mnt]# cat /proc/mdstat
Personalities : [linear] [multipath] [raid1] [raid0]
md0 : active raid1 hdc2[1] hda2[0]
      35206336 blocks [2/2] [UU]
unused devices: <none>

Треба звернути увагу на [UU] -- це означає, що два диски працюють; коли один з дисків не працює, ситуація є наступною: [U_] або [_U].
Створення файлової системи:

[root@backup mnt]# mkfs.ext3 /dev/md0

Перегляд конфігурації:

[root@backup mnt]# mdadm --detail --scan --verbose
ARRAY /dev/md0 level=raid1 num-devices=2 metadata=0.90 UUID=718a84a2:421bfb7d:f2a111b5:ab52df55
   devices=/dev/hda2,/dev/hdc2

Збереження конфігурації (конфігурація масиву не зберігається автоматично):

[root@backup mnt]# mdadm --detail --scan > /etc/mdadm.conf

Монтуємо RAID-масив:

[root@backup mnt]# mount /dev/md0 /mnt/backup/

Відредагуємо /etc/fstab для автоматичного монтування:

/dev/md0        /mnt/backup     ext3    defaults        0       0

Тестування RAID

Тестування швидкодії

[root@backup backup]# dd if=/dev/zero of=1 bs=4096 count=10000
10000+0 records in
10000+0 records out
40960000 bytes (41 MB) copied, 0.147036 seconds, 279 MB/s
[root@backup backup]# dd if=/dev/zero of=1 bs=4096 count=100000
100000+0 records in
100000+0 records out
409600000 bytes (410 MB) copied, 7.53888 seconds, 54.3 MB/s
[root@backup backup]# dd if=/dev/zero of=1 bs=4096 count=1000000
1000000+0 records in
1000000+0 records out
4096000000 bytes (4.1 GB) copied, 135.268 seconds, 30.3 MB/s
[root@backup backup]# dd if=/dev/urandom of=2 bs=4096 count=10000
10000+0 records in
10000+0 records out
40960000 bytes (41 MB) copied, 24.4414 seconds, 1.7 MB/s

Тестування відмовостійкості

Порахуємо MD5-суми для файлів 1 та 2:

[root@backup backup]# md5sum 1
20f6f19ec025ab6a35ea59a17aedba50  1
[root@backup backup]# md5sum 2
f178575c8df6a212a13457b78f1f498f  2

Створимо збій у масиві програмно:

[root@backup ~]# mdadm --manage /dev/md0 --fail /dev/hdc2
mdadm: set /dev/hdc2 faulty in /dev/md0

Подивимось до чого це призвело:

[root@backup ~]# cat /proc/mdstat
Personalities : [linear] [multipath] [raid1] [raid0]
md0 : active raid1 hdc2[2](F) hda2[0]
      35206336 blocks [2/1] [U_]
unused devices: <none>

Видалимо диск зі збоєм:

[root@backup ~]# mdadm --manage /dev/md0 --remove /dev/hdc2
mdadm: hot removed /dev/hdc2

Перезавантажимо машину:

[root@backup ~]# shutdown -r now

Переглянемо статистику:

[root@backup ~]# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 hda2[0]
      35206336 blocks [2/1] [U_]
unused devices: <none>

За допомогою fdisk створимо нову табрицю розділів на /dev/hdc:

[root@backup ~]# fdisk -l /dev/hdc
Disk /dev/hdc: 40.0 GB, 40060403712 bytes
255 heads, 63 sectors/track, 4870 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
  Device Boot      Start         End      Blocks   Id  System

Зробимо таблицю аналогічну до /dev/hda:

[root@backup ~]# sfdisk -d /dev/hda | sfdisk /dev/hdc

Знищимо сліди колишніх RAID-масивів:

[root@backup ~]# mdadm --zero-superblock /dev/hdc2
[root@backup ~]# mdadm --zero-superblock /dev/hdc2
mdadm: Unrecognised md component device - /dev/hdc2

Як видно, сліди були, оскільки виконання першої команди не викликає помилки.
Додаємо /dev/hdc2 до масиву:

[root@backup ~]# mdadm --add /dev/md0 /dev/hdc2
mdadm: added /dev/hdc2

Перегляд статистики:

[root@backup ~]# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 hdc2[2] hda2[0]
      35206336 blocks [2/1] [U_]
      [=>...................]  recovery =  8.7% (3096640/35206336) finish=16.3min speed=32652K/sec
unused devices: <none>

Проводиться синхронізація. Статистику зручно переглядати за допомогою:

[root@backup ~]# watch cat /proc/mdstat

Зміна швидкості синхронізації:

[root@backup ~]# cat /sys/block/md0/md/sync_speed_max
1000
[root@backup ~]# echo 30000 > /sys/block/md0/md/sync_speed_max 
[root@backup ~]# cat /sys/block/md0/md/sync_speed_max
30000 (local)

Перегляд та зміна параметрів швидкості роботи масиву:

[root@backup ~]# cat /proc/sys/dev/raid/speed_limit_min
1000
[root@backup ~]# cat /proc/sys/dev/raid/speed_limit_max
200000
[root@backup ~]# echo 500000 > /proc/sys/dev/raid/speed_limit_max

Виконання пересинхронізації масиву:

[root@backup ~]# echo 'repair' > /sys/block/md0/md/sync_action

AMANDA

Про AMANDA

AMANDA (Advanced Maryland Automatic Network Disk Archiver) - система резервного копіювання, що замінює власноруч написані сценарії (можливо плюс цього це стандартизація, не потрібно розбиратися в чиємусь коді, вже готова документація, тощо). Офіційний сайт: amanda.org . Amanda - це оболонка, що керує іншими програмами резервного копіювання(dump/restore, gnutar, smtar). Сервер Amanda - набір програм, які реалізують різні завдання.

Встановлення AMANDA

Пошук списку пакетів для AMANDA:

# yum list | grep amanda
amanda.i386                              2.5.0p2-8.el5                 base     
amanda-client.i386                       2.5.0p2-8.el5                 base     
amanda-devel.i386                        2.5.0p2-8.el5                 base     
amanda-server.i386                       2.5.0p2-8.el5                 base     

Як видно в репозиторії пакети для amanda

Встановлення сервера

Встановлюємо amanda-server:

# yum -y install amanda-server

Створюємо каталог для нового проекту резервного копіювання, usic_backup_etc(резервне копіювання каталогу /etc на бекап-сервері):

# mkdir /etc/amanda/usic_backup_etc

Створюємо в ньому конфігураційний файл проекту amanda.conf з таким вмістом:

# назва організації, компанії, використовується для звітів
org "usic.org.ua"

# кому будуть приходити звіти
mailto "root"

# користувач для бекапів 
dumpuser "amanda"

# порядок архівування, s - маленькі файли, S - великі файли, sssS спочатку маленькі, потім великі
dumporder "sssS"

# як дамп записується на стлічку
taperalgo first

# одиниці для розміру, m - мегабайти
displayunit "m"

# періодичність між повними бекапами, цикл
dumpcycle 5
# скільки разів amanda буде запускатися протягом циклу, = dumpcycle
runspercycle 5
# кількість стрічок, які будуть використані для резервного копіювання, dumpcycle*2
tapecycle 10

tpchanger "chg-disk" # /usr/lib/amanda/chg-disk

# де зберігається бекап 
tapedev "file:/mnt/backup"

tapetype DISK
labelstr "usic-.*"

infofile "/etc/amanda/usic_backup_etc/curinfo"
logdir "/etc/amanda/usic_backup_etc"
indexdir "/etc/amanda/usic_backup_etc/index"

# розмір диску для збереження
define tapetype DISK {
  length 30000 MB
}

define dumptype comp-tar {
  program "GNUTAR"
  compress fast
  index yes
}

Створюємо структуру каталогів для проекту:

# mkdir /etc/amanda/usic_backup_etc/{curinfo,index}

Створюємо файли для інформації(для логування аманди):

# touch /etc/amanda/usic_backup_etc/{tapelist,disklist}

Встановимо вірного власника(володаря, Lord!) для файлів і каталогів проекту:

# chown -R amanda:disk /etc/amanda/usic_backup_etc

Записуємо в файл disklist те, що хочемо копіювати з клієнтської машини у форматі: назва_хоста що_копіюємо команда_що_буде_використовуватись_для_копіювання(одна_з_amanda.conf):

# echo ‘backup.usic.lan /etc comp-tar’ > /etc/amanda/usic_backup_etc/disklist

Дозволяємо користувачу з клієнтської машини(root-клієнта) отримувати резервну копію з бекап-сервера:

# echo ‘backup.usic.lan root’ >> `grep amanda /etc/passwd | cut -d: -f6`/.amandahosts

Створимо тимчасовий каталог для зберігання резервних копій:

# mkdir /mnt/backup/temp_backups

Створюємо віртуальні стрічки для збереження резервних копій (просто каталог). Тут поняття "віртуальної стрічки" є історичним, оскільки раніше резервне копіювання здебільшого здійснювалось на стрічки.

# for i in 1 2 3 4 5;do mkdir /mnt/backup/slot$i; done

У цьому випадку їх 5

Створимо символьне посилання на першу стрічку, воно необхідне для роботи amanda:

# ln -s /mnt/backup/slot1 /mnt/backup/data

Тут посилання містить глобальний шлях до каталогу, можливо в деяких випадках краще використовувати відносний шлях

Змінюємо власника каталогів:

# chown -R amanda:disk /mnt/backup

Створюємо каталог:

# mkdir -p /usr/adm/amanda

Змінюємо власника:

# chown -R amanda:disk /usr/adm/amanda

Перемикаємося на користувача amanda, саме від його імені будуть виконуватися різні дії:

# su - amanda

Змінюємо значення змінної PATH, для доступу до програм з набору для amanda:

$ echo 'export PATH=$PATH:/usr/sbin' >> .bash_profile

Вийдемо та ввійдемо під користувачем amanda, для того щоб змінна PATH змінилася, та перевірки чи все гарно працює:

$ exit
# su - amanda

Перевіримо статус стрічок:

$ ammt -t file:/mnt/backup/ status
file:/mnt/backup/ status: ONLINE

Перейдемо в каталог для резервного копіювання та помітимо віртуальні стрічки (amlabel назва_проекту мітка-$i slot $i):

$ cd /mnt/backup
$ for i in 1 2 3 4 5; do amlabel usic_backup_etc usic-$i slot $i; done

Скидаємо лічильник стрічок:

$ amtape usic_backup_etc reset

Перевіримо коректність конфігураційного файлу проекту:

$ amcheck -s usic_backup_etc

Запустимо сервіс amandaidx через xinetd. Для цього редагуємо файл amandaidx, змінюємо disable = yes на disable = no:

# vim /etc/xinetd.d/amandaidx

Перезапустимо xinetd:

# service xinetd restart

Перевіримо чи xinetd слухає потрібний порт:

# netstat -lp | grep :amanda
tcp        0      0 *:amandaidx                 *:*                         LISTEN      6499/xinetd  

Це завершує налаштування сервера.

Встановлення клієнта

Встановлюємо amanda-client(на машині клієнта):

# yum -y install amanda-client

Створимо файл .amandahosts на машині клієнта. В ньому зазначимо, який хост(сервер резервного копіювання) та користувач можуть робити бекап з клієнта:

# echo 'backup.usic.lan amanda' >> `grep amanda /etc/passwd | cut -d: -f6`/.amandahosts

Вмикаємо сервер amanda в xinetd, знов редагуємо файл та пишемо disable = no:

# vim /etc/xinetd.d/amanda

Перезапускаємо xinetd:

# service xinetd restart

Перевіримо роботу:

# netstat -lp | grep :amanda
udp        0      0 *:amanda                    *:*                                     6645/xinetd

Процес резервного копіювання

Робимо бекап

Переходимо на сервер. Бекапи робляться від користувача amanda:

# su - amanda

Файл /etc/amanda/usic_backup_etc/disklist містить інформацію, проте звідки, що, та як копіювати:

backup.usic.lan /etc comp-tar

Робимо бекап: amdump назва_проекту

$ amdump usic_backup_etc

Перевіряємо бекап

Для перевірки виконуємо amadmin назва_проекту info(запит інформації) назва_клієнтського_хоста назва_каталогу

$ amadmin usic_backup_etc info backup.usic.lan /etc
Current info for backup.usic.lan /etc:
 Stats: dump rates (kps), Full:  2048.0,  -1.0,  -1.0
                   Incremental:   -1.0,  -1.0,  -1.0
         compressed size, Full:  13.5%,-100.0%,-100.0%
                   Incremental: -100.0%,-100.0%,-100.0%
 Dumps: lev datestmp  tape             file   origK   compK secs
         0  20100827  usic-1              1   45450    6144    3

дата datestmp 20100827
стрічка tape usic-1
тип бекапу lev 0 (повна копія)
Для пошуку певного каталогу в проекті виконують amadmin назва_проекту find назва_хоста_клієнта каталог:

$ amadmin usic_backup_etc find backup.usic.lan /etc
date       host            disk lv tape or file file part status
2010-08-27 backup.usic.lan /etc  0 usic-1          1   -- OK
2010-08-27 backup.usic.lan /etc  1 usic-2          1   -- OK

Відновлення файлу з резервної копії

Спочатку вставимо потрібну стрічку, amtape назва_проекту slot номер_слота

$ amtape usic_backup_etc slot 1

Виконуємо відновлення, amrestore file:/шлях_де_зберігаеться_бекап назва_хоста_клієнта '/каталог/'

$ amtape file:/mnt/backup backup.usic.lan '/etc/'

відновлена копія з’явиться в поточному каталозі

amrestore:   1: restoring backup.usic.lan._etc.20100827.0
amrestore:   2: reached end of tape: date 20100827

backup.usic.lan._etc.20100827.0 - це звичайний tar-архів
Добуваємо з архіву потрібний файл, tar xvf назва_архіву ./назва_файлу_який_потрібен:

$ tar xvf backup.usic.lan._etc.20100827.0 ./resolv.conf

Додаткові дії

Додаємо завдання до crontab для автоматичного резервного копіювання:

$ crontab -e
$ crontab -l
0 5 * * 1-6 /usr/sbin/amdump usic_backup_etc

Типові операції

Створення нового проекту

  1. Створюємо каталог для проекту /etc/amanda/назва_проекту
  2. В каталозі проекту створюємо файл amanda.conf (файл містить налаштування проету)
  3. В каталозі проекту створюємо файл disklist (містить список клієнтів та файлових систем для резервного копіювання, а також назву команди для резервного копіювання)
  4. Створити службові каталоги для проекту

Примітка: треба звернути увагу на права файлів -rw-r--r-- 1 amanda disk 511 Aug 27 20:32 amanda.conf

Файл amanda.conf
# загальна інформація 
org "usic.org.ua" # назва організації, використовується для звітів
mailto "root" # кому будуть приходити звіти
dumpuser "amanda" # користувач для бекапів, від йього імені будуть створюватися резервні копії


# загальний опис носіїв
tpchanger "chg-disk" # сценарій керування заміною стрічок, знаходиться в /usr/lib/amanda/chg-disk
tapedev "file:/mnt/backup" # пристрій для збереження
tapetype DISK  # ім’я пристрою, використовується для детально опису
labelstr "usic-.*" # регулярний вираз, що визначає назви міток для стрічок, йому мають відповідати всі стрічки, які використовуються у проекті

# каталоги для збереження службової інформації
infofile "/etc/amanda/usic_backup_etc/curinfo" # каталог бази даних
logdir "/etc/amanda/usic_backup_etc" # каталог файлів-журналів
indexdir "/etc/amanda/usic_backup_etc/index" # індексний каталог 

# загальні параметри резервного копіювання



# порядок архівування, s - маленькі файли, S - великі файли, sssS спочатку маленькі, потім великі
dumporder "sssS"

# як дамп записується на стлічку
taperalgo first

# одиниці для розміру, m - мегабайти
displayunit "m"

# періодичність між повними бекапами, цикл
dumpcycle 5
# скільки разів amanda буде запускатися протягом циклу, = dumpcycle
runspercycle 5
# кількість стрічок, які будуть використані для резервного копіювання, dumpcycle*2
tapecycle 10




# розмір диску для збереження
define tapetype DISK {
  length 30000 MB
}

define dumptype comp-tar {
  program "GNUTAR"
  compress fast
  index yes
}


Де зберігаються файли конфігурації та як отримати інформацію про налаштування

Хто є amanda-user, користувач для процесу резервного копіювання (наприклад, amanda, amandabackup):

# amadmin xx versin | grep CLIENT_LOGIN

Католог з налаштуваннями amanda, містить всі налаштування, зберігається на сервері amanda (наприклад /etc/amanda):

# amadmin xx version | grep CONFIG_DIR

Каталог для debug log files:

# amadmin xx version | grep AMANDA_DBGDIR

Каталог, що містить executables, які запускає amandad (наприклад /usr/lib/amanda):

# amadmin xx version | grep libexecdir

Встановлення та налаштування tftp-сервера та tftp-клієнта

Встановлюємо TFTP-сервер:

# yum -y install tftp-server

Редагуємо файл /etc/xinetd.d/tftp . Міняємо:

disable                 = yes

на

disable                 = no

Запускаємо xinetd:

# service xinetd start

Перевіряємо, чи запустився xinetd та чи є прослуховування на 69 порту(стандартному для tftp):

# netstat -nlp | grep :69
udp        0      0 0.0.0.0:69                  0.0.0.0:*                               17929/xinetd

Каталог /tftpboot служить для завантаження файлів.
Встановимо tftp-клієнт:

# yum -y install tftp

Робота з сервером та клієнтом

Для того, щоб з’єднатись з tftp-сервером, треба виконати команду:

# tftp 172.16.4.2

Переглянути статус з’єднання:

tftp> status
Connected to 172.16.4.2.
...

Увімкнути verbose mode:

tftp> verbose

Допомога:

tftp> ?

Завантажити файл з сервера:

tftp> get test.file
getting from 172.16.4.2:test.file to test.file [netascii]
Received 18 bytes in 0.0 seconds [4644 bit/s]

Завантаження файлу на сервер:
Перед завантаженням файлу на сервер треба створити пустий файл на сервері з тим самим ім’ям та дати відповідні права:

# touch /tftpboot/file.txt
# chmod 666 /tftpboot/file.txt

Далі з’єднуємось з сервером та завантажуємо на нього файл:

# tftp 172.16.4.2
tftp> put file.txt

Увімкнути режим передачі без змін (для передачі образів тощо):

tftp> binary

Збільшити час timeout (для передачі великих файлів, час в секундах):

tftp> timeout 100
Особисті інструменти