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
Типові операції
Створення нового проекту
- Створюємо каталог для проекту
/etc/amanda/назва_проекту - В каталозі проекту створюємо файл
amanda.conf(файл містить налаштування проету) - В каталозі проекту створюємо файл
disklist(містить список клієнтів та файлових систем для резервного копіювання, а також назву команди для резервного копіювання) - Створити службові каталоги для проекту
Примітка: треба звернути увагу на права файлів -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
