Копирование lv в ramdisk и подключение к iscsi

Для поддержки клиентов в виртуальных машинах мне периодически требуется быстрый диск для реиндексации файловых баз данных. Если проводить такую реиндексацию на обычном LVM диске то на файловых базах в миллион файлов это занимает до десяти часов. Самая большая база данных у моих клиентов занимает 18 гигабайт дискового пространства, что для современных серверов не так много. И чтобы ускорить эту операцию можно выделить диск в оперативной памяти и там провести реиндексацию. Но если использовать такой диск в памяти самой виртуальной машины то потребуется два часа на то чтобы скопировать этот миллион файлов на RAM disk и обратно (по часу на каждую операцию). Значительно ускорить процесс копирования можно если сделать полный дамп диска в память. Это значительно быстрее и проходит у меня со скоростью 110-150Мб/с против 3-4Мб/с в режиме пофайлового копирования (файлы маленькие и сервисные операции отнимают долю ресурсов). Я поступаю так, что на одной ноде в кластере выделяю 20-ти гигабайтный фрагмент памяти в /dev/shm. Затем копирую туда диск виртуальной машины при помощи dd и nc через сеть. Далее на этой ноде запускаю iscsi-target и монтирую этот диск к windows iscsi-initiator и диск появляется в целевой виртуалке. Важным является то, что объявленный iscsi-target должен иметь физический размер сектора 512 байт! Иначе windows не распознает диск и предложит его отформатировать.

Уou need to format the disk in drive E: before you can use it.

Вот как выглядит содержимое файла конфигурации iscsi-target

# cat /etc/iet/ietd.conf | sed -e 's/^[ \t]*//' -e 's/\#.*$//g' -e '/^$/d'
Target iqn.2001-04.com.vds:ramdisk1
Lun 0 Path=/dev/shm/ramdisk1.img,Type=fileio,ScsiId=xyz,ScsiSN=xyz,IOMode=wt,BlockSize=512

Запуск iscsi-target нужно выполнить команду

# service iscsi-target restart

Нам не требуется запуск iscsi-target при кадом старте системы, так как /dev/shm будет каждый раз чистым. Поэтому проверим, что автозапуск выключен.

# chkconfig | grep iscsi-target
iscsi-target    0:off   1:off   2:off   3:off   4:off   5:off   6:off

После подключения iscsi-target к windows cистема оставит диск offline если смонтировать такой клонированный диск в систему где исходный диск имеется и активен. Активируйте его вручную.

Перемонтировать /dev/shm c размером 5500000 блоков по 4096 байт

# mount /dev/shm -o remount,nr_blocks=5500000

Запускаем dd в режиме приёма данных от nc через сеть на iscsi порту 3260 чтобы лишний раз не настраивать iptables. Но прежде чем это сделать нужно если необходимо остановить iscsi-target так как он занимает этот порт.

# netstat -nlp -A inet | grep ietd
tcp  0  0  0.0.0.0:3260  0.0.0.0:*  LISTEN  2884/ietd           

# service iscsi-target stop
Stopping iSCSI Target:                                     [  OK  ]

# nc -l 3260 | dd of=/dev/shm/ramdisk1.img bs=1M

На передающей стороне команда выглядит так:

# dd if=/dev/VG_POOL0/vm1.vds_disk0 bs=1M | nc 3260; echo -e "\a"

В конце команды я использую «колокольчик» echo -e “\a”. Когда копирование закончится терминал «бзынькнет» динамиком. Следует помнить, что когда копируются диски виртуалку необходимо предварительно остановить иначе файловая система на полученном диске может оказаться повреждённой.

И для завершения мини руководства приведу пример (фрагмент) iptables на хосте с iscsi-target настроенного на приём соединений от хостов в сети 10.0.4.0/24

:ISCSI - [0:0]

-A INPUT -m state --state NEW -m tcp -p tcp --dport 3260 -j ISCSI

-A ISCSI -s 10.0.4.0/24 -j ACCEPT
-A ISCSI -j REJECT --reject-with icmp-host-prohibited