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