Надоело мне всё время подключать к Macbook Pro внешний диск по USB, и я решил попробовать подключить его по сети с рабочей станции под Ubuntu 11.04. NFS/SMB применять не хочется, мне нужен полноценный диск с HFS+, поэтому вспомнил об iSCSI.

Для настройки со стороны Ubuntu я воспользовался инструкцией "Using iSCSI On Ubuntu 10.04 (Initiator And Target)".

Итак, есть компьютер с Ubuntu 11.04. В него я вставил диск SATA 500 GB. Данные с него мне не нужны, поэтому считаю, что он чистый (не пытайтесь повторить это на диске с нужными данными, они в процессе будут уничтожены). Ubuntu и Macbook Pro подключены в одну сеть гигабитными портами.

Настройка iSCSI Target на Ubuntu 11.04

В терминологии iSCSI Target - это сервер, а Initiator - клиент. На Ubuntu буду настраивать Target.

Идентифицирую диск, который я вставил (также можно посмотреть в GParted):

$ sudo lshw -C disk
*-disk:2
     description: ATA Disk
     product: WDC WD5000KS-00M
     vendor: Western Digital
     physical id: 0.0.0
     bus info: scsi@6:0.0.0
     logical name: /dev/sdc
     version: 07.0
     serial: WD-WMANU1192001
     size: 465GiB (500GB)
     capabilities: gpt-1.00 partitioned partitioned:gpt
     configuration: ansiversion=5 guid=a02ee5be-dd7a-4ec8-a4e7-60b4f1e530a4

Logical name - /dev/sdc.

Для iSCSI можно использовать образ в виде файла в существующей файловой системе, но меня больше интересует LVM, так как доступ будет быстрее. Ставлю утилиты:

$ sudo aptitude install lvm2

Сканирую доступные Volume Groups на физических дисках, их у меня нет:

$ sudo vgscan
  Reading all physical volumes.  This may take a while...
  No volume groups found

Рекомендуется сделать доступными ранее сконфигурированные volume groups:

$ sudo vgchange -a y

Создаю раздел на весь диск для LVM, предварительно удалив другие разделы на диске. Внимание - это опасно, ваши данные будут уничтожены, думайте, перед тем, как это сделать. Запускаю fdisk на мой свежеустановленный диск /dev/sdc (повторяю - двойное внимание).

Список существующих разделов:

$ sudo fdisk /dev/sdc
Command (m for help): p

Disk /dev/sdc: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1               1       60802   488386583+  ee  GPT

Не обращаю внимание на надпись

WARNING: GPT (GUID Partition Table) detected on '/dev/sdc'! The util fdisk doesn't support GPT. Use GNU Parted.

У меня был раздел GPT, он мне не нужен, удаляю его (тройное внимание):

Command (m for help): d1
Selected partition 1

Создаю primary partition на весь размер диска:

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-60801, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-60801, default 60801):
Using default value 60801

Command (m for help): p
   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1               1       60801   488384001   83  Linux

Записываю таблицу разделов

Command (m for help): w
The partition table has been altered!

Появилось устройство /dev/sdc1:

$ ls -al /dev/sdc*
brw-rw---- 1 root disk 8, 32 2011-06-09 12:53 /dev/sdc
brw-rw---- 1 root disk 8, 33 2011-06-09 12:53 /dev/sdc1

Создаю LVM Physical volume на первом разделе

$ sudo pvcreate /dev/sdc1
Physical volume "/dev/sdc1" successfully created

Создаю Volume Group vg0:

$ sudo vgcreate vg0 /dev/sdc1
  Volume group "vg0" successfully created

Смотрю, сколько места доступно:

$ sudo pvscan
  PV /dev/sdc1   VG vg0   lvm2 [465.76 GiB / 465.76 GiB free]
  Total: 1 [465.76 GiB] / in use: 1 [465.76 GiB] / in no VG: 0 [0   ]

Создаю Logical Volume:

$ sudo lvcreate -L465G -n storage_lun1 vg0
The link /dev/vg0/storage_lun1 should had been created by udev but it was not found. Falling back to direct link creation.
Logical volume "storage_lun1" created

С LVM закончено. Если бы понадобилось создать раздел 20 GB для iSCSI в виде файла, то:

$ mkdir /storage
$ dd if=/dev/zero of=/storage/lun1.img bs=1024k count=20000

Ставлю пакет для iSCSI Target:

$ sudo aptitude install iscsitarget

Разрешаю запуск:

$ sudo vim /etc/default/iscsitarget
ISCSITARGET_ENABLE=true

Конфигурирую без всяческого тюнинга. Обратите внимание - в статье на howtoforge говорится о конфигурационных файлах /etc/ietd.conf и /etc/initiators.allow, но они реально находятся в /etc/iet.

$ sudo vim /etc/iet/ietd.conf
Target iqn.2011-06.me.ctrld.udev:storage.lun1
        IncomingUser username password
        OutgoingUser
		Lun 0 Path=/dev/vg0/storage_lun1,Type=fileio
        Alias LUN1

Конечно же, Target name и IncomingUser нужно поменять. Формат Target name такой: qn.yyyy-mm.[:identifier], я брал домен udev.ctrld.me, а номер - по месяцу и году.

Для файла-образа было бы так:

	Lun 0 Path=/storage/lun1.img,Type=fileio

Конфигурирую доступ от Initiator'а к Target'у, для простоты разрешаю доступ из всей моей подсети 192.168.98.0/24

$ sudo vim /etc/iet/initiators.allow
ALL 192.168.98.0/24

Стартую Target:

$ sudo service iscsitarget start

Проверка работы iSCSI Target на Ubuntu, установка iSCSI Initiator

Чтобы на OS X не задумываться, работает ли iSCSI или нет, проверяю сначала его работу на Ubuntu. Более подробно - на howtoforge.

$ sudo aptitude install open-iscsi
$ sudo vi /etc/iscsi/iscsid.conf
node.startup = automatic

Рестартую open-iscsi (он стартовал при установке)

$ sudo service open-iscsi restart

И рестартую Target:

$ sudo service iscsitarget restart

Смотрю, доступен ли Target на 192.168.98.8. Не забывайте, что доступ должен быть разрешён в /etc/iet/initiators.allow и target должен быть описан в /etc/iet/ietd.conf. С самого начала у меня ничего не получилось, так как я правил файлы в /etc, а нужно было использовать в /etc/iet.

$ sudo iscsiadm -m discovery -t st -p 192.168.98.8
192.168.98.8:3260,1 iqn.2011-06.me.ctrld.udev:storage.lun1

Всё правильно.

$ sudo iscsiadm -m node
192.168.98.8:3260,1 iqn.2011-06.me.ctrld.udev:storage.lun1

Вручную произвожу аутентификацию (указываю username и password, сконфигурированные для lun):

$ sudo iscsiadm -m node --targetname "iqn.2011-06.me.ctrld.udev:storage.lun1" --portal "192.168.98.8:3260" --op=update --name node.session.auth.authmethod --value=CHAP
$ sudo iscsiadm -m node --targetname "iqn.2011-06.me.ctrld.udev:storage.lun1" --portal "192.168.98.8:3260" --op=update --name node.session.auth.username --value=username
$ sudo iscsiadm -m node --targetname "iqn.2011-06.me.ctrld.udev:storage.lun1" --portal "192.168.98.8:3260" --op=update --name node.session.auth.password --value=password

Делаю login:

$ sudo iscsiadm -m node --targetname "iqn.2011-06.me.ctrld.udev:storage.lun1" --portal "192.168.98.8:3260" --login

Если получили ошибку, то перепроверьте параметры, может пароль указан неправильно

Logging in to [iface: default, target: iqn.2011-06.me.ctrld.udev:storage.lun1, portal: 192.168.98.8,3260]
iscsiadm: Could not login to [iface: default, target: iqn.2011-06.me.ctrld.udev:storage.lun1, portal: 192.168.98.8,3260]:
iscsiadm: initiator reported error (19 - encountered non-retryable iSCSI login failure)

А вот что выдаётся в случае успешного подключения:

Logging in to [iface: default, target: iqn.2011-06.me.ctrld.udev:storage.lun1, portal: 192.168.98.8,3260]
Login to [iface: default, target: iqn.2011-06.me.ctrld.udev:storage.lun1, portal: 192.168.98.8,3260]: successful

В dmesg можно посмотреть, какое устройство используется:

[11084.522649] scsi12 : iSCSI Initiator over TCP/IP
[11085.529288] scsi 12:0:0:0: Direct-Access     IET      VIRTUAL-DISK     0    PQ: 0 ANSI: 4
[11085.529600] sd 12:0:0:0: Attached scsi generic sg8 type 0
[11085.529928] sd 12:0:0:0: [sdh] 975175680 512-byte logical blocks: (499 GB/465 GiB)
[11085.530118] sd 12:0:0:0: [sdh] Write Protect is off
[11085.530122] sd 12:0:0:0: [sdh] Mode Sense: 77 00 00 08
[11085.530368] sd 12:0:0:0: [sdh] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA
[11085.533666]  sdh: unknown partition table
[11085.533992] sd 12:0:0:0: [sdh] Attached SCSI disk

В моём случае это /dev/sdh. Ничего на Ubuntu делать больше не буду (а так можно было бы в fdisk создать разделы и подмонтировать их), перехожу к OS X, отлогиниваюсь:

$ sudo iscsiadm -m node --targetname "iqn.2011-06.me.ctrld.udev:storage.lun1" --portal "192.168.98.8:3260" --logout

Настройка iSCSI Initiator на Mac OS X 10.6

Штатно iSCSI в Mac OS X 10.6 не поддерживается, нужно ставить сторонние драйвера. Я использовал бесплатный globalSAN iSCSI initiator, нужно указать свои контактные данные и ссылка на софт придёт по email. Придётся перезагрузиться (sic!):

Настройка iSCSI на Ubuntu 11.04 и подключение его к Mac OS X 10.6

После установки появляется Preference Pane в System Preferences:

Настройка iSCSI на Ubuntu 11.04 и подключение его к Mac OS X 10.6

Настройка iSCSI на Ubuntu 11.04 и подключение его к Mac OS X 10.6

Unlock, жму "+". Можно выбрать Target и указать все данные, но я для пробы выбрал Portal. После ввода сервера показываются все сконфигурированные там устройства:

Настройка iSCSI на Ubuntu 11.04 и подключение его к Mac OS X 10.6

Настройка iSCSI на Ubuntu 11.04 и подключение его к Mac OS X 10.6

Настройка iSCSI на Ubuntu 11.04 и подключение его к Mac OS X 10.6

Для простоты прописываю Alias, Error Detection ставлю "Header only", iSCSI Options не меняю

Настройка iSCSI на Ubuntu 11.04 и подключение его к Mac OS X 10.6

Ввожу параметры аутентификации:

Настройка iSCSI на Ubuntu 11.04 и подключение его к Mac OS X 10.6

Выбираю соединение и жму Connect. Если всё в порядке, то индикаторы загорятся зелёным (Connected):

Настройка iSCSI на Ubuntu 11.04 и подключение его к Mac OS X 10.6

и появится сообщение, говорящее, что на подключённом диске нет таблицы разделов:

Настройка iSCSI на Ubuntu 11.04 и подключение его к Mac OS X 10.6

Запускается Disk Utility, наш iSCSI диск - "IET Virtual Disk". Закладка Partition, выбираю нужное количество разделов, имя, применяю:

Настройка iSCSI на Ubuntu 11.04 и подключение его к Mac OS X 10.6

Всё, диск готов и доступен к использованию:

Настройка iSCSI на Ubuntu 11.04 и подключение его к Mac OS X 10.6

Настройка iSCSI на Ubuntu 11.04 и подключение его к Mac OS X 10.6

Скорость записи по гигибитному подключению - 300 Mbps

Настройка iSCSI на Ubuntu 11.04 и подключение его к Mac OS X 10.6

Чтение - 360 Mbps:

Настройка iSCSI на Ubuntu 11.04 и подключение его к Mac OS X 10.6

Есть пока непонятные провалы, но трафик даже в их пределах есть. Буду смотреть, как ведёт себя эта конфигурация.