ATAoE

Материал из noname.com.ua
Перейти к навигацииПерейти к поиску

ATA over Ethernet

Решил попробовать пробросить диск с удаленного сервера (но в пределах одного сегмента).

Сервер

uname -a Linux noname 3.1.1-sirmax2 #3 SMP Wed Nov 16 00:56:05 FET 2011 i686 Intel(R) Core(TM)2 CPU 6300 @ 1.86GHz GenuineIntel GNU/Linux

Клиент

uname -a Linux sirmax 2.6.38.2-sirmax1 #1 SMP PREEMPT Sat Apr 9 16:26:46 EEST 2011 x86_64 AMD Athlon(tm) 64 X2 Dual Core Processor 4400+ AuthenticAMD GNU/Linux

Конфигурация ядра

Насколько я понимаю, модуль можно взять из ядра, можно из пакета. Я взял их ядра.

Linux Kernel Configuration: Поддержка ATA over Eth
Device Drivers  ---> 
    [*] Block devices  --->
            <M>   ATA over Ethernet support 

Серверная часть

Установить пакет vblade:

emerge sys-block/vblade

Конфигрурация пакета предельно простая - 1 файл: /etc/conf.d/vblade

config_vblade0="0 1 eth0.15 /dev/sde"

В моем примере eth0.15 это vlan на котором я буду "шарить" реальный физический диск (можно файл вместо диска)

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

  • {SHELF} – логический «номер» сервера, на котором установлен vblade (пишут что от 1 и выше, но у меня работает с 0 )
  • {SLOT} – логический «номер» блочного устройства для экспорта
  • {NETIF} – интерфейс для экспорта, например, eth или vlan
  • {FILE} – обычный файл или блочное устройство, которое будет экспортироваться в Ethernet.

Ну и естественно стартовать процесс:

/etc/init.d/vblade.vblade0 start

Если нужно расшарить более 1 диска то нужно будет сдалать симлинки ln -s /etc/init.d/vblade.vblade0 /etc/init.d/vblade.vblade1

Клиентская часть

тут чуть сложнее чем со стороны сервера:

Установить софт

sys-block/aoetools

udev

Добавляю в udev файлик, иначе устройства придется создавать руками: 99-aoe.rules Файлик лежит /path/to/linux-X.X.xx/Documentation/aoe/udev.txt

# aoe char devices             
SUBSYSTEM=="aoe", KERNEL=="discover",   NAME="etherd/%k", GROUP="disk", MODE="0220" 
SUBSYSTEM=="aoe", KERNEL=="err",        NAME="etherd/%k", GROUP="disk", MODE="0440" 
SUBSYSTEM=="aoe", KERNEL=="interfaces", NAME="etherd/%k", GROUP="disk", MODE="0220" 
SUBSYSTEM=="aoe", KERNEL=="revalidate", NAME="etherd/%k", GROUP="disk", MODE="0220"
SUBSYSTEM=="aoe", KERNEL=="flush",      NAME="etherd/%k", GROUP="disk", MODE="0220"
# aoe block devices            
KERNEL=="etherd*",       NAME="%k", GROUP="disk"

Загрузка модуля

Добавляю параметры для модуля:

alias aoe aoe aoe_maxsectors=4096 aoe_deadsecs=180 aoe_maxout=32 aoe_iflist=br0 


Параметры модуля

Я нашел такое описание параметров:

  • «aoe_maxsectors» – в его описании написано только «Специально для GPFS» :) Уточнив у разработчика что он значит, пишу сюда – максимальное количество секторов за одну IO операцию, т.е. размер блока будущей файловой системы в байтах, деленный на 512. Я поставил здесь 4096.
  • «aoe_deadsecs» – таймаут ответа от vblade-сервера, после которого выдается «IO Error». Мне по душе пришлось значение в 5 секунд вместо дефолтных три минуты. UPDATE: Саппорт мне настойчиво порекомендовал оставить здесь дефолтные 180 минут (не минут, секунд наверно!)
  • «aoe_iflist» – интерфейс(ы) на котором aoe будет сканировать девайсы. Чем разделяются интерфейсы хз – я использую всего один.
  • «aoe_maxout» – загадочный, по словам саппорта, ключевой параметр. Сюда нужно поставить целое число, которое высчитывается по алгоритму: 500/NUM_AOE/SLOTS_PER_SHELF. NUM_AOE – суммарное количество AOE клиентов, SLOTS_PER_SHELF – сколько в среднем слотов на один шелф (а-ля сколько винтов в тазике). Саппорт сказал, что занижение этого числа будет приводить к тормозам, а завышение – у меня кернел матерился на eth0 txqueuelength.

(http://www.pentarh.com/wp/2008/07/15/cheap-san-using-aoe/)

Далее пробую загрузить модуль:

modprobe aoe aoe_iflist="eth0.15"

(Обратить внимание -я по ошибке указал влан, который у меня - сабинтерфейс в бридже, и как следствие, сервера я не увидел:)

dmesg [387742.118836] aoe: AoE v47 initialised.

aoe-stat тоже ничего не показывал.
Однако интерфейс можно изменить на лету, и пересканировать:

#aoe-interfaces br0 #aoe-interfaces br0 #

И отсканировав сеть, вижу свое устройство:

#aoe-discover #aoe-stat e0.1 250.059GB br0 up
dmesg [388723.464726] aoe: 001676d8bb22 e0.1 v4013 has 488397168 sectors [388723.465748] etherd/e0.1: p1 p2 p3

Работа с диском

fdisk -l Disk /dev/etherd/e0.1: 250.1 GB, 250059350016 bytes 255 heads, 63 sectors/track, 30401 cylinders, total 488397168 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x3f5b2f4d Device Boot Start End Blocks Id System /dev/etherd/e0.1p1 * 63 2008124 1004031 82 Linux swap / Solaris /dev/etherd/e0.1p2 2008125 80148284 39070080 83 Linux /dev/etherd/e0.1p3 80148285 488392064 204121890 83 Linux

Ну и соответственно с диском можно делать все что и с локальным:

hdparm -t /dev/etherd/e0.1 /dev/etherd/e0.1: Timing buffered disk reads: 174 MB in 3.02 seconds = 57.56 MB/sec

Правда iostat показывает странную загрузку :)


Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
etherd!e0.1       0.00     0.00 17729.00    0.00 141832.00     0.00     8.00     0.00    2.36   2.36 4178.60

09.01.2012 22:29:24
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          12.06    0.00   38.69   15.08    0.00   34.17

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
etherd!e0.1       0.00     0.00 17586.00    0.00 140688.00     0.00     8.00     0.00    2.40   2.40 4214.10

09.01.2012 22:29:25
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           4.50    0.00   32.00   12.50    0.00   51.00

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
etherd!e0.1       0.00     0.00 11702.00    0.00 93616.00     0.00     8.00     0.00    2.58   2.58 3015.50