пятница, 2 декабря 2011 г.

Итак BackupServer part1 подготовка

"осторожно, много букв!"
(1) Для начала хотелось бы набросать примерную схему и средства


  • Итак, мы имеем следующее железо

Содержание Кол-во
1 Процессор Intel Core i5-2500 (LGA1155/4 ядра/ 3.3ГГц/ 6Mb/ Intel® HD Graphics 2000) (CM8062300834203) 1
2 Вентилятор Scythe Shuriken Rev.B (S478/775/1155/1156/1366/754/939/940/AM2+/AM3) (SCSK-1100) 1
3 Мат.плата Asus P8P67 EVO S-1155 iP67 4xDDR3 4+4xSATA 3xPCI-E16x ALC892 -8ch 2xG-Lan USB3.0 ATX (P8P67 EVO (B3)) 1
4 Память DDR3 4Gb PC10666(1333) 1x4Gb Corsair (9-9-9-24) (CMV4GX3M1A1333C9) 4
5 Жесткий диск SATA-3 500Gb WD Black (7200rpm, 32Mb) (WD5002AALX) 1
6 Жесткий диск SATA-3 3,0Tb WD Green WD30EZRX 7
7 Видеокарта PCI-E NV GT440 1Gb 128bit DDR3 [Point of View] HDMI+DVI+VGA oem 1
8 Блок питания 1000W Thermaltake ATX TR2 RX APFC, 140mm Fan, Cab Manag, RTL (TRX-1000MPCEU 80+) 1
9 Корпус Chieftec LCX-01B-B-SL-500 500W 1
10 Вентилятор 92x92x25 3pin Zalman ZM-F2 (тихий) 5
11 Вентилятор 120x120x25 Zalman ZM-F3 (тихий) 2
12 ИБП APC BK650EI 1
  • OS Linux Debian 6 X64
  • В которой WD Black системный раздел, а  WD Green разделы под soft raid(mdadm(raid5+hotspare))
  • Поверх которого будет работать LVM
  • Поверх которого будет работать файловая система
  • В которую Backula будет складывать бэкапы пользователей





(2) Поскольку на нормальный raid денег не хватило, ставим Debian и начинаем собирать soft raid на mdadm
     
Установка Debian процесс достаточно тривиальный, я его пропущу. Но хочу заметить одну вещь. Я его поставил на голую пятисотку, если у вас будет возможность, то советую сделать soft raid на lvm для системы в простом зеркале, lvm это умеет. Либо вам придётся делать backup'ы директории /etc сервера бэкапов, поскольку lvm хранит там метаданные своих дисков, и если они потеряются будет достаточно неприятно, хотя не критично. То есть RAID и все разделы соберуться, но про снапшоты скорее всего можно будет забыть.

Чтобы не терять очерёдности дисков, и при выходе из строя какого либо HDD сделаем постоянные ссылки для построения рэйда(мы их привяжем к конкретному SATA порту), их сразу можно будет пометить в корзине.



Запишите следующий скрипт.
root@backup:~# cat > look-at-dev
#!/bin/bash

for i in $(ls /dev/sd?)
do

udevadm info -a -p $(udevadm info -q path -n ${i}) | grep "looking at device"

shift

done



Теперь выполните его.
root@backup:~# chmod +x ./look-at-dev
root@backup:~# ./look-at-dev
looking at device '/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda':
looking at device '/devices/pci0000:00/0000:00:1f.2/host1/target1:0:0/1:0:0:0/block/sdb':
looking at device '/devices/pci0000:00/0000:00:1f.2/host2/target2:0:0/2:0:0:0/block/sdc':
looking at device '/devices/pci0000:00/0000:00:1f.2/host3/target3:0:0/3:0:0:0/block/sdd':
looking at device '/devices/pci0000:00/0000:00:1f.2/host4/target4:0:0/4:0:0:0/block/sde':
looking at device '/devices/pci0000:00/0000:00:1f.2/host5/target5:0:0/5:0:0:0/block/sdf':
looking at device '/devices/pci0000:00/0000:00:1c.7/0000:09:00.0/host8/target8:0:0/8:0:0:0/block/sdg':
looking at device '/devices/pci0000:00/0000:00:1c.7/0000:09:00.0/host9/target9:0:0/9:0:0:0/block/sdh':

Поскольку на материнской плате 2 SATA контроллера, очерёдность хостов немножко изменена.








как вы могли заметить, я выбрал достаточно необычную схему обозначения блочных устройств:











пример 1
/dev/sl1sys


Это значит, что HDD принадлежит к 1-му из 8-ми слотов в корзине и имеет системную принадлежность.


пример 2

/dev/sl4rd


Это значит, что HDD принадлежит к 4-му из 8-ми слотов в корзине, и имеет принадлежность к RAID массиву.
  
На основе этих данных мы можем построить правила udev:


root@backup:~# cat > /etc/udev/rules.d/10-persistent-hdd.rules
#slot 1 system disk
SUBSYSTEM=="block", SUBSYSTEMS=="scsi", KERNELS=="host8", OPTIONS="all_partitions", NAME+="sl1sys%n"
#slot 2 raid disk
SUBSYSTEM=="block", SUBSYSTEMS=="scsi", KERNELS=="host9", OPTIONS="all_partitions", NAME+="sl2rd%n"
#slot 3 system disk
SUBSYSTEM=="block", SUBSYSTEMS=="scsi", KERNELS=="host0", OPTIONS="all_partitions", NAME+="sl3rd%n"
#slot 4 system disk
SUBSYSTEM=="block", SUBSYSTEMS=="scsi", KERNELS=="host1", OPTIONS="all_partitions", NAME+="sl4rd%n"
#slot 5 system disk
SUBSYSTEM=="block", SUBSYSTEMS=="scsi", KERNELS=="host2", OPTIONS="all_partitions", NAME+="sl5rd%n"
#slot 6 system disk
SUBSYSTEM=="block", SUBSYSTEMS=="scsi", KERNELS=="host3", OPTIONS="all_partitions", NAME+="sl6rd%n"
#slot 7 system disk
SUBSYSTEM=="block", SUBSYSTEMS=="scsi", KERNELS=="host4", OPTIONS="all_partitions", NAME+="sl7rd%n"
#slot 8 system disk
SUBSYSTEM=="block", SUBSYSTEMS=="scsi", KERNELS=="host5", OPTIONS="all_partitions", NAME+="sl8rd%n"
Небольшое отступление для описания udev:
Правила для udev пишутся достаточно просто. В начале нужно описать набор переменных, с которыми должно сопоставляться правило, после чего по необходимости можно указать опции и назначение имени устройства хардлинка(задаётся коммандой NAME+=""), либо симлинка(SYMLINK+=""). Так же в опциях можно задавать владельца, различные параметры доступа, использовать конструкцию goto и прочие фишки(подробнее читайте http://wiki.debian.org/ru/udev). Возьмём для примера последнюю строку конфига (SUBSYSTEM=="block", SUBSYSTEMS=="scsi") Она означает, что устройство должно относиться к блочным и иметь тип scsi. (KERNELS=="host5") значит, что он должен находиться на 5-м порту(см. рисунок ^), (OPTIONS="all_partitions") означает принудительную обработку всех разделов диска, (NAME+="sl8rd%n") означает, что мы мы присваиваем устройству HardLink c именем sl8rd%n, где %n означает, что если это раздел, то ему будет присвоена цифра.
Посмотреть триплеты  можно коммандой
udevadm info -a -p $(udevadm info -q path -n /dev/"Имя устройства")
p.s.  KERNEL name у устройства не меняется, просто у устройства создаётся еще одна точка входа, либо symlink.


Посмотрим что у нас получилось.


root@backup:~# ls /dev/sl[1-9]*
/dev/sl1sys  /dev/sl1sys1  /dev/sl1sys2  /dev/sl1sys5  /dev/sl2rd  /dev/sl3rd  /dev/sl4rd  /dev/sl5rd  /dev/sl6rd  /dev/sl7rd  /dev/sl8rd



ok, но не забываем, что kernel name тоже остаются, не запутайтесь


root@backup:~# ls /dev/sd*
/dev/sda  /dev/sdb  /dev/sdc  /dev/sdd  /dev/sde  /dev/sdf  /dev/sdg  /dev/sdg1  /dev/sdg2  /dev/sdg5  /dev/sdh



Осталось подписать диски, и можно начинать конфигурировать MDADM








Ставим MDADM


root@backup:~# apt-get update
root@backup:~# apt-get install mdadm
 

Теперь разметим разделы и установим метку диска "Raid", чтобы при старте системы ядро уже знало из чего ей собирать softraid


Тут я хотел бы сделать небольшое отступление. В этой статье я буду оперировать разными величинами, к примеру Терабайт и Тибибайт. Многие путаются в них, так как МЭК не так давно ввела свои двоичные приставки (про это подробнее можно почитать тут Тебибайт), но вкраце различия следующие: для получения килобайта нужно 1 байт умножить на 1000, а для получения кибибайта на 1024При небольших величинах это было не заметно, но с появлением Терабайтных жестких дисков разница разительна. 
Еще хочется пояснить по какой причине мы не будем использовать старый добрый FDISK и MBR, а воспользуемся современными PARTED и GPT. GPT позволяет создавать разделы диска размером до 9.4 ЗБ (9.4 × 1021 байт), в то время как MBR может работать только с 2.2 ТБ (2.2 × 1012 байт). Подробнее можно почитать тут. Что касается программ разметки, FDISK не умеет работать работать с GPT, что описано в его мануале(fdisk doesn't understand GUID Partition Table (GPT) and it is not designed for large partitions. In particular case use more advanced GNU parted(8).). По этой причине мы и воспользуемся PARTED.


Приведу пример для диска /dev/sl2rd
root@backup:~# parted /dev/sl2rd
GNU Parted 2.3
Using /dev/sl2rd
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel gpt
Warning: The existing disk label on /dev/sl2rd will be destroyed and all data on this disk will be lost. Do you want to continue?
Yes/No? Yes
(parted) unit TB
(parted) mkpart primary 0.00TB 3.00TB
(parted) print

Model: ATA WDC WD30EZRX-00M (scsi)
Disk /dev/sl2rd: 3,00TB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt

Number  Start   End     Size    File system  Name     Flags
 1      0,00TB  3,00TB  3,00TB               primary
(parted) toggle 1 raid
(parted) print

Model: ATA WDC WD30EZRX-00M (scsi)
Disk /dev/sl2rd: 3,00TB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt

Number  Start   End     Size    File system  Name     Flags
 1      0,00TB  3,00TB  3,00TB               primary  raid
(parted) quit
Information: You may need to update /etc/fstab.                           

То же самое нужно сделать с оставшимися RAID дискам.

В конце этих манипуляций у меня получились следующие разделы
.


parted -l
Model: ATA WDC WD30EZRX-00M (scsi)
Disk /dev/sda: 3001GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt

Number  Start   End     Size    File system  Name     Flags
 1      1049kB  3001GB  3001GB               primary  raid


Model: ATA WDC WD30EZRX-00M (scsi)
Disk /dev/sdb: 3001GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt

Number  Start   End     Size    File system  Name     Flags
 1      1049kB  3001GB  3001GB               primary  raid


Model: ATA WDC WD30EZRX-00M (scsi)
Disk /dev/sdc: 3001GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt

Number  Start   End     Size    File system  Name     Flags
 1      1049kB  3001GB  3001GB               primary  raid


Model: ATA WDC WD30EZRX-00M (scsi)
Disk /dev/sdd: 3001GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt

Number  Start   End     Size    File system  Name     Flags
 1      1049kB  3001GB  3001GB               primary  raid


Model: ATA WDC WD30EZRX-00M (scsi)
Disk /dev/sde: 3001GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt

Number  Start   End     Size    File system  Name     Flags
 1      1049kB  3001GB  3001GB               primary  raid


Model: ATA WDC WD30EZRX-00M (scsi)
Disk /dev/sdf: 3001GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt

Number  Start   End     Size    File system  Name     Flags
 1      1049kB  3001GB  3001GB               primary  raid


Model: ATA WDC WD5002AALX-0 (scsi)
Disk /dev/sdg: 500GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End    Size    Type      File system     Flags
 1      1049kB  480GB  480GB   primary   ext4            boot
 2      480GB   500GB  20,3GB  extended
 5      480GB   500GB  20,3GB  logical   linux-swap(v1)


Model: ATA WDC WD30EZRX-00M (scsi)
Disk /dev/sdh: 3001GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt

Number  Start   End     Size    File system  Name     Flags
 1      1049kB  3001GB  3001GB               primary  raid


Теперь нам нужно объединить в SoftRaid разделы /dev/sl[1-8]rd1.
Для начала посчитаем сколько у нас свободных дисков под SoftRaid.


root@backup:~# parted -l | grep raid | wc -l
7

Исходя из этой цифры создаём устройство RAID массива, поскольку у нас всётаки backup-server, а не сервер баз данных, нас больше интересует надёжность, нежели скорость. По этому создадим RAID6.


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

watch -n 1 cat /proc/mdstat

Создалим RAID 6-го уровня. 

root@backup:~# mdadm --create /dev/md0 --level=6 --raid-devices=7 /dev/sl[1-8]rd1
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

Проверим как создаётся массив.



root@backup:~# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid6 sdf1[6] sde1[5] sdd1[4] sdc1[3] sdb1[2] sda1[1] sdh1[0]
      14651317760 blocks super 1.2 level 6, 512k chunk, algorithm 2 [7/7] [UUUUUUU]
      [>....................]  resync =  0.5% (14665216/2930263552) finish=666.0min speed=72955K/sec
    
unused devices: <none>

Наступил долгий период сборки массива.
Как вы могли заметить, для обозначения дисков в RAID mdadm использует KERNELNAME устройства, но не беспокойтесь, при выходе из строя диска вы всегда сможете произвести ассоциацию скриптом look-at-dev, который мы использовали в начале статьи.


Теперь занесём созданный нами RAID в файл конфигурации.
root@backup:~# mdadm --detail --scan >> /etc/mdadm/mdadm.conf


Прошло много времени, у меня оно собиралось больше 20-ти часов.

Мы можем убедиться, что RAID собрался и устройство /dev/md0 появилось.

root@backup:~# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid6 sdf1[6] sde1[5] sdd1[4] sdc1[3] sdb1[2] sda1[1] sdh1[0]
      14651317760 blocks super 1.2 level 6, 512k chunk, algorithm 2 [7/7] [UUUUUUU]
     
unused devices: <none>


root@backup:~# ls /dev/md*
/dev/md0


/dev/md:
Перезагрузимся и убедимся, что RAID стартует.
root@backup:~# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active (auto-read-only) raid6 sdh1[0] sdf1[6] sde1[5] sdd1[4] sdc1[3] sdb1[2] sda1[1]
      14651317760 blocks super 1.2 level 6, 512k chunk, algorithm 2 [7/7] [UUUUUUU]
    
unused devices: <none>
Не паникуйте если вы увидите строчку md0 : active (auto-read-only), это произашло из за того, что массив не задействован, хотя имеет статус active



(3) Пришло время натянуть LVM


Для начала мы его установим и подгрузим.


root@backup:~# apt-get install lvm2
root@backup:~# modprobe dm-mod
Разметим наш массив.
root@backup:~# parted /dev/md0
GNU Parted 2.3
Using /dev/md0
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel gpt                                                     
(parted) unit TB                                                         
(parted) mkpart primary 0.00TB 15.00TB                                  
(parted) toggle 1 lvm                                                    
(parted) print                                
                           
Model: Linux Software RAID Array (md)
Disk /dev/md0: 15,0TB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt

Number  Start   End     Size    File system  Name     Flags
 1      0,00TB  15,0TB  15,0TB               primary  lvm

(parted) quit                                                            
Information: You may need to update /etc/fstab.            
 Убедитесь в том, что партиция была создана.
root@backup:~# ls /dev/md*
/dev/md0  /dev/md0p1
Теперь можно создавать Physical volume.
root@backup:~# pvcreate /dev/md0p1
  Physical volume "/dev/md0p1" successfully created

Эта команда создает в начале диска дескриптор группы томов.


Если вы получили ошибку инициализации диска с таблицей разделов -- проверьте, что работаете именно с нужным диском, и когда полностью будете уверены в том, что делаете, выполните следующие команды.

dd if=/dev/zero of=/dev/diskname bs=1k count=1 
blockdev --rereadpt /dev/"diskname"
 Теперь стоит убедиться, что Physical volume  был создан и имеет расчётный размер
root@backup:~# concalc "(3e12/(1024^4))*(7-2)"
13.6424205265939236
Где  3e12 = 3*10^12 = 3000000000000 - количество байт на одном 3-х терабайтном жестком диске, которое мы делим на 1024 в четвёртой степени, чем приводим её к Тибибайтам и из этой суммы рассчитываем по формуле hddsize*(n-2), где n — число дисков в массиве, а hddsize — размер наименьшего диска.
root@backup:~# pvdisplay
  --- Physical volume ---
  PV Name               /dev/md0p1
  VG Name               backup-serv-storage
  PV Size               13,65 TiB / not usable 0  
  Allocatable           yes
  PE Size               4,00 MiB
  Total PE              3576980
  Free PE               3576980
  Allocated PE          0
  PV UUID               fqaK7P-Ck1s-U5fG-LLKu-m1tu-bj4R-9ieYNo
Для создания группы томов воспользуемся командой 'vgcreate.
root@backup:~# vgcreate backup-serv-storage /dev/md0p1
     Volume group "backup-serv-storage" successfully created


Создадим логический раздел lv_main полностью заполняющий группу томов.


root@backup:~# lvcreate -l100%FREE backup-serv-storage -n lv_main
     Logical volume "lv_main" created
(4) Создадим файловую систему


root@backup:~# mkfs.ext4 /dev/backup-serv-storage/lv_main
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=128 blocks, Stripe width=640 blocks
915709952 inodes, 3662827520 blocks
183141376 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
111781 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
        102400000, 214990848, 512000000, 550731776, 644972544, 1934917632,
        2560000000

Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 20 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
.
Создадим точку монтирования /mnt/srv и примонтируем lv туда.


root@backup:~# mkdir /srv
root@backup:~# mount /dev/backup-serv-storage/lv_main /srv/
root@backup:~# df -h

Файловая система                                    Разм  Исп  Дост  Исп% смонтирована на
/dev/sl1sys1                                              440G 1001M  417G   1% /
tmpfs                                                        7,9G     0  7,9G   0% /lib/init/rw
udev                                                         7,9G  224K  7,9G   1% /dev
tmpfs                                                        7,9G     0  7,9G   0% /dev/shm
/dev/mapper/backup--serv--storage-lv_main 14T  143M   13T   1% /srv
Итак, раздел монтируется, и имеет нужный нам объём, отмонтируем его, пропишем в /etc/fstab и убедимся, что он монтируется автоматом


root@backup:~# umount /srv
root@backup:~# mount | grep lv_main
root@backup:~#

root@backup:~# apt-get install gawk util-linux
root@backup:~# echo "`blkid | grep lv

UUID="9c82ce17-9d5c-47aa-b528-0a69756b1b94" /srv ext4 defaults 0 2

root@backup:~# echo "`blkid | grep lv_main | awk '{ print $2 }'` /srv ext4 defaults 0 2" >> /etc/fstab 

root@backup:~# mount -a
root@backup:~# mount | grep lv_main
/dev/mapper/backup--serv--storage-lv_main on /srv type ext4 (rw)
(5) Тестирование стабильности RAID'a
 


Выберем какой либо диск (я выбрал sl8rd он последний в корзине, хотя можете выбрать любой).
Посмотрим на каком хосту он весит.
root@backup:~# cat /etc/udev/rules.d/10-persistent-hdd.rules | grep sl8
SUBSYSTEM=="block", SUBSYSTEMS=="scsi", KERNELS=="host5", OPTIONS="all_partitions", NAME+="sl8rd%n"
Теперь по хосту узнаем KERNELNAME.

root@backup:~# ./look-at-dev | grep host5
  looking at device '/devices/pci0000:00/0000:00:1f.2/host5/target5:0:0/5:0:0:0/block/sdf':
И обнаруживаем его в массиве.
root@backup:~# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid6 sdh1[0] sdf1[6] sde1[5] sdd1[4] sdc1[3] sdb1[2] sda1[1]
      14651317760 blocks super 1.2 level 6, 512k chunk, algorithm 2 [7/7] [UUUUUUU]
     
unused devices: <none>
Пометим его как сбойный и посмотрим что получилось.
root@backup:~# mdadm /dev/md0 -f /dev/sdf1
mdadm: set /dev/sdf1 faulty in /dev/md0
root@backup:~# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid6 sdh1[0] sdf1[6](F) sde1[5] sdd1[4] sdc1[3] sdb1[2] sda1[1]
      14651317760 blocks super 1.2 level 6, 512k chunk, algorithm 2 [7/6] [UUUUUU_]
     
unused devices: <none>
 
О ужас, у нас появился сбойный диск.
Удалим его из массива, сделаем вид, что сбегали в магазин, купили новый винт, разбили по всем правилам и установили на законное место в 8-й слот.
root@backup:~# mdadm /dev/md0 -r /dev/sdf1
mdadm: hot removed /dev/sdf1 from /dev/md0
root@backup:~# mdadm /dev/md0 -a /dev/sdf1
mdadm: re-added /dev/sdf1
root@backup:~# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid6 sdf1[6] sdh1[0] sde1[5] sdd1[4] sdc1[3] sdb1[2] sda1[1]
      14651317760 blocks super 1.2 level 6, 512k chunk, algorithm 2 [7/6] [UUUUUU_]
      [>....................]  recovery =  0.0% (301708/2930263552) finish=647.4min speed=75427K/sec
     
unused devices: <none>

Ура, товарищи, мы спасли данные, массив пересобирается!








(5) Тестирование скорости RAID'a




Насколько мне известно, есть 2 способа ускорить SoftRaid.
   1) Увеличение параметра ядра stripe_cache_size(значение по умолчанию 256).
   2) Перенос bitmap на отдельный диск.


Для первого способа, я не нашел формулы расчёта нужного значения, поэтому придётся оттестировать производительность на разных значениях.


Запишем скрипт, и начнём тестирование.
 
root@backup:~#  cat > /root/test_stripe_cache_size
#!/bin/bash
for cache_size in 256 512 768 1024 2048 4096 8192 16834 32768; do
 for i in {1..3}; do
 echo ${cache_size} > /sys/block/md0/md/stripe_cache_size
 sync
 echo 3 > /proc/sys/vm/drop_caches
 echo "stripe_cache_size: ${cache_size} (${i}/3)"
 # for write
 dd if=/dev/zero of=/srv/ddfile bs=3145728 count=5460
 # for read
 dd if=/srv/ddfile of=/dev/null bs=3145728 count=5460
 rm /srv/ddfile
 done
done
root@backup:~# chmod +x /root/test_stripe_cache_size
root@backup:~# /root/test_stripe_cache_size
stripe_cache_size: 256 (1/3)
5460+0 записей считано
5460+0 записей написано
 скопировано 17175674880 байт (17 GB), 108,836 c, 158 MB/c
5460+0 записей считано
5460+0 записей написано
 скопировано 17175674880 байт (17 GB), 20,3155 c, 845 MB/c
stripe_cache_size: 256 (2/3)
5460+0 записей считано
5460+0 записей написано
 скопировано 17175674880 байт (17 GB), 108,063 c, 159 MB/c
5460+0 записей считано
5460+0 записей написано
 скопировано 17175674880 байт (17 GB), 14,916 c, 1,2 GB/c
stripe_cache_size: 256 (3/3)
5460+0 записей считано
5460+0 записей написано
 скопировано 17175674880 байт (17 GB), 107,863 c, 159 MB/c
5460+0 записей считано
5460+0 записей написано
 скопировано 17175674880 байт (17 GB), 21,5183 c, 798 MB/c
stripe_cache_size: 512 (1/3)
5460+0 записей считано
5460+0 записей написано
 скопировано 17175674880 байт (17 GB), 74,6074 c, 230 MB/c
5460+0 записей считано
5460+0 записей написано
 скопировано 17175674880 байт (17 GB), 17,0099 c, 1,0 GB/c
stripe_cache_size: 512 (2/3)
5460+0 записей считано
5460+0 записей написано
 скопировано 17175674880 байт (17 GB), 75,4031 c, 228 MB/c
5460+0 записей считано
5460+0 записей написано
 скопировано 17175674880 байт (17 GB), 18,4218 c, 932 MB/c
stripe_cache_size: 512 (3/3)
5460+0 записей считано
5460+0 записей написано
 скопировано 17175674880 байт (17 GB), 72,4509 c, 237 MB/c
5460+0 записей считано
5460+0 записей написано
 скопировано 17175674880 байт (17 GB), 17,3658 c, 989 MB/c
stripe_cache_size: 768 (1/3)
5460+0 записей считано
5460+0 записей написано
 скопировано 17175674880 байт (17 GB), 73,4809 c, 234 MB/c
5460+0 записей считано
5460+0 записей написано
 скопировано 17175674880 байт (17 GB), 18,3502 c, 936 MB/c
stripe_cache_size: 768 (2/3)
5460+0 записей считано
5460+0 записей написано
 скопировано 17175674880 байт (17 GB), 72,3034 c, 238 MB/c
5460+0 записей считано
5460+0 записей написано
 скопировано 17175674880 байт (17 GB), 16,6831 c, 1,0 GB/c
stripe_cache_size: 768 (3/3)
5460+0 записей считано
5460+0 записей написано
 скопировано 17175674880 байт (17 GB), 48,6807 c, 353 MB/c
5460+0 записей считано
5460+0 записей написано
 скопировано 17175674880 байт (17 GB), 18,9392 c, 907 MB/c
stripe_cache_size: 1024 (1/3)
5460+0 записей считано
5460+0 записей написано
 скопировано 17175674880 байт (17 GB), 61,3801 c, 280 MB/c
5460+0 записей считано
5460+0 записей написано
 скопировано 17175674880 байт (17 GB), 18,4058 c, 933 MB/c
stripe_cache_size: 1024 (2/3)
5460+0 записей считано
5460+0 записей написано
 скопировано 17175674880 байт (17 GB), 55,621 c, 309 MB/c
5460+0 записей считано
5460+0 записей написано
 скопировано 17175674880 байт (17 GB), 16,5315 c, 1,0 GB/c
stripe_cache_size: 1024 (3/3)
5460+0 записей считано
5460+0 записей написано
 скопировано 17175674880 байт (17 GB), 71,8451 c, 239 MB/c
5460+0 записей считано
5460+0 записей написано
 скопировано 17175674880 байт (17 GB), 17,6429 c, 974 MB/c
stripe_cache_size: 2048 (1/3)
^[^L5460+0 записей считано
5460+0 записей написано
 скопировано 17175674880 байт (17 GB), 57,9617 c, 296 MB/c
5460+0 записей считано
5460+0 записей написано
 скопировано 17175674880 байт (17 GB), 16,7519 c, 1,0 GB/c
stripe_cache_size: 2048 (2/3)
5460+0 записей считано
5460+0 записей написано
 скопировано 17175674880 байт (17 GB), 51,4401 c, 334 MB/c
5460+0 записей считано
5460+0 записей написано
 скопировано 17175674880 байт (17 GB), 17,3024 c, 993 MB/c
stripe_cache_size: 2048 (3/3)
5460+0 записей считано
5460+0 записей написано
 скопировано 17175674880 байт (17 GB), 53,268 c, 322 MB/c
5460+0 записей считано
5460+0 записей написано
 скопировано 17175674880 байт (17 GB), 17,2876 c, 994 MB/c
stripe_cache_size: 4096 (1/3)
5460+0 записей считано
5460+0 записей написано
 скопировано 17175674880 байт (17 GB), 49,4748 c, 347 MB/c
5460+0 записей считано
5460+0 записей написано
 скопировано 17175674880 байт (17 GB), 17,6018 c, 976 MB/c
stripe_cache_size: 4096 (2/3)
5460+0 записей считано
5460+0 записей написано
 скопировано 17175674880 байт (17 GB), 49,3429 c, 348 MB/c
5460+0 записей считано
5460+0 записей написано
 скопировано 17175674880 байт (17 GB), 16,413 c, 1,0 GB/c
stripe_cache_size: 4096 (3/3)
5460+0 записей считано
5460+0 записей написано
 скопировано 17175674880 байт (17 GB), 50,5514 c, 340 MB/c
5460+0 записей считано
5460+0 записей написано
 скопировано 17175674880 байт (17 GB), 18,3916 c, 934 MB/c
stripe_cache_size: 8192 (1/3)
5460+0 записей считано
5460+0 записей написано
 скопировано 17175674880 байт (17 GB), 37,089 c, 463 MB/c
5460+0 записей считано
5460+0 записей написано
 скопировано 17175674880 байт (17 GB), 18,6571 c, 921 MB/c
stripe_cache_size: 8192 (2/3)
5460+0 записей считано
5460+0 записей написано
 скопировано 17175674880 байт (17 GB), 35,8546 c, 479 MB/c
5460+0 записей считано
5460+0 записей написано
 скопировано 17175674880 байт (17 GB), 18,0778 c, 950 MB/c
stripe_cache_size: 8192 (3/3)
5460+0 записей считано
5460+0 записей написано
 скопировано 17175674880 байт (17 GB), 36,4707 c, 471 MB/c
5460+0 записей считано
5460+0 записей написано
 скопировано 17175674880 байт (17 GB), 20,0427 c, 857 MB/c
stripe_cache_size: 16834 (1/3)
5460+0 записей считано
5460+0 записей написано
 скопировано 17175674880 байт (17 GB), 36,8509 c, 466 MB/c
5460+0 записей считано
5460+0 записей написано
 скопировано 17175674880 байт (17 GB), 24,1728 c, 711 MB/c
stripe_cache_size: 16834 (2/3)
5460+0 записей считано
5460+0 записей написано
 скопировано 17175674880 байт (17 GB), 37,0602 c, 463 MB/c
5460+0 записей считано
5460+0 записей написано
 скопировано 17175674880 байт (17 GB), 19,6549 c, 874 MB/c
stripe_cache_size: 16834 (3/3)
5460+0 записей считано
5460+0 записей написано
 скопировано 17175674880 байт (17 GB), 37,245 c, 461 MB/c
5460+0 записей считано
5460+0 записей написано
 скопировано 17175674880 байт (17 GB), 19,4358 c, 884 MB/c
stripe_cache_size: 32768 (1/3)
5460+0 записей считано
5460+0 записей написано
 скопировано 17175674880 байт (17 GB), 38,5621 c, 445 MB/c
5460+0 записей считано
5460+0 записей написано
 скопировано 17175674880 байт (17 GB), 23,3799 c, 735 MB/c
stripe_cache_size: 32768 (2/3)
5460+0 записей считано
5460+0 записей написано
 скопировано 17175674880 байт (17 GB), 39,1207 c, 439 MB/c
5460+0 записей считано
5460+0 записей написано
 скопировано 17175674880 байт (17 GB), 26,6075 c, 646 MB/c
stripe_cache_size: 32768 (3/3)
5460+0 записей считано
5460+0 записей написано
 скопировано 17175674880 байт (17 GB), 38,4429 c, 447 MB/c
5460+0 записей считано
5460+0 записей написано
 скопировано 17175674880 байт (17 GB), 22,6575 c, 758 MB/c
Лучшие значения у нас появились на stripe_cache_size: 8192.
Его и установим по умолчанию.


Откройте файл /etc/rc.local  своим любимым редактором
и приведите к следующему виду.
root@backup:~# cat /etc/rc.local
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

echo 8192 > /sys/block/md0/md/stripe_cache_size

exit 0
Теперь перенесём файл битмапа с рейда, на системный раздел, и удостоверимся что всё применилось.
root@backup:~# mdadm -G /dev/md0 -b /var/md0_intent
root@backup:~# cat /proc/mdstat

Personalities : [raid6] [raid5] [raid4]
md0 : active raid6 sdh1[0] sdf1[6] sde1[5] sdd1[4] sdc1[3] sdb1[2] sda1[1]
      14651317760 blocks super 1.2 level 6, 512k chunk, algorithm 2 [7/7] [UUUUUUU]
      bitmap: 0/350 pages [0KB], 4096KB chunk, file: /var/md0_intent

unused devices: <none>
Предупреждая ваш вопрос, я скажу, что RAID прекрасно соберётся, и без файла битмапа.


Посмотрим чего мы добились.


root@backup:~# dd if=/dev/zero of=/srv/ddfile bs=3145728 count=5460
5460+0 записей считано
5460+0 записей написано
 скопировано 17175674880 байт (17 GB), 36,2717 c, 474 MB/c
root@backup:~# dd if=/srv/ddfile of=/dev/null bs=3145728 count=5460
5460+0 записей считано
5460+0 записей написано
 скопировано 17175674880 байт (17 GB), 13,612 c, 1,3 GB/c
root@backup:~# rm /srv/ddfile

160 MB/c на 900 MB/c против 474 MB/c на 1,3 GB/c

Не плохое повышение производительности.


Продолжение в статье Итак BackupServer part2 Bacula-Server
 
(6) Bacula Server =>>









Используемый материал

/dev/head
http://wiki.debian.org/ru/udev
http://www.opennet.ru/base/sys/udev_dynamic.txt.html
http://communities.netapp.com/community/netapp-blogs/databases/blog/2009/06/26/udev-rules-to-enable-device-name-persistence
http://www.softpanorama.org/Commercial_linuxes/Devices/udev.shtml
http://igorka.com.ua/2010-03-24/znakomstvo-s-udev-v-ubuntu/
http://hackaday.com/2009/09/18/how-to-write-udev-rules/
http://bryanesmith.com/documents/mdadm/index.html
http://company.yandex.ru/academic/kit/1.xml

http://www.linuxhomenetworking.com/wiki/index.php/Quick_HOWTO_:_Ch26_:_Linux_Software_RAID
http://xgu.ru/wiki/LVM

http://www.cyberciti.biz/tips/fdisk-unable-to-create-partition-greater-2tb.html
http://www.tolaris.com/2008/10/01/moving-your-linux-root-partition-to-raid/
http://habrahabr.ru/blogs/linux/111036/
https://peterkieser.com/2009/11/29/raid-mdraid-stripe_cache_size-vs-write-transfer/

Enhanced by Zemanta