От
теории перейдём к практике и установим на nas4free embedded AoE target. Ставить и настраивать initiator (клиентскую часть) под Windows будем отдельным постом.
Выбор AoE target под FreeBSD невелик, ставим vblade. Он умеет взять файл и отдать его как AoE диск. Есть и неприятный баг - нельзя отдать zfs zvol блочное устройство. Если вас работа с отдельными файлами устраивает - качаем официальную версию
pkg_add -rKn vblade
и работаем с ней. Если нет - хорошая новость в том, что камрад bormental днями
написал патч, проблему устраняющий.
Мне ближе вариант с zfs zvol по следующим причинам
- все плюшки zfs, включая снапшоты;
- возможность thin provisioning;
- меньше промежуточных слоёв - блочное устройство отдаётся как блочное устройство;
- ненароком испортить zvol существенно сложнее, чем отдельный файл.
Поэтому ниже мы (1) создадим zvol, (2) загрузим и настроим патченый vblade и (3) обеспечим выживание при перезагрузке NAS.
UPD от 30 марта 2014. Опционально см
доработку напильником демонизатора vbladed от камрада RU_Taurus
1. Создание zvol
Идём в вебгуе в Disks|ZFS|Volumes|Volume|Add
значения все достаточно очевидны, кроме галочки sparse volume. Это как раз и есть thin provisioning. Если галочки нет, то том займёт всё пространство, указанное в Size при создании. Если галочку поставить - то создан он будет маленьким, а по мере заполнения - расти, но не больше размера, указанного в Size. В обоих случаях клиенту будет сообщён размер тома Size.
Ср. два тома. Том 100Gb создан именно так и занимает в реальности только 191 мб. А том vol создан статическим и занимает свои 5 гигабайт.
2. Настройка vblade
2.1 Качаем архив с моего яндекс диска
по ссылке(кстати, если у кого-то ещё нет яндекс диска -
приглашаю. Получите гигабайт в плюс (а я полгига)).
2.2 Создадим где-то на диске NAS временную папку, например
mkdir /mnt/Pool/tmp
chmod -R 777 /mnt/Pool/tmp
cd /mnt/Pool/tmp
2.3 Переносим архив, скачанный в п 2.1 в папку /mnt/Pool/tmp (например - через ftp)
2.4 Достаём из архива нужные файлы
Тут надо выбрать постоянное расположение исполняемых файлов vblade. Я выбрал для себя /mnt/Pool/Jail/vblade21_patched
Может и не совсем удачное место, раз джейла не будет - но там же рядом у меня лежит расширение BTSync, тоже к джейлам не относящееся. Вы можете использовать другую папку, главное, чтобы она была на физическом диске и пережила перезагрузку.
tar -xjf vblade21_zvol_patched.tbz
mkdir /mnt/Pool/Jail/vblade21_patched
cp -a sbin /mnt/Pool/Jail/vblade21_patched
ls -la /mnt/Pool/Jail/vblade21_patched/sbin
Должно вывестись что-то очень похожее на
drwxr-xr-x 2 root wheel 4 Feb 15 11:50 .
drwxrwxr-x 5 root wheel 7 Feb 16 23:27 ..
-rwxrwxr-x 1 root wheel 50929 Feb 15 11:25 vblade
-r-xr-xr-x 1 root wheel 161 Jul 10 2013 vbladed
Хорошо, файлы vblade и vbladed лежат в /mnt/Pool/Jail/vblade21_patched/sbin и права у них правильные
2.5 Убираем временные файлы
cd /
rm -rf /mnt/Pool/tmp
2.6 Смотрим имя своего сетевого интерфейса
ifconfig | grep BROADCAST | awk '{print $1}'
у меня отвечает
re0:
2.7 Запускаем вручную AoE target
/mnt/Pool/Jail/vblade21_patched/sbin/vblade 1 1 re0 /dev/zvol/Pool/100Gb
Здесь 1 1 - номера shelf и slot, грубо номер сервера и диска в нём. Если понадобится больше дисков, можно написать 1 2 и так далее.
re0 - имя сетевого интерфейса из п 2.6, обратите внимание, что без двоеточия.
В ответ должно получиться что-то вроде
vblade 1 1 re0 /vblade0
ioctl returned -1
100971520000 bytes
pid 77281: e1.1, 40960000 sectors O_RDWR
Обратите внимание, строка 100971520000 bytes даёт размер блочного устройства, в данном случае - 100Gb. У вас число будет немного другое, это нормально. Если будет ноль - что-то пошло не так. Например, ноль выдаётся при подключении zvol официальной непатченной версией vblade. Или при попытке подключить zvol в джейле.
3. Давайте сделаем так, чтобы всё восстанавливалось после перезагрузки NAS
3.1 Создаём скрипт
cd /mnt/Pool/Jail/vblade21_patched
nano AoE_start.sh
В нём пишем
#!/bin/sh
/mnt/Pool/Jail/vblade21_patched/sbin/vbladed 1 1 re0 /dev/zvol/Pool/100Gb
- то есть такая же строка, как сработала у нас в п 6. Но с важным изменением "vbladed" - с "d" на конце, то есть в виде демона.
Если нам нужно создать несколько AoE дисков - то таких строк должно быть несколько.
3.2 Входим из редактора и даём скрипту права на исполнение
chmod +x AoE_start.sh
3.3 Задаём скрипт /mnt/Pool/Jail/vblade21_patched/AoE_start.sh в System|Advanced|Command scripts как PostInit
3.4 Перезагружаем NAS и смотрим лог - должны быть сообщения, аналогичные тем, что в п 2.7
Теперь
отыщем и настроим инициатор (клиентскую часть) для Windows.
PS Кроме описанного, возможны иные варианты
- создать джейл, установить официальную версию vblade, создать файл, a-la
dd if=/dev/zero of=/mnt/Pool/vblade_file count=20000 bs=1M
подключиться на него. Минус в том, что к zvol из джейла не подключиться - не пускает.
- установить vblade, благо утилита занимает очень мало места и не тащит за собой зависимостей. Особенно удобно на full версии. Для установки можно использовать архив vblade21_zvol_patched.tbz, скачанный с яндекс диска, скормив его утилите pkg_add. В архиве есть всё для этого необходимое.