Дешевая альтернатива iSCSI

Рано или поздно, в домашних условиях, в небольшой или крупной фирме, возникает необходимость увеличения дискового пространства. Самый простой способ – поменять (или добавить) винчестеры, но это далеко не всегда возможно. Тогда на ум сразу же приходит мысль об iSCSI. Данный протокол базируется на TCP/IP и разработан для установления взаимодействия между различными устройствами хранения данных и управления ими. Он стандартизован по RFC 3720, имеется множество его реализаций, как свободных так и платных, в том числе есть готовые драйверы от Майкрософт. iSCSI достаточно сложный протокол, включая спецификации по шифрованию, маршрутизации и другим вопросам. Но и реализация данного протокола может оказаться достаточно дорогой (обычно его реализуют для стойки из трех компонентов, два из них это процессорные модули, а один собственно модуль iSCSI, не считая UPS, сетевых и других компонентов).

Некоторые также хотят еще получить возможность удаленного сохранения данных (или возможность быстро их унести) при этом, зачастую, к сохранности не предъявляются особые требования (достаточно резервного копирования).

В этом случае лучше всего подходит доступ к данным по протоколам FTP или SMB. При чем SMB реализуется очень просто и поддерживается всеми ОС Windows изначально. Но эти протоколы не всегда подходят, иногда нужно иметь именно “жесткий диск”, например не все программы могут устанавливаться на сетевой путь (и практически ни одна по FTP), не все программы могут работать с данными на сетевых ресурсах (взять тот же MS SQL сервер). Но покупать новый сервер или iSCSI не представляется выгодным и возможным. Тем более, что несмотря на большой объем данных использоваться он может не очень активно. И тогда можно вспомнить о протоколе AoE: ATA over Ethernet. Данный протокол очень прост (размер документации всего 8 страниц). Данный протокол работает поверх Ethernet, и в общем случае не требует протоколов TCP/IP. Ввиду простоты он обеспечивает неплохое быстродействие и низкую стоимость. Есть у него и недостатки. Это в первую очередь отсутствие механизмов обеспечения безопасности, так как ATA протокол инкапсулируется в Ethernet кадры. По этой же причине невозможна маршрутизация (то есть AoE может работать только в пределах одной локальной сети). Нет в AoE никакой проверки на ошибки (и тем более восстановления), кроме той что есть в самом протоколе Ethernet. Ну и ввиду особенностей реализации нельзя разбивать Ethernet кадры (что для локальной сети практически всегда выполняется).

Из особенностей протокола, вытекает как лучше его использовать. Для сервера (или группы серверов) лучше иметь выделенную сеть Ethernet с отдельной сетевой картой, со скоростью не менее 1 Гбит. Сервер будет играть роль клиента протокола AoE и очень удобно использовать под виртуальной машиной. В эту же сеть будет включаться устройство, изображающее сервер AoE, на котором будет находиться дисковый массив. В общем случае этот массив вида RAID5 или RAID10 (так же часто делают и для iSCSI, только скорость выбирают не менее 10 Гбит). С этого дискового массива “виртуальные” “жесткие диски” будут монтироваться на сервере.

Рассмотрим реальный пример подобного применения. В качестве сервера будем использовать Windows Server 2003 x64 (можно и 2008 и х32). В качестве дискового массива выберем D-Link DNS-323, представляющий собой сетевой дисковый массив с 2 отсеками для жестких дисков SATA максимальной емкости 750 Гб каждый. Жесткие диски можно объединить в RAID 0, RAID 1 или оставить отдельными. Тут можно дать следующие рекомендации: если Вам очень важна сохранность данных, и при этом монтируемые “жесткие диски” не нужны большого размера (менее 300 Гб), то нужно инициализировать и отформатировать винчестеры под RAID1. Если Вам нужен один диск, соразмерный с размером винчестера (и возможно несколько маленьких), то используйте жесткие диски по отдельности. Если Вы заранее не знаете размеры будущих монтируемых “жестких дисков” и важен быстрый доступ, используйте RAID0.

Для начала настроим DNS-323. Во-первых, следуя инструкции нужно обновиться до последней версии (на данный момент это версия 1.5). Следует обратить внимание, что если до этого стояла версия менее чем 1.4, то винчестеры нужно переформатировать и переинициализировать в обязательном порядке. После этого нужно, используя интерфейс управления, отключить все неиспользуемые службы (например, ftp сервер). Так как в стандартной прошивке отсутствует поддержка AoE, нужно ее немного “модернизировать”. К этому моменту нужно окончательно определиться с распределением места и отформатировать винчестеры в выбранном режиме. Чтобы определиться выбираем RAID0, и форматируем винчестеры в этом режиме.

Приступаем к модернизации. Для этого установим FUN-PLUG 0.5, скопируйте два файла fun_plug и fun_plug.tgz на диск Volume1 DNS-323 и затем его перегрузите. Подождите 3 минуты, после чего зайдите на DNS-323 с помощью telnet. Для этого лучше всего использовать утилиту putty, но можно просто из командной строки Windows XP или Vista (для последней нужно через установку и добавление компонентов ОС добавить клиент telnet).

Следующий этап: установка optware. Войдя по telnet, выполните следующие команды:

cd /mnt/HD_a2/
mkdir ipkg
cd ipkg
wget http://ipkg.nslu2-linux.org/feeds/optware/dns323/cross/unstable/ipkg-opt_0.99.163-10_arm.ipk
tar -xzf ipkg-opt_0.99.163-10_arm.ipk
tar -xzf data.tar.gz
mkdir -p /opt
mount --bind /mnt/HD_a2/ipkg/opt /opt
export PATH=/opt/bin:/opt/sbin:$PATH
echo src dns323 http://ipkg.nslu2-linux.org/feeds/optware/dns323/cross/unstable >> /opt/etc/ipkg.conf
ipkg update
ipkg install nano
nano /ffp/start/optware.sh

затем в открывшееся “окошко” вствьте текст:

mkdir -p /opt
mount --bind /mnt/HD_a2/ipkg/opt /opt
export PATH=/opt/bin:/opt/sbin:$PATH
for i in /opt/etc/init.d/S??* ;do
[ ! -f "$i" ] && continue
case "$i" in
*.sh)
(
trap - INT QUIT TSTP
set start
. $i
)
;;
*)
$i start
;;
esac
done

Нажмите Ctrl+X , затем Y и Enter. Тем самым был создан файл nano /ffp/start/optware.sh.

Затем выполните:

chmod a+x /ffp/start/optware.sh
ipkg install vblade
nano /ffp/start/vbladed.sh

Предпоследней командой устанавливаем пакет vblade, который собственно и является сервером AoE. Последней командой редактируем скрипт автоматической раздачи дисков нашего сервера AoE.

Введите:

/mnt/HD_a2/ipkg/opt/sbin/vblade 1 1 egiga0 /mnt/HD_a2/DISKS/disk11.fs;

Сохраните файл: (нажмите Ctrl+X , затем Y и Enter)

И введите команду

chmod a+x /ffp/start/vbladed.sh

На этом этапе установка сервера AoE (а именно vblade окончена). Теперь нужно настроить какие именно диски будут передаваться по протоколу AoE. Для этого рассмотрим синтаксис команды vblade: vblade [ -m mac[,mac…] ] shelf slot netif filename, где:

mac – это локальный MAC адрес, так как сетевая карта у DNS-323 одна, параметр для нас не актуален;

shelf и slot – номера от 0 до 254 (может быть и больше, но лучше не использовать), эта пара номеров должна быть уникальна в данной локальной сети, именно по ней и будет в дальнейшем монтироваться диск;

netif – сетевой интерфейс, для DNS-323 это значение всегда egiga0;

filename – указатель на файл, содержащее устройство жесткого диска. Тут можно передать непосредственно весь жесткий диск целиком. Так как мы инициализировали дисковый массив как RAID0, то неразумно отдавать весь диск целиком. Для этого создадим “виртуальный” файл – винчестер.

Создадим на нашем массиве каталог DISKS в котором и будут лежать данные файлы и создадим файл disk11.fs:

mkdir /mnt/HD_a2/DISKS
dd if=/dev/zero of=/mnt/HD_a2/DISKS/disk11.fs bs=10240 count=1048576

данная команда dd создает файл, размером с 10485760 блоков по 10240 байт, то есть 100 Гб. Размер блока для DNS-323 лучше не выбирать больше 102400 байт, исходя из этого выбираем первую цифру.

Теперь подробнее рассмотрим файл /ffp/start/vbladed.sh. Этот файл будет выполняться при каждой перезагрузке DND-323. В нашем случае он содержит всего одну строчку. Отредактируем ее, выполнив команду:

nano /ffp/start/vbladed.sh

Строчка начинается с символа # который комментирует строчку. Далее содержится команда инициализации “диска” в виде файла /mnt/HD_a2/DISKS/disk11.fs, который мы только что создали и присваивает ему номера 1 и 1. Сохраним файл.

Чтобы проверить как это будет работать выполним команду:

vblade 1 1 egiga0 /mnt/HD_a2/DISKS/disk11.fs

в результате должны увидеть сообщение вида:

pid 1615: e1.1, 209715200 sectors O_RDWR

где первая цифра – это номер процесса в памяти (можно увидеть командой ps), e1.1 – это версия нашего диска исходя из тех номеров, что выполнялись в команде (в нашем случае 1 и 1), последняя цифра – это колличество “виртуальных” секторов и оканчивается режимом доступа к диску (в данном случае чтение и запись, если бы таким образом вывести CD-ROM, то доступ был бы только чтение).

Итак, настройку сервера AoE (дискового массива закончили), приступим к клиенту в виде Windows Server 2003 Enterprise Edition x64. Стандартных драйверов AoE Microsoft не предусмотрела. Поэтому качаем свободный драйвер WinAoE. Скачав последнюю версию, на сегодня это файл winaoe-0.97g.zip, распаковав его, стандартным способом устанавливаем новое оборудование, указав что драйвер нужно брать из папки, в которую распаковали драйвер. Перегружаем систему. Проверяем, для этого запустим командную строку (Пуск – Выполнить – ввести cmd, нажать кнопку “Выполнить”). В командной строке введем команду:

aoe scan

Увидим результат типа:

Client NIC Target Server MAC Size
00:04:33:a4:46:57 e1.1 00:18:4b:bc:4d:b1 102400M

То есть диск доступен. Подключим его:

aoe mount 00:04:33:a4:46:57 1 1

Обратите внимание, вводить нужно MAC адрес клиента (своего компьютера), а не сервера, но интерфейса который подключен к DNS-323, а номера соответствую номерам в e1.1. После подключения диск доступен в системе, но не забывайте – при первом подключении он не форматирован и система “не знает”, какую букву использовать. Чтобы отформатировать диск через панель “Администрирование” запустим оснастку “Управление компьютером”. В ней выберем пункт “Управление дисками”. Выбрав нужный диск, используя правую кнопку мыши нужно выбрать пункт “Инициализировать”, в результате “виртуальный” винчестер будет проинициализирован как диск MBR. Я рекомендую переинициализировать диск как GPT диск (после форматирования это будет невозможно), так как GPT диск в данном применении более надежен. В дальнейшем можно будет преобразовать диск в динамический и создать из нескольких дисков RAID массив. Теперь диск можно отформатировать (лучше всего использовать основной NTFS раздел) и присвоить букву.

Для того, чтобы диск автоматически монтировался при каждом запуске операционной системы создадим файл: C:WINDOWSsystem32aoed.cmd следующего содержания:

echo | aoe mount 00:04:33:a4:46:57 1 1

Комментировать статью можно тут.