ATAoE: различия между версиями

Материал из noname.com.ua
Перейти к навигацииПерейти к поиску
 
(не показано 16 промежуточных версий этого же участника)
Строка 1: Строка 1:
  +
[[Категория:Linux]]
  +
[[Категория:ATAoE]]
 
=ATA over Ethernet=
 
=ATA over Ethernet=
   
Строка 5: Строка 7:
   
 
Сервер
 
Сервер
uname -a
+
{{Root|<nowiki>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
 
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
  +
</nowiki>}}
 
   
 
Клиент
 
Клиент
uname -a
+
{{Root|<nowiki>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 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
  +
</nowiki>}}
   
 
==Конфигурация ядра==
 
==Конфигурация ядра==
  +
Насколько я понимаю, модуль можно взять из ядра, можно из пакета. Я взял их ядра.
Что бы включить поддержку KVM, следует включить следующие опции ядра (я использовал модули):
 
 
{{Kernel|Поддержка ATA over Eth|<pre>
 
{{Kernel|Поддержка ATA over Eth|<pre>
 
Device Drivers --->
 
Device Drivers --->
Строка 20: Строка 23:
 
<M> ATA over Ethernet support
 
<M> ATA over Ethernet support
 
</pre>}}
 
</pre>}}
  +
  +
==Серверная часть==
  +
Установить пакет vblade:
  +
{{Root|<nowiki>emerge sys-block/vblade</nowiki>}}
  +
  +
Конфигрурация пакета предельно простая - 1 файл: /etc/conf.d/vblade
  +
<PRE>
  +
config_vblade0="0 1 eth0.15 /dev/sde"
  +
</PRE>
  +
  +
В моем примере eth0.15 это vlan на котором я буду "шарить" реальный физический диск (можно файл вместо диска)
  +
  +
Собственно, на этом этапе настройка сервера завершена. Никакой авторизации не предусмотрено - соблюдать осторожность.<BR>
  +
Параметры очевидны
  +
*{SHELF} – логический «номер» сервера, на котором установлен vblade (пишут что от 1 и выше, но у меня работает с 0 )
  +
*{SLOT} – логический «номер» блочного устройства для экспорта
  +
*{NETIF} – интерфейс для экспорта, например, eth или vlan
  +
*{FILE} – обычный файл или блочное устройство, которое будет экспортироваться в Ethernet.
  +
  +
Ну и естественно стартовать процесс:
  +
{{Root|<nowiki> /etc/init.d/vblade.vblade0 start</nowiki>}}
  +
  +
Если нужно расшарить более 1 диска то нужно будет сдалать симлинки ln -s /etc/init.d/vblade.vblade0 /etc/init.d/vblade.vblade1
  +
  +
==Клиентская часть==
  +
тут чуть сложнее чем со стороны сервера:
  +
===Установить софт===
  +
{{Root|<nowiki>sys-block/aoetools</nowiki>}}
  +
  +
===udev===
  +
Добавляю в udev файлик, иначе устройства придется создавать руками: 99-aoe.rules
  +
Файлик лежит /path/to/linux-X.X.xx/Documentation/aoe/udev.txt
  +
<PRE>
  +
# 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"
  +
</PRE>
  +
===Загрузка модуля===
  +
Добавляю параметры для модуля:
  +
<PRE>
  +
alias aoe aoe aoe_maxsectors=4096 aoe_deadsecs=180 aoe_maxout=32 aoe_iflist=br0
  +
</PRE>
  +
  +
  +
===Параметры модуля===
  +
Я нашел такое описание параметров:
  +
  +
* «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/)
  +
  +
Далее пробую загрузить модуль:
  +
{{Root|<nowiki>modprobe aoe aoe_iflist="eth0.15"</nowiki>}}
  +
(Обратить внимание -я по ошибке указал влан, который у меня - сабинтерфейс в бридже, и как следствие, сервера я не увидел:)
  +
{{Root|<nowiki>dmesg
  +
[387742.118836] aoe: AoE v47 initialised.</nowiki>}}
  +
aoe-stat тоже ничего не показывал.
  +
<BR>
  +
Однако интерфейс можно изменить на лету, и пересканировать:
  +
{{Root|<nowiki>#aoe-interfaces br0
  +
#aoe-interfaces
  +
br0
  +
#</nowiki>}}
  +
И отсканировав сеть, вижу свое устройство:
  +
{{Root|<nowiki>
  +
#aoe-discover
  +
#aoe-stat
  +
e0.1 250.059GB br0 up </nowiki>}}
  +
  +
{{Root|<nowiki>dmesg
  +
[388723.464726] aoe: 001676d8bb22 e0.1 v4013 has 488397168 sectors
  +
[388723.465748] etherd/e0.1: p1 p2 p3</nowiki>}}
  +
  +
===Работа с диском===
  +
{{Root|<nowiki>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</nowiki>}}
  +
  +
Ну и соответственно с диском можно делать все что и с локальным:
  +
{{Root|<nowiki>
  +
hdparm -t /dev/etherd/e0.1
  +
  +
/dev/etherd/e0.1:
  +
Timing buffered disk reads: 174 MB in 3.02 seconds = 57.56 MB/sec
  +
</nowiki>}}
  +
  +
Правда iostat показывает странную загрузку :)
  +
<PRE>
  +
  +
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
  +
  +
</PRE>

Текущая версия на 15:28, 28 сентября 2012

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