Создаем пустой образ (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 bytes 255 heads, 63 sectors/track, 2088 cylinders, total 33554432 sectors Units = sectors of 1 * 512 = 512 bytes Sector 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 System vz.img1 * 2048 1026047 512000 83 Linux vz.img2 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 hiddenmenu title 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
Перезагружаем виртуальную машину в обычном режиме. Готово.