Перенос Linux на Hyper-V

Преамбула

Столкнулся я с задачей перенести рабочую систему Linux на гипервизор Hyper-V. Решил погуглить какое-то время поискать подводные камни так сказать. Нашел достаточно много вариантов, но все они мне не подходили. Одни были уж какие-то слишком запутанные и замороченные, другие слишком долгие и не менее запутанные. Вспомнив о таком продукте как Acronis True Image, я начал припоминать, что у него была функция конвертирования его tib в vhd.

Танцы с бубном

Скачал триалку Acronis Backup & Recovery 11. Хочу отметить, что сам компьютер с Linux был в работе и было крайне нежелательно надолго отключать его. Поэтому я решил проверить работу ABR на другой машине. Взял свою, с установленной на нем Windows 7, загрузился с диска Acronis Backup & Recovery, сделал резервную копию всего диска со всеми разделами. После этого сконвертировал его в vhd и этот виртуальный диск успешно подцепился к hyper-v. Система загрузилась.

Обрадовавшись, я договорился об изъятии компьютера с Linux. К слову это оказался SLES 11.0. Так же сделал копию всего диска со всеми разделами: mbr, swap и ext3. Запустил конвертацию, ABR распознал все разделы, без ошибок сконвертировал tib в vhd. Настроил виртуальную машину, подключил диск с системой, запустил и система не запустилась. Подумалось, ну да ладно сейчас поправим /boot/grub/menu.lst и /etc/fstab и все будет в порядке.

Загрузился с образа загрузочного диска, при загрузке выбрал Rescue System. Попал в консоль. Попытался смонтировать раздел ext3, не монтируется. Система ругается на отсутствие журнала, на повреждение superblock и т.д. Перепробовав кучу способов по реанимации раздела и потратив на это целый день понял, что нужно думать что-то другое.

Мысль пришла не сразу. Но когда пришла подумалось, почему я не сделал этого после того как система не завелись и раздел отказался монтироваться, убил кучу времени на заведомо мертвый vhd. Сделав ISO образ загрузочного диска с Acronis Backup & Recovery, я загрузился с него в виртуальной машине. Сразу восстановить диск на виртуальный диск не получилось, пока я не уменьшил размер раздела восстанавливаемого диска. Исходный диск ака железный диск был 500Гб, виртуальный 140Гб. Пока не уменьшил, Acronis требовал перезагрузки.


После успешного восстановления, так же загрузился в Rescue System и смонтировал вновь воссозданный диск.

Переселяемся в систему

Для тех кто имел счастье ставить Gentoo переселение не должно составить никаких проблем. Монтируем раздел с ext3, в него монтируем /proc и /dev, затем chroot и вуаля:

# mkdir /mnt/sles
# mount /dev/sda2 /mnt/sles
# mount -t proc none /mnt/sles/proc
# mount -o bind /dev /mnt/sles/dev
# chroot /mnt/sles /bin/bash

Теперь нужно проверить и при необходимости поправить /boot/grub/menu.lst и /etc/fstab. Мне в /boot/grub/menu.lst нужно было поправить только root (hd1,1) на root (hd0,1) и все. Перезагружаемся.

Пилим дальше

Должен вас разочаровать, но сразу загрузиться в рабочую среду не получится, у меня к примеру не запустился Gnome. Пришлось править /etc/X11/xorg.conf. Какой он был описывать не буду, покажу какой он стал. Все изменения пришлись на две секции Section "Modes" и Section "Device".

# /.../
# SaX generated X11 config file
# Created on: 2011-08-01T19:49:38+0400.
#
# Version: 8.1
# Contact: Marcus Schaefer <sax@suse.de>, 2005
# Contact: SaX-User list <https://lists.berlios.de/mailman/listinfo/sax-users>
#
# Automatically generated by [ISaX] (8.1)
# PLEASE DO NOT EDIT THIS FILE!
#
 
Section "Files"
  FontPath     "/usr/share/fonts/misc:unscaled"
  FontPath     "/usr/share/fonts/local"
  FontPath     "/usr/share/fonts/75dpi:unscaled"
  FontPath     "/usr/share/fonts/100dpi:unscaled"
  FontPath     "/usr/share/fonts/Type1"
  FontPath     "/usr/share/fonts/URW"
  FontPath     "/usr/share/fonts/Speedo"
  FontPath     "/usr/share/fonts/PEX"
  FontPath     "/usr/share/fonts/cyrillic"
  FontPath     "/usr/share/fonts/latin2/misc:unscaled"
  FontPath     "/usr/share/fonts/latin2/75dpi:unscaled"
  FontPath     "/usr/share/fonts/latin2/100dpi:unscaled"
  FontPath     "/usr/share/fonts/latin2/Type1"
  FontPath     "/usr/share/fonts/latin7/75dpi:unscaled"
  FontPath     "/usr/share/fonts/baekmuk:unscaled"
  FontPath     "/usr/share/fonts/japanese:unscaled"
  FontPath     "/usr/share/fonts/kwintv"
  FontPath     "/usr/share/fonts/truetype"
  FontPath     "/usr/share/fonts/uni:unscaled"
  FontPath     "/usr/share/fonts/CID"
  FontPath     "/usr/share/fonts/ucs/misc:unscaled"
  FontPath     "/usr/share/fonts/ucs/75dpi:unscaled"
  FontPath     "/usr/share/fonts/ucs/100dpi:unscaled"
  FontPath     "/usr/share/fonts/hellas/misc:unscaled"
  FontPath     "/usr/share/fonts/hellas/75dpi:unscaled"
  FontPath     "/usr/share/fonts/hellas/100dpi:unscaled"
  FontPath     "/usr/share/fonts/hellas/Type1"
  FontPath     "/usr/share/fonts/misc/sgi:unscaled"
  FontPath     "/usr/share/fonts/xtest"
  FontPath     "/opt/kde3/share/fonts"
  InputDevices "/dev/gpmdata"
  InputDevices "/dev/input/mice"
EndSection
 
Section "ServerFlags"
  Option       "AllowMouseOpenFail" "on"
  Option       "ZapWarning" "on"
EndSection
 
Section "Module"
  Load         "dri"
  Load         "dbe"
  Load         "freetype"
  Load         "extmod"
  Load         "glx"
EndSection
 
Section "InputDevice"
  Driver       "kbd"
  Identifier   "Keyboard[0]"
  Option       "Protocol" "Standard"
  Option       "XkbLayout" "us,ru"
  Option       "XkbModel" "microsoftpro"
  Option       "XkbOptions" "grp:ctrl_shift_toggle,grp_led:scroll"
  Option       "XkbRules" "xfree86"
  Option       "XkbVariant" ",winkeys"
EndSection
 
 
Section "InputDevice"
  Driver       "mouse"
  Identifier   "Mouse[1]"
  Option       "Buttons" "5"
  Option       "Device" "/dev/input/mice"
  Option       "EmulateWheel" "on"
  Option       "EmulateWheelButton" "2"
  Option       "InputFashion" "Mouse"
  Option       "Name" "IBM;TPPS/2 TrackPoint"
  Option       "Protocol" "explorerps/2"
  Option       "Vendor" "Sysp"
  Option       "ZAxisMapping" "4 5"
EndSection
 
 
Section "Monitor"
  Option       "CalcAlgorithm" "XServerPool"
  DisplaySize  360 270
  HorizSync    30-97
  Identifier   "Monitor[0]"
  ModelName    "RYI 109-B5"
  Option       "DPMS"
  Option       "PreferredMode" "1024x768"
  VendorName   "RYI"
  VertRefresh  43-160
  UseModes     "Modes[0]"
EndSection
 
 
Section "Modes"
  Identifier   "Modes[0]"
  Modeline 	"800x600" 202 800 864 1056 1360 600 601 604 650 +hsync +vsync
EndSection
 
 
Section "Screen"
  SubSection "Display"
    Depth      16
    Modes      "default" 
  EndSubSection
  Device       "Device[0]"
  Identifier   "Screen[0]"
  Monitor      "Monitor[0]"
EndSection
 
 
Section "Device"
  BoardName    "Framebuffer Graphics"
  Driver       "fbdev"
  Identifier   "Device[0]"
  VendorName   "VESA"
EndSection
 
 
 
Section "ServerLayout"
  Identifier   "Layout[all]"
  InputDevice  "Keyboard[0]" "CoreKeyboard"
  InputDevice  "Mouse[1]" "CorePointer"
  Option       "Clone" "off"
  Option       "Xinerama" "off"
  Screen       "Screen[0]"
EndSection
 
 
Section "DRI"
    Group      "video"
    Mode       0660
EndSection
 
Section "Extensions"
EndSection

После этого система завелась нормально. В принципе все так можно и оставить, но лучше донастроить. В параметрах виртуальной машины добавим "Сетевой адаптер" вместо "Устаревший сетевой адаптер". Скачаем Linux Integration Services 2.1. Установим его. Прежде чем устанавливать LIS 2.1 нужно установить, если еще этого не сделано компилятор gcc и исходники ядра в SLES это выглядит примерно так:

# yast -i gcc
# yast -i kernel-source

А так же в файле /etc/modprobe.d/unsupported-modules в строку allow_unsupported_modules 0, заменить на allow_unsupported_modules 1. Все теперь можно приступать к установке LIS 2.1:
# mkrdir /opt/linux_ic
# cp -r /media/CDROM/* /opt/linux_ic
# cd /opt/linux_ic
# make
# make install
# reboot

Все, после перезагрузки значение allow_unsupported_modules можно возвращать в 0. У вас появились устройства типа /dev/hda. Поправим /boot/grub/menu.lst и /etc/fstab. Там где /dev/disk/by-id/ata-Virtaul_HD-part1 меняем на /dev/hda1, /dev/disk/by-id/ata-Virtual_HD-part2 меняем на /dev/hda2. Но скорее всего part2 у вас не будет, а за место него будет красоваться UUID, его также меняем на /dev/hda2. Ну все, вроде бы ничего не забыл, можно спокойно пререзагружаться.


Заключение

Итак, станция перенесена на Hyper-V и успешно работает. Но хочется заметить, что Acronis Backup & Recovery 11 не справился с той задачей, которая была на него возложена. Не смог он сконвертировать свой tib в vhd, хотя эта функция у него заявлена. Может быть я что-то делал не так, но ведь tib с win7 и ее ntfs он сконвертировал без проблем. Поэтому пришлось восстанавливать разделы диска как на обычный компьютер, а ведь можно было сразу воспользоваться tar'ом или dump/restore и перенести данные на подготовленный диск, потом установить grub.