Xgu.ru теперь в Контакте  — приходите и подключайтесь.
Пока мы работаем над следующими видео, вы можете подключиться в Контакте. Познакомимся и обсудим новые страницы и ролики.

Vk-big.pngYoutube-big.jpeg

iSCSI

Материал из Xgu.ru

Перейти к: навигация, поиск


stub.png
Данная страница находится в разработке.
Эта страница ещё не закончена. Информация, представленная здесь, может оказаться неполной или неверной.

Если вы считаете, что её стоило бы доработать как можно быстрее, пожалуйста, скажите об этом.


Содержание

[править] Терминология

  • Инициатор (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:

В 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:

[править] Дополнительная информация

Xentaur
Дисковая подсистема
Linux | FreeBSD

Диски и разделы
Файлы устройств: Блочное устройство | Символьное устройство | Raw-устройство | loop-устройство
Диски: IDE | SATA (SATA hotplug) | SCSI | USB
RAID-массивы: Аппаратный RAID | Linux RAID | FreeBSD RAID
Дисковые разделы: Раздел | MBR | fdisk | parted | disklabel | GPT

Управление томами
Логический том | Физический том | Группа томов | Снимок | Клон
device-mapper | dm-ioband | dm-crypt | dm-userspace | multipath
Системы управления томами: LVM | CLVM | EVMS | Btrfs* | ZFS* | AdvFS* | Zumastor

Сетевые хранилища и репликация
Отказоустойчивость: DRBD | Xen + DRBD | ggate + gmirror | HAST
Сетевые хранилища: AoE | iSCSI | FCoE | GNBD

Файловые системы
Монтирование | Проверка целостности | Дефрагментация | Суперблок | inode | Журнал | Кэш | VFS | UUID | FUSE
Локальные: ext3 | ext3cow | ext4 | JFS | Reiser4 | XFS | ZFS | Btrfs | AdvFS | ISO | aufs
Сетевые: NFS | CIFS | AFS | POHMELFS
Кластерные: GFS | OCFS2 | CXFS | VMFS | GPFS
Распределенные: Lustre | PVFS | Ceph | Coda

* Btrfs, ZFS и AdvFS — это файловые системы с возможностями управления томами
Источник — «http://2.xgu.ru/wiki/iSCSI»