Надоело мне всё время подключать к 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.
Для файла-образа было бы так:
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!):
После установки появляется Preference Pane в System Preferences:
Unlock, жму “+”. Можно выбрать Target и указать все данные, но я для пробы выбрал Portal. После ввода сервера показываются все сконфигурированные там устройства:
Для простоты прописываю Alias, Error Detection ставлю “Header only”, iSCSI Options не меняю
Ввожу параметры аутентификации:
Выбираю соединение и жму Connect. Если всё в порядке, то индикаторы загорятся зелёным (Connected):
и появится сообщение, говорящее, что на подключённом диске нет таблицы разделов:
Запускается Disk Utility, наш iSCSI диск - “IET Virtual Disk”. Закладка Partition, выбираю нужное количество разделов, имя, применяю:
Всё, диск готов и доступен к использованию:
Скорость записи по гигибитному подключению - 300 Mbps
Чтение - 360 Mbps:
Есть пока непонятные провалы, но трафик даже в их пределах есть. Буду смотреть, как ведёт себя эта конфигурация.