iSCSI
Материал из Xgu.ru
Содержание |
[править] Терминология
- Инициатор (initiator) — iSCSI-клиент.
- Таргет (target [ta:git]; иногда произносят тарджет) — iSCSI-сервер; предоставляет доступ к своим устройствам по iSCSI.
- Обнаружение (discovery) — процесс, в ходе которого инициатору становятся известны доступные ему таргеты.
Существующие на сегодняшний день методы обнаружения:
- iSNS (Internet Storage Name Service);
- SendTargets — таргеты обнаруживаются через специальный адрес обнаружения (discovery-address);
- Использование протокола SLP (Service Location Protocol);
- Статическое указание.
[править] Именование в iSCSI
- IQN (iSCSI qualified name) – имя длиной до 255 символов в следующем формате:
- iqn.<year-mo>.<reversed_domain_name>:<unique_name>
Здесь:
- <year-mo> это год (year) и месяц (mo), когда был зарегистрирован домен;
- <reversed_domain_name> официальное имя домена, записанное в обратном порядке;
- <unique_name> это произвольное имя, например, имя сервера.
Пример: iqn.1998-01.com.mycompany:myserver.
- EUI (extended unique identifier) – Represents the eui. prefix followed by the
16‐character name. The name includes 24 bits for company name assigned by the IEEE and 40 bits for a unique ID such as a serial number. Например, eui.0123456789ABCDEF.
[править] Программное обеспечение
В Linux:
- Open-iSCSI — инициатор iSCSI для Linux;
- iSCSI Enterprise Target — программный таргет iSCSI для Linux.
В FreeBSD инициатор iSCSI входит в состав ядра, начиная с 7.0. Процедура использования инициатора iSCSI в FreeBSD: [1]. Тарджет доступен в виде порта iscsi-target, перенесённого из NetBSD. Подробнее: [2] (англ.), [3] (рус.). В [4] рассказывается как организовать работу инициатора и таргета на FreeBSD, при этом хранить и передавать данные в зашифрованном виде.
[править] Использование iSCSI в Linux
[править] Подготовка iSCSI-таргета
Процедура сборки модуля iscsi_trgt для разных дистрибутивов Linux подробно описана в [5]. Здесь показана процедура сборки для Debian GNU/Linux.
10:51:44 12:11:17 # apt-cache search iscsi target |iscsitarget - iSCSI Enterprise Target userland tools ... |iscsitarget-source - iSCSI Enterprise Target kernel module source |isns - Internet Storage Naming Service |isns-client - Internet Storage Naming Service - cli-client |tgt - Linux target framework user-space tools 12:11:23 # apt-get install iscsitarget-source |Reading package lists... Done |Building dependency tree |Reading state information... Done ...На ядре 2.6.18 не завелось.
Сборка m-a a-i завершается с сообщением об ошибке:
15:50:54 16:50:54 # m-a a-i iscsitarget #l3: err=2 | lqqqqqqqqqqqqqqqqqqqu module-assistant, log file viewer tqqqqqqqqqqqqqqqqqqqqk | x x | x /usr/bin/make -C /lib/modules/2.6.18-6-xen-686/build | x SUBDIRS=/usr/src/modules/iscsitarget/kernel modules a | x make[2]: Entering directory `/usr/src/linux-headers-2.6.18-6-xen-686' a | x CC [M] /usr/src/modules/iscsitarget/kernel/tio.o a | x In file included from /usr/src/modules/iscsitarget/kernel/tio.c:7: a | x /usr/src/modules/iscsitarget/kernel/iscsi.h:242: error: field 'rx_hash' a | x has incomplete type a | x /usr/src/modules/iscsitarget/kernel/iscsi.h:243: error: field 'tx_hash' a | x has incomplete type a | x /usr/src/modules/iscsitarget/kernel/tio.c:113: warning: implicit | x (first use in this function) | x | x| x /usr/src/modules/iscsitarget/kernel/tio.c:113: error: 'tio' undeclared a | mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj | x /usr/src/modules/iscsitarget/kernel/tio.c: In function 'tio_init': a
Попробуем завести на 2.6.25.
Не забывайте, что 2.6.25 уже работает через pv_ops, поэтому нужно использовать соответствующие идентификаторы дисков и консолей.
Если вы собираетесь подключаться к домену через xm console, в гостевом домене нужно поправить файлы /etc/inittab и /etc/securetty (если вы собираетесь заходить как root):
# grep hvc0 /etc/inittab 1h:2345:respawn:/sbin/getty 38400 hvc0 # grep hvc0 /etc/securetty hvc0
На 2.6.25 сборка модуля успешно завершается.
16:2:19 17:05:40 # m-a a-i iscsitarget 17:08:43 # depmod -a 17:09:22 # modprobe iscsi_trgt 17:09:30 # modinfo iscsi_trgt |filename: /lib/modules/2.6.25-2-xen-686/kernel/drivers/iscsi/iscsi_trgt.ko |license: GPL |depends: |vermagic: 2.6.25-2-xen-686 SMP mod_unload 686 |parm: debug_enable_flags:ulong
После того как сборка модуля ядра завершилась,
можно приступать к инсталляции и настройке
программ.
16:11:56 17:11:56 # modinfo iscsi_target #l3: err=1 |modinfo: could not find module iscsi_target 17:12:04 # modinfo iscsi_t #l3: err=1 |iscsi_tcp iscsi_trgt 17:12:04 # modinfo iscsi_trgt |filename: /lib/modules/2.6.25-2-xen-686/kernel/drivers/iscsi/iscsi_trgt.ko |license: GPL |depends: |vermagic: 2.6.25-2-xen-686 SMP mod_unload 686 |parm: debug_enable_flags:ulong 17:12:08 # apt-cache search open iscsi |open-iscsi - High performance, transport independent iSCSI implementation 17:49:24 # apt-cache search iscsi target |iscsitarget - iSCSI Enterprise Target userland tools |iscsitarget-modules-2.6-486 - Driver for iSCSI Enterprise Target modules for Linux 2.6 on x86 |iscsitarget-modules-2.6-686 - Driver for iSCSI Enterprise Target modules for Linux 2.6 on PPro/Celeron/PII/PIII/P4 |iscsitarget-modules-2.6-686-bigmem - Driver for iSCSI Enterprise Target modules for Linux 2.6 on PPro/Celeron/PII/PIII/P4 |iscsitarget-modules-2.6-amd64 - Driver for iSCSI Enterprise Target modules for Linux 2.6 on AMD64 |iscsitarget-modules-2.6-vserver-686 - Driver for iSCSI Enterprise Target modules for Linux 2.6 on PPro/Celeron/PII/PIII/P4 |iscsitarget-modules-2.6-xen-686 - Driver for iSCSI Enterprise Target modules for Linux 2.6 on i686 |iscsitarget-modules-2.6.25-2-486 - Driver for iSCSI Enterprise Target modules for Linux 2.6.25 on x86 |iscsitarget-modules-2.6.25-2-686 - Driver for iSCSI Enterprise Target modules for Linux 2.6.25 on PPro/Celeron/PII/PIII/P4 |iscsitarget-modules-2.6.25-2-686-bigmem - Driver for iSCSI Enterprise Target modules for Linux 2.6.25 on PPro/Celeron/PII/PIII/P4 |iscsitarget-modules-2.6.25-2-amd64 - Driver for iSCSI Enterprise Target modules for Linux 2.6.25 on AMD64 |iscsitarget-modules-2.6.25-2-vserver-686 - Driver for iSCSI Enterprise Target modules for Linux 2.6.25 on PPro/Celeron/PII/PIII/P4 |iscsitarget-modules-2.6.25-2-xen-686 - Driver for iSCSI Enterprise Target modules for Linux 2.6.25 on i686 |iscsitarget-source - iSCSI Enterprise Target kernel module source |isns - Internet Storage Naming Service |isns-client - Internet Storage Naming Service - cli-client |tgt - Linux target framework user-space tools |iscsitarget-module-2.6.25-2-xen-686 - iSCSI Enterprise Target module for Linux (kernel 2.6.25-2-xen-686) 17:49:31 # apt-get install iscsitarget #l3: err=130 |Reading package lists... Done |Building dependency tree |Reading state information... Done |The following NEW packages will be installed: | iscsitarget |0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. |Need to get 54.4kB of archives. |After this operation, 147kB of additional disk space will be used. |0% [Waiting for headers]^C 17:50:39 # apt-get install iscsitarget |Reading package lists... Done |Building dependency tree |Reading state information... Done |The following NEW packages will be installed: | iscsitarget |0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. |Need to get 54.4kB of archives. |After this operation, 147kB of additional disk space will be used. |Get:1 http://192.168.72.2 sid/main iscsitarget 0.4.16+svn162-1 [54.4kB] |Fetched 54.4kB in 0s (110kB/s) |Selecting previously deselected package iscsitarget. |(Reading database ... 31340 files and directories currently installed.) |Unpacking iscsitarget (from .../iscsitarget_0.4.16+svn162-1_i386.deb) ... |Processing triggers for man-db ... |Setting up iscsitarget (0.4.16+svn162-1) ... |Starting iSCSI enterprise target service: succeeded. 17:51:40 # dpkg -L iscsitarget |/. |/usr |/usr/sbin |/usr/sbin/ietd |/usr/sbin/ietadm |/usr/share |/usr/share/lintian |/usr/share/lintian/overrides |/usr/share/lintian/overrides/iscsitarget |/usr/share/doc |... |/usr/share/man/man8/ietadm.8.gz |/usr/share/man/man8/ietd.8.gz |/usr/share/man/man5 |/usr/share/man/man5/ietd.conf.5.gz |/etc |/etc/ietd.conf |/etc/initiators.allow |/etc/initiators.deny |/etc/init.d |/etc/init.d/iscsitarget 17:51:47 # vi /etc/ietd.conf |--- /tmp/l3-saved-2515.6749.16302 2008-07-21 14:51:56.000000000 +0000 |+++ /etc/ietd.conf 2008-07-21 14:53:48.000000000 +0000 |@@ -29,15 +29,17 @@ | # Users, who can access this target. The same rules as for discovery | # users apply here. | # Leave them alone if you don't want to use authentication. |+ IncomingUser |+ OutgoingUser | #IncomingUser joe secret | #OutgoingUser jim 12charpasswd | # Logical Unit definition | # You must define one logical unit at least. | # Block devices, regular files, LVM, and RAID can be offered | # to the initiators as a block device. |- #Lun 0 Path=/dev/sdc,Type=fileio |+ Lun 0 Path=/dev/xvda2,Type=fileio | # Alias name for this target |- # Alias Test |+ Alias Test | # various iSCSI parameters | # (not all are used right now, see also iSCSI spec for details) | #MaxConnections 1
# /etc/init.d/iscsitarget restart
[править] Подготовка iSCSI-инициатора
11:5:36 12:05:51 # pkill -1 l3-agent 12:05:59 # apt-cache search open iscsi |open-iscsi - High performance, transport independent iSCSI implementation 12:09:16 # apt-get install open-iscsi |Reading package lists... Done |Building dependency tree |Reading state information... Done
11:5:36 18:04:24 # /etc/init.d/open-iscsi start |Starting iSCSI initiator service: iscsid. |Setting up iSCSI targets: |iscsiadm: No records found! |. |Mounting network filesystems:.
11:5:36 18:04:39 # iscsiadm -m discovery -t st -p 192.168.80.204 |192.168.80.204:3260,1 iqn.2001-04.com.example:storage.disk2.sys1.xyz
Подключение диска:
%# iscsiadm -m node -T iqn.2001-04.com.example:storage2.disk2.sys1.xyz --login
Просмотр установленных iscsi-соединений (с ключом -P[0-3] для большей детализации):
%# iscsiadm -m session -P1
[править] Подключение устройств
Просмотр сеансов подключения к таргету?
#cat /proc/net/iet/session tid:2 name:iqn.2001-04.com.example:storage2.linux10.unix.nt sid:844424967684608 initiator:iqn.1993-08.org.debian:01:62bca097b921 cid:0 ip:192.168.15.2 state:active hd:none dd:none tid:1 name:iqn.2001-04.com.example:storage1.linux10.unix.nt sid:1125899961172480 initiator:iqn.1993-08.org.debian:01:62bca097b921 cid:0 ip:192.168.15.2 state:active hd:none dd:none sid:562950024528384 initiator:iqn.1993-08.org.debian:01:b72f24a5324b cid:0 ip:192.168.15.3 state:active hd:none dd:none
[править] Использование iSCSI в FreeBSD
[править] FreeNAS
- Основная страница: FreeNAS
FreeNAS это готовый NAS-сервер, поддерживающий протоколы CIFS, FTP, NFS, AFP, RSYNC, iSCSI, программный RAID (0,1,5) и полную интеграцию с web-интерфейсом. Он занимает меньше чем 32MB на диске (или Flash-диске). Минимальный дистрибутив FreeBSD, положенный в основу FreeNAS, web-интерфейс и PHP-скрипты основываются на M0n0wall.
[править] Использование iSCSI в VMware ESX Server
VMware ESX Server поддерживает iSCSI для доступа к хранилищам с образами виртуальных машин.
[править] Терминология: сеансы, соединения
- Источник: [6]
> > First of all: Thanks for the possibility to ask questions > here. I compiled and > installed the iscsitarget 1.4.19 on CentOS 5.4 x86_32 (Linux > gate.dentikum.ch > 2.6.18-164.el5 #1 SMP Thu Sep 3 03:33:56 EDT 2009 i686 i686 > i386 GNU/Linux) > and configured it with the following /etc/iet/ietd.conf: > > Target iqn.2010-01.ch.intersoft-networks:storage.lun1 > # IncomingUser > # OutgoingUser > # Lun 0 Path=/install/iscsi.img,Type=fileio > Lun 0 Path=/install/iscsi.img,Type=fileio > Alias LUN1 > InitialR2T Yes > ImmediateData Yes > # MaxOutstandingR2T 8 > MaxConnections 5 > MaxSessions 0 ... [show rest of quote] MaxSessions needs to be at least 1, the code should enforce this, I need to make sure it does, because it sounds like it doesn't. IET only supports MaxConnections 1 for now. MaxConnections is # of TCP connections per session. > When I try to start the daemon it hangs always after some > operations (strace > at the end). > > To my other question: This is a test installation for a later > iscsi target for > a VMWare ESXi cluster as data storage. When I set > MaxConnections to a other > setting than 1 it brings always the message: > > iscsi_trgt: sess_param_check(46) max_connections: 5 is out of > range (1 1) > So my question: Is it even possible to open more than one > connection to a > target? ... [show rest of quote] Currently IET doesn't support Multiple Connections per Session. Hopefully we should get that working soon. To help out a bit in understanding the relationships. IET +-> Target | +-> Volume | +-> Volume | +-> Session (Initiator) | | +-> Connection | | +-> Connection | +-> Session (Initiator) | +-> Connection | +-> Connection +-> Target +-> Volume +-> Volume +-> Session (Initiator) | +-> Connection | +-> Connection +-> Session (Initiator) +-> Connection +-> Connection Typically you would have multiple volumes per target if they are to be used together, such as a cluster that has one volume as a quorum and other data volumes, or say for VMware were multiple volumes are concatinated to expand a VMFS datastore. Otherwise it usually is one volume per target. The first volume for each target MUST be LUN 0.
[править] Загрузка компьютера по iSCSI
Although I'm not sure how up-to-date those pages are.. Anyway, the basic idea for iSCSI boot nowadays is that the iSCSI boot initiator (BIOS, NIC or firmware) doing the initial boot up (loading GRUB from the disk, int13h emulation) should fill up iBFT table with iSCSI NIC/IP configuration info, and also the target/LUN info. The booted OS can then set up it's iscsi software initiator based on the info in iBFT table. iBFT table is stored in memory. RHEL 5.2 (and CentOS 5.2) already supports this. Microsoft iSCSI software initiator (boot version) also supports iBFT, I think. So yeah.. to support iSCSI boot for HVM guests would mean being able to specify iBFT information in the domain configuration, and that information should end up in iBFT table in HVM domain memory. And then there should be int13h emulation using that same iBFT information so that bootloaders (GRUB) work...
Сетевые карты производства Intel умеют выполнять загрузку по iSCSI.
I think broadcom server NICs support iSCSI boot too. broadcom+dell: http://www.dell.com/downloads/global/power/ps4q07-20070596-Broadcom.pdf press releases: http://www.embeddedstar.com/press/content/2004/10/embedded16905.html http://www.linuxelectrons.com/news/hardware/14128/broadcoms-iscsi-block-storage-over-ethernet-delivers-high-performance http://www.broadcom.com/press/release.php?id=635611 http://www.byteandswitch.com/document.asp?doc_id=61762 http://news.thomasnet.com/companystory/810702 also, IBM blades contain iBFT capable iSCSI initiator in their BIOS, allowing iSCSI boot without HBA.
Дополнительная информация о том как выполнять загрузку узлов без использования iSCSI HBA, пользуясь только обычной сетевой картой и таблицей iBFT:
- http://etherboot.org
- http://etherboot.org/wiki/sanboot
- http://www.etherboot.org/wiki/iscsiboot
- http://www.etherboot.org/wiki/ibft
[править] Дополнительная информация
- http://www.open-iscsi.org/ (англ.)
- Using Volumes as iSCSI Targets (англ.)
- (Xen-users) Xen and iSCSI (англ.) — огромнейшее обсуждение вопросов использования iSCSI, GNBD и других SAN-технологий совместно с Xen
- Analysis of iSCSI Target Software (англ.) — анализ программного таргета iSCSI для Linux
- Настройка службы iSCSI на сервере FreeBSD