FastNetMon

Thursday, 3 July 2014

Installing KVM virtual machines on ploop disk images

What is ploop?

Ploop is modern disk image format from OpenVZ project. There are lot of similar formats like qcow, vmdk and many else.

But ploop has few really important improvements agains they all:
  • ploop can overcommit disk space like sparsed images but without speed overhead
  • ploop can compact VM after freeing up space in filesystem wihtout downtime!
  • ploop can do fast consistent snapshots out of the box
  • KVM and OpenVZ can work over ploop together
  • ploop can work over clustered Parallels Cloud Storage! 
But ploop is NOT real block device and you can't install Windows or Linux using standard installer. 

It's looks like LVM for VM which done in right way. You can read more about ploop here:  http://openvz.org/Ploop

 Because ploop is an in kernel part of OpenVZ project you need to download OpenVZ kernel and install it:
wget -P /etc/yum.repos.d/ http://ftp.openvz.org/openvz.repo
rpm --import http://ftp.openvz.org/RPM-GPG-Key-OpenVZ
yum install vzkernel ploop
After this we need load kernel driver which do main work for ploop:
modprobe ploop
 And now create image and mount it:
mkdir /root/ploop_kvm
ploop init -s 15G /root/ploop_kvm/testploophdd.img
ploop mount /root/ploop_kvm/DiskDescriptor.xml
After this operations you will got folowing output:
Opening delta /root/ploop_kvm/testploophdd.img
Adding delta dev=/dev/ploop20722 img=/root/ploop_kvm/testploophdd.img (rw)
Please take a look at /dev/ploop20722, it's our device name which we need pass to KVM.
 
For testing purposes I will install this KVM container from OpenVZ os template (root tar.gz):
mount /dev/ploop20722p1 /mnt
wget http://download.openvz.org/template/precreated/debian-6.0-x86_64-minimal.tar.gz -O/root/debian-6.0-x86_64-minimal.tar.gz
tar -xf debian-6.0-x86_64-minimal.tar.gz -C /mnt
 
We need prepare chroot for loading VM:
chroot /mnt
apt-get install -y linux-image-2.6.32-5-amd64
depmod -a 2.6.32-5-amd64
vim /mnt/etc/fstab
/dev/sda1 / ext4 defaults 0 0

And for correct VM loading please put kernel and initrd into folder /opt/kernels because I can't install grub on ploop (but I think it's really possible).


Start VM:
/usr/libexec/qemu-kvm -vnc 159.xx.xx.yy:1 --initrd /opt/kernels/debian6/initrd.img-2.6.32-5_45-amd64 --kernel /opt/kernels/debian6/vmlinuz-2.6.32-5_45-amd64 --hdc /dev/ploop20722 --append 'root=/dev/sda1'
For unmounting after shutdown you need call this command:
ploop umount /root/ploop_kvm/DiskDescriptor.xml
As downside I should notify about ability to login into VM for compacting or resizing images but it's really not an problem.

Please be very careful with using this guide in production because it's NOT TESTED at all.

Wednesday, 2 July 2014

Using ZFS with OpenVZ: OpenVZFS

In this manual we will install OpenVZ on top of ZFS on CentOS 6. More documentation about ZVOL: http://zfsonlinux.org/example-zvol.html

Installing OpenVZ 

 

At first you should install OpenVZ kernel and userspace using this guide http://openvz.org/Quick_installation:
wget -P /etc/yum.repos.d/ http://ftp.openvz.org/openvz.repo
rpm --import http://ftp.openvz.org/RPM-GPG-Key-OpenVZ
yum install vzkernel vzctl vzquota ploop
shutdown -r now
At second please reboot to OpenVZ kernel and _after_ this install OpenZFS packages:
yum remove kernel
yum install -y vzkernel-devel
rpm -ihv http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
yum localinstall -y --nogpgcheck http://archive.zfsonlinux.org/epel/zfs-release$(rpm -E %dist).noarch.rpm
yum update -y
yum install zfs -y
ZFS kernel modules will be installed using DKMS and will be recompiled for new kernels automatically.

Check ZFS loading:
zpool status
no pools available
Create ZFS pool with name vzpool (don't use name "vz" because it already used by OpenVZ's /vz partition):
zpool create -f vzpool mirror /dev/sdc /dev/sdd

Integrate ZFS with OpenVZ

 

Create OpenVZ container with simfs layout model:
vzctl create 101 --layout simfs --name zfs.ru --ostemplate debian-7.0-x86_64
Create ZFS zvol for 10G:
zfs create -V 10G vzpool/ct101
We can use sparse allocation and specify block size. But it's _VERY DANGEROUS_, please read documentation after doing something!
The reservation is kept equal to the volume’s logical size to prevent unexpected behavior for consumers. Without the reservation, the volume could run out of space, resulting in undefined behavior or data corruption, depending on how the volume is used. These effects can also occur when the volume size is changed while it is in use (particularly when shrinking the size). Extreme care should be used when adjusting the volume size. Though not recommended, a "sparse volume" (also known as "thin provisioning") can be created by specifying the -s option to the zfs create -V command, or by changing the reservation after the volume has been created. A "sparse volume" is a volume where the reservation is less then the volume size. Consequently, writes to a sparse volume can fail with ENOSPC when the pool is low on space. For a sparse volume, changes to volsize are not reflected in the reservation.

-b blocksize
Equivalent to -o volblocksize=blocksize. If this option is specified in conjunction with -o volblock-size, the resulting behavior is undefined.
Create GPT partition table on created zvol:
parted -s /dev/vzpool/ct101 mklabel gpt
Create one partition for whole disk:
parted /dev/vzpool/ct101 "mkpart primary 1 -1"
Create ext4 filesystem on zvol:
mkfs -t ext4 -j -b4096 -Elazy_itable_init,resize=4294967295 -Jsize=128 /dev/vzpool/ct101-part1
And move container to this filesystem:
mkdir /mnt/101
mount /dev/vzpool/ct101-part1 /mnt/101
cp -a /vz/private/101/* /mnt/101/
umount /mnt/101
sync
Remove old container body:
rm -rf /vz/private/101/
And replace it by mounted ZFS zvol:
mkdir /vz/private/101
mount /dev/vzpool/ct101-part1 /vz/private/101
Mount container:
vzctl mount 101
Check files in /vz/root/101:
LANG=C ls -al /vz/root/101/
total 92K
drwxr-xr-x 23 root root 4.0K Jun 27 02:38 .
drwx------  3 root root 4.0K Jul  2 12:35 ..
drwxr-xr-x  2 root root 4.0K Jun 27 02:38 bin
drwxr-xr-x  2 root root 4.0K Jun 27 02:37 boot
drwxr-xr-x  2 root root 4.0K Jun 27 02:36 dev
drwxr-xr-x 81 root root 4.0K Jul  2 12:35 etc
-rw-r--r--  1 root root    0 Jun 27 02:36 fastboot
drwxr-xr-x  2 root root 4.0K Jun 27 02:37 home
drwxr-xr-x 11 root root 4.0K Jun 27 02:37 lib
drwxr-xr-x  2 root root 4.0K Jun 27 02:37 lib64
drwx------  2 root root 4.0K Jun 27 02:36 lost+found
drwxr-xr-x  2 root root 4.0K Jun 27 02:37 media
drwxr-xr-x  2 root root 4.0K Jun 27 02:37 mnt
drwxr-xr-x  2 root root 4.0K Jun 27 02:37 opt
dr-xr-xr-x  2 root root 4.0K Jun 27 02:36 proc
drwx------  2 root root 4.0K Jun 27 02:37 root
drwxr-xr-x  2 root root 4.0K Jun 27 02:38 run
drwxr-xr-x  2 root root 4.0K Jun 27 02:37 sbin
drwxr-xr-x  2 root root 4.0K Jun 27 02:37 selinux
drwxr-xr-x  2 root root 4.0K Jun 27 02:37 srv
drwxr-xr-x  2 root root 4.0K Jun 27 02:36 sys
drwxrwxrwt  2 root root 4.0K Jun 27 02:38 tmp
drwxr-xr-x 10 root root 4.0K Jun 27 02:38 usr
drwxr-xr-x 12 root root 4.0K Jun 27 02:38 var
Start container:
vzctl start 101
Starting container...
Container is unmounted
Container is mounted
Setting CPU units: 1000
Container start in progress...
Inside container filesystem show as simfs not an ZFS:
cat /proc/mounts
/dev/simfs / simfs rw,relatime 0 0
proc /proc proc rw,nosuid,nodev,noexec,relatime 0 0
sysfs /sys sysfs rw,nosuid,nodev,noexec,relatime 0 0
none /dev devtmpfs rw,nosuid,noexec,relatime,mode=755 0 0
none /dev/pts devpts rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 0 0
none /proc/sys/fs/binfmt_misc binfmt_misc rw,nosuid,nodev,noexec,relatime 0 0
none /run tmpfs rw,nosuid,noexec,relatime,size=26216k,mode=755 0 0
none /run/lock tmpfs rw,nosuid,nodev,noexec,relatime,size=5120k 0 0
none /run/shm tmpfs rw,nosuid,nodev,noexec,relatime,size=157280k 0 0
none /run/user tmpfs rw,nosuid,nodev,noexec,relatime,size=102400k,mode=755 0 0
If you need any help/questions, you can write to me: pavel.odintsov at gmail dot com.

Wednesday, 25 June 2014

Пару слов о режимах работы PF_RING

parm:           transparent_mode

0=standard Linux,
1=direct2pfring+transparent,
2=direct2pfring+non transparent

For 1 and 2 you need to use a PF_RING aware driver (uint).

Как можно понять, стандартно используется режим 0, так как 1 и 2 требуют установки специального драйвера. Где его взять? В дистрибутиве PF_RING в папке drivers/PF_RING_aware. Папку DNA пока не трогайте, она Вам незачем пока что.

Теперь шерстите папки :) Но вообще я Вам не рекомендую заниматься чем-то подобным, если у Вас сетевая не класса 82599. То есть можете, но не факт, что все будет работать, как Вам нужно.

Итак, идем в папку cd intel/ixgbe/ixgbe-3.21.2-zc/src (мой случай), собираем и устанавливаем в систему драйвер (тут установка штучная, в продакшене соберите пакет или используйте dkms):
make
make install

И после этого загружаете драйверы спец скриптом:
./load_driver.sh

Если он начнет ругаться "не могу найти pf_ring.ko", то исправьте к нему путь на абсолютный. Тоже самое касается случая, когда Вам нужен иной transparent_mode, его нужно указать драйверу явно в этом же файле.

Теперь убеждаемся, что у нас запустилась пропатченная версия драйвера, а не системная. Это можно легко определить по выдаче команды modinfo ixgbe. Следующие строки есть только в патченном драйвере.
parm:           numa_cpu_affinity:Comma separated list of core ids where per-adapter memory will be allocated (array of int)
parm:           enable_debug:Set to 1 to enable debug tracing into the syslog (uint)
 А вот дальше возникли сложности, так как хидер pfring_zc.h не устанавливается при установке либы, о чем я уже отправил багрепорт. 

Monday, 23 June 2014

Как победить chrono:666:7: error: static_assert expression is not an integral constant expression в Debian Wheezy?

Ловлю вот такой баг:
In file included from fastnetmon.cpp:45:
In file included from /usr/include/c++/4.6/thread:37:
/usr/include/c++/4.6/chrono:666:7: error: static_assert expression is not an integral constant expression
      static_assert(system_clock::duration::min()
      ^             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 error generated.
Боюсь, что тут ничего толком не сделать, кроме как воткнуть из бэкпортов более новый LibC++, что почти подобно самоубийству. Кроме этого, в сети пишут, что clang данной версиин не умеет этих самых константных выражений.

Friday, 20 June 2014

Отключение IPMI на BCM карте Supermicro

Готовим окружение:
apt-get install ipmitool
modprobe ipmi_devintf
modprobe ipmi_si

Запускаем с машины:
ipmitool lan set 1 ipsrc static
ipmitool lan set 1 ipaddr 127.0.0.1
ipmitool lan set 1 defgw ipaddr 127.0.0.1

Убеждаемся, что все вырублено:
ipmitool lan print

и проверяем пингом

DHL - документы со скоростью мысли :)

Сегодня на 3 дня раньше обещенного срока получил посылку DHL прямо в торговом центре около дома! :) Хотя была оплачена не срочная доставка за 4 дня, посылка была у меня ровно через 2! И это из Самары в Питер (~1600 км)!

Вот это - образец качества. DHL рулез :)

Не пользуйтесь говнобанком по имени Сбербанк, НИКОГДА

Недавно испытал определенный баттхерт в отделении Сбербанка (Спб), на что, буквально через полчаса составил жалобу следующего содержания. Я, конечно, человек, наверное, наивный, но очень часто мои жалобы находят ответ. Но не в этом случае. В ЭТОМ банке всем насрать.

Здравствуйте!
Хотелось бы поделиться форменным идиотизмом, с которым я столкнулся в
подразделении Сбербанка по адресу Пионерская , Коломяжский пр. , 15 " А" ,
корп. 2. Но я не хотел бы наговаривать именно на это подразделение, потому
что эта ситуация точь-в-точь имеет место и в любых других подразделениях
Сбербанка.

Волею судьбы я вынужден оплачивать квартплату только в Сбербанке, для чего
пользуюсь Терминалами Самообслуживания. Они в целом удобны для меня (если,
конечно, работают - что в нашем подразделении тоже редкость - обычно
работает 1-2 из 6 штук).

Но сегодня оплачивая квартплату в 3450 я оплатил купюрой в 5000 рублей и
сумма сдачи была очень большой, чтобы получить ее на телефон (что я ранее делал
всегда - меня это устраивало) и я выбрал вариант "получить у кассира".
И тут начались все мои круги ада. Резонно спросив консультанта "а где
деньги-то получить" ? Я получил ответ - идите в ближайшее окно. Из ближайшего окна
прождав 5 минут я был послан взять талон (понять какой из 10 вариантов
"кредиты""ипотека""платежи" обозначает "я хочу свою сдачу из терминала"
имеяполное высшее обращование я не смог). Талон
(если хотите - я могу прислать его скан-копию, он у меня на столе лежит) меня
обрадовал ожиданием в 33 минуты и очередью в 5 человек.

Но на этом мои удивления не закончились, уже _после_ получения этого чудо
чека я прочитал на нем, что у меня должен быть паспорт, которогое у меня с собой
не было. Поэтому я был вынужден сходить домой и взять паспорт, чтобы получить
своиденьги. Но очередь была настолько длинной, что пока я ходил домой (20 минут), она
не сдвинулась вообще. Почему? Потому что пришли техники и начали чинить
переговорное устройство и в итоге из 4х окон работали от силы 2, очередь в
филиале достигла почти 25 человек - сесть было уже некуда.
После этого с горем поплам через 40 минут (!!!) дошла моя очередь. Кассир
сработала довольно оперативно (если не считать ухода за мелочью мне на
сдачу на 5 минут; у Вас в банке нет запаса мелочи?).


Но что меня напрочь убило - это два огромных бланка (по одному за каждый из
возвратов из терминала), которые я должен заполнить сам! Да, ФИО и мой
паспорт операционист впечатала (да и вообще операционистка была самым лучшим
впечатлением после посещения данного филиала). В итоге мне понадобилось еще
почти 5 минут, чтобы заполнить эти огромные бланки, где я должен вписать
ФИО, адрес жительства, адрес регистрации, телефон, номер подразделения выдавшего
мой паспорт и две подписи. Вам не кажется, что это просто тотальный и бесповоротный идиотизм? Мне
кажется, честно. Пожалуйста, раз уж Вы позиционируете терминалы как "ОПЕРАТИВНЫЙ"
способ осуществления платежей.
В итоге на оплату двух несчастных квитков квартплаты я потратил ровно
полтора часа своего личного времени, из-за чего был вынужден опоздать на работу. И
это в 21м веке, а не в 18м и мои деньги не ехали на перекладных из Петербурга в
Москву.

Я надеюсь, что хотя бы пару пунктов моей жалобы будут рассмотрены.
С уважением, Одинцов Павел, контактный телефон: +7951xxxyyzz

ОТВЕТ  БАНКА:

На что получил тупую отписку (Ответ на обращение N 000913-2014-059266 от Одинцов Павел):

Ответ Клиенту:
Уважаемый Павел Юрьевич!
ОАО "Сбербанк России" (далее-Банк), рассмотрев Ваше обращение, сообщает
следующее.
Прежде всего, позвольте поблагодарить Вас за то, что Вы нашли время и
поделились с нами впечатлениями от обслуживания в Сбербанке. Для нас очень
важно знать мнение клиентов о предоставляемых банком услугах, ведь это
позволяет находить и исправлять существующие ошибки или вносить изменения в

процессы Банка для повышения качества обслуживания.
Мы искренне сожалеем о времени, которое Клиенты Банка теряют в
очередях, и заверяем Вас, что Банк принимает все меры к устранению этого
недостатка в нашей работе.
В частности, в настоящее время в Банке проводится масштабная программа по
борьбе с очередями, целями которой является снижение максимального времени
ожидания клиентов в отделениях. В рамках этой программы мы активно меняем
формат отделений, пересматриваем их месторасположение, внедряем системы
электронной очереди и совершенствуем наши процессы.
Также нельзя не отметить, что уже сейчас Вы можете избежать
неудобств, которые могут возникнуть при личном посещении отделений Банка,
воспользовавшись альтернативными каналами обслуживания: услугами "Сбербанк

ОнЛ@йн" (услуга предоставляется бесплатно) и "Мобильный банк", безналичным
списанием коммунальных платежей с вкладов, либо использовать для оплаты
услуг
широкую сеть наших информационно-платежных терминалов и банкоматов. С
подробной
информацией об этих услугах, а также полным списком устройств
самообслуживания
и структурных подразделений Банка можно ознакомиться на нашем официальном
сайте www.sberbank.ru.
В заключение хотим еще раз принести свои извинения за причиненные

неудобства и выразить надежду, что наши разъяснения помогут Вам в
дальнейшем
успешно пользоваться нашими услугами.
С уважением,
Управление претензионной работы
Центра сопровождения клиентских операций
ОАО "Сбербанк России"



С уважением,
Управление претензионной работы
Центра сопровождения клиентских операций
"Старо-Петергофский" ОАО "Сбербанк России"

Thursday, 19 June 2014

Wednesday, 18 June 2014

Сборка xdelta3 на CentOS 6

Вот так:
yum install -y xz gcc make xz-devel gcc-c++
cd /usr/src
wget https://xdelta.googlecode.com/files/xdelta3-3.0.8.tar.xz
tar -xf xdelta3-3.0.8.tar.xz
cd xdelta3-3.0.8
./configure --build=x86_64 --prefix=/opt/xdelta3
Может кто соберет пакетик в Epel? А-то там только xdelta1 :)

Monday, 16 June 2014

PF_RING: pfring_open Operation not supported errno: 95

Это очень странная баго-фича. Суть в том, что даже при успешном открытии сокета pfring_open возвращает errno = 95, который обозначает: Operation not supported. Это ломает в частности gopacket/pfring и приводит к тому, что он нифига не работает.

Бага исправлена по моему репорту в коммите 7775 и доступна в svn версии PF_RING. Скорее всего фикс будет включен в релиз 6.0.2, в 6.0.1 баг все еще присутствует.