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 файлик, иначе устройства придется создавать руками: 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.