Создаем пустой образ (16Gb):
# dd if=/dev/zero of=/var/lib/vz/root/vz.img bs=1024 count=16777216
Делаем две партиции, 500Мб на boot и остальное:
# fdisk /var/lib/vz/root/vz.img
Результат:
# fdisk -l /var/lib/vz/root/vz.img
Disk vz.img: 17.2 GB, 17179869184 bytes255 heads, 63 sectors/track, 2088 cylinders, total 33554432 sectors
Units = sectors of 1 * 512 = 512 bytesSector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x43c72ebd
Device Boot Start End Blocks Id Systemvz.img
1 * 2048 1026047 512000 83 Linuxvz.img
2 1026048 33554431 16264192 8e Linux LVM
Создаем файловую систему на корневой партиции, offset равен количеству байт перед началом партиции, что в нашем случае = 1026048 * 512 (start sector * sector size):
# losetup -o 525336576 /dev/loop0 /var/lib/vz/root/vz.img
# pvcreate /dev/loop0
# vgcreate vg_main /dev/loop0
# lvcreate -L 4G -n lv_swap vg_main
# lvcreate -l 100%FREE -n lv_root vg_main
# mke2fs -t ext4 /dev/mapper/vg_main-lv_root
# mkswap /dev/mapper/vg_main-lv_swap
Монтируем образ:
# mkdir -p /mnt/vz && mount /dev/vg_main/lv_root /mnt/vz
Копируем содержимое openvz контейнера на образ:
# cp -av /var/lib/vz/private/[vz_id]/* /mnt/vz/
Размонтируем и сконвертим в vmdk:
# umount /mnt/vz
# qemu-img convert -f raw /var/lib/vz/root/vz.img -O vmdk /var/lib/vz/root/vz.vmdk
На ESXi хосте создаем виртуальную машину без HDD. Копируем полученный vmdk файл на ESXi хост и конвертируем в thin формат:
# vmkfstools -i vz.vmdk -d thin vz-thin.vmdk
Подключаем полученный диск к виртуальной системе, загружаемся с какого-нить rescue CD (например SystemRescueCD).
Загрузившись, сделаем файловую систему для boot партиции:
# mke2fs -t ext4 /dev/sda1
Монтируем наш раздел и переходим в него по chroot:
# mkdir -p /mnt/vz && mount /dev/vg_main/lv_root /mnt/vz
# mount /dev/sda1 /mnt/vz/boot
# mount —bind /dev /mnt/vz/dev
# mount -t proc none /mnt/vz/proc
# mount -t sysfs none /mnt/vz/sys
# chroot /mnt/vz /bin/bash
Редактируем то, что нужно:
# vi /etc/sysconfig/network-scripts/ifcfg-eth0
# service network restart
# vi /etc/fstab
# cat /etc/fstab/dev/mapper/vg_main-lv_root
/ ext4 defaults 1 1
/dev/mapper/vg_main-lv_swap swap swap defaults 0 0
/dev/sda1 /boot ext4 defaults 1 2
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
# echo «SELINUX=disabled» > /etc/selinux/config
Удаляем лишнее и устанавливаем недостающее:
# yum remove vzdummy-init* vzdummy-glibc
# yum reinstall @Base kernel device-mapper-multipath lvm2 device-mapper-event grub glibc glibc-common libgcc tzdata grep pcre libstdc++ ncurses ethtool pam mcstrans chkconfig python db4 openssl gdbm krb5-libs initscripts centos-release iproute sysfsutils module-init-tools e2fsprogs e2fsprogs-libs psmisc procps libsysfs iputils# yum reinstall *init*
Конфиг grub:
# vi /boot/grub/grub.conf
# cat /boot/grub/grub.conf
default=0
timeout=5
splashimage=(hd0,0)
/grub/splash.xpm.gz
hiddenmenutitle CentOS (2.6.32-573.7.1.el6.x86_64)root (hd0,0)
kernel /vmlinuz-2.6.32-573.7.1.el6.x86_64 ro root=/dev/mapper/vg_main-lv_root rd_LVM_LV=vg_main/lv_root rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD quiet SYSFONT=latarcyrheb-sun16 rhgb crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_LVM_LV=vg_main/lv_swap rd_NO_DM
initrd /initramfs-2.6.32-573.7.1.el6.x86_64.img
Устанавливаем загрузчик:
# grub-install /dev/sda
Перезагружаем виртуальную машину в обычном режиме. Готово.