Дешевая аль­тер­на­ти­ва 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

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