понедельник, 26 декабря 2011 г.

KVM на CentOS 6.2. Установка в текстовом режиме (text mode).

См. так же
Подключение диска (lvm-раздела) к существующей виртуальной машине.

Положим, Вы решили установить KVM (Kernel Virtual Machine - виртуальная машина ядра ОС Линукс) на CentOS 6.2. И Вам почему-то не подходит установка в графическом режиме (если подходит графический режим, вы легко найдёте в поисковике руководство). Не важно почему. Я, например, полагаю автоматизировать установку через kickstart и мне показалось довольно нудным запускать иксы и пробрасывать их через ssh (хотя когда то я уже это делал). Сейчас я не уверен, что автоматизация установки будет требовать текстового режима, но это то что подвигло меня использовать текстовую установку. Я потратил на понимание процесса (не только текстовой установки, но и например работы с сетью) довольно много времени, поэтому хочу записать. Ну и надеюсь, кому-нибудь да пригодится.

В качестве дискового устройства мы будем использовать файл (Вы довольно легко сможете подключить нужное устройство позже, например, чтобы повысить производительность дискового ввода-вывода), и сеть по умолчанию (Вы так же сможете подключить другое сетевое устройство позже, правда, тут есть тонкости. Тем не менее это не слишком сложно тем более что я всё опишу).


Немного терминов.
Хост (host) - основная машина, которая будет содержать виртуальные машины в себе.
Гость (guest) - виртуальная машина, которую мы собственно и пытаемся установить.

Приступим.

1) подключаемся к хосту по ssh. делаем yum update (чтобы убедиться что мы используем последние версии ПО). Если обновилось ядро, перезагружаем сервер.

2) устанавливаем необходимое ПО согласно руководству. Я делал это так:

yum install qemu-kvm qemu-img python-virtinst libvirt libvirt-python virt-manager libvirt-client
yum groupinstall Virtualization 'Virtualization Platform' 'Virtualization Tools'

Вроде бы после этого всё что мне нужно, оказалось установлено. По крайней мере я не помню чтобы я доустанавливал что-либо отдельно.

Двигаемся дальше.

3) Запускаем установку виртуальной машины с помощью virt-install:

virt-install --force --hvm --connect qemu:///system --network network=default,mac=52:54:00:xx:xx:xx --name try14 --cpu host --ram=756 --vcpus=4 --location http://mirror.yandex.ru/centos/6.2/os/x86_64/ --nographics -x 'console=ttyS0 utf8' --disk=/var/lib/libvirt/images/try14.img,size=3 

Описание параметров:

--force - просто напросто заставляет перезаписать текущий дисковый файл. Как видно из названия (параметр name) это была моя 14 попытка установки, и, хотя этот файл называется уникально, остальные 13 попыток установки приходились на один и тот же файл. Ясно, что это рудимент, но может кому пригодится.

--hvm - говорит установщику о том что должна использоваться полная виртуализация (как противоположность паравиртуализации, параметр -p).

--connect qemu:///system - подсоединяет нас к терминалу устанавливаемой машины.

--network network=default,mac=52:54:00:xx:xx:xx - подключает устройство, подключенное к сети по-умолчанию (default, создаётся libvirt во время установки, как я понимаю), к создаваемой виртуальной машине. Когда начнётся установка, выберите dhcp-настройку для сетевой карты. Параметр mac=52:54:00:xx:xx:xx можно опустить (он был нужен мне для установки ip-адреса и имени хоста по mac-адресу с использованием dns).

--name try14 - имя, которое используется для идентификации виртуальной машины. Должно быть уникально в пределах миграции. За латинские буквы и цифры Вас ругать не будут (вроде ещё можно - и _, но я не пробовал). Как видно, это была моя 14-ая попытка установки. Кстати, заработало всё нормально с тринадцатой :).

--cpu host - использовать тот же cpu, что использует хост. Можно не указывать. Обещают лучшую производительность, если указать. Но возможны проблемы при миграции между хостами если типы процессоров не совпадают. Кстати, у меня на сервере xeon, а у гостя видно core2duo. Я не вникал, может там одинаковые регистры, или ещё что, но такой момент мне встретился.


--ram=756 - количество памяти у гостя(в мегабайтах).

--vcpus=4 - количество процессоров у гостя (в штуках). Вроде бы не может быть больше чем у хоста.

--location http://mirror.yandex.ru/centos/6.2/os/x86_64/ - местоположение источника для установки. Этот параметр можно заменить на iso-образ, например. Подробнее смотрите документацию.

--nographics - графики не будет.

-x 'console=ttyS0 utf8' - самый важный момент для текстовой утсановки, я потратил ни один час пока нашёл его в документации (интернеты не подсказали отчего-то). Через -x передаются параметры ядру. Например, можно передать положение kickstart-файла. Если передать 'console=ttyS0 utf8' это включит текстовый режим с поддержкой utf8 для гостя.

--disk=/var/lib/libvirt/images/try14.img,size=3 - это просто путь к файлу который система будет использовать как диск. Параметр size указывает размер диска в гигабайтах. Для справки, базовая инсталляция занимает порядка 750Мб. Разметить диск в текстовой установке невозможно, поэтому имейте ввиду что установщик отрежет порядка 500Мб на boot-раздел (не знаю зачем так много) и ещё на своп откусит (в данной конфигурации у меня получился своп 1Гб). От трёх гигабайт в итоге установщик оставил на корень 1.5Гб. Файл образа должен находится в /var/lib/libvirt/images, иначе, вроде бы я встречал в документации, что потребуется дополнительная настройка SELinux. Может что-то путаю, но так у меня всё заработало нормально.

4) Собственно, процесс установки заключается в том чтобы ответить на несколько вопросов. Возможности выбора пакетов нет, разметить диск нельзя. Поэтому всё очень просто, никаких заморочек. В процессе у меня установщик просил реинициализировать диск. Я согласился. Единственное, нужно не забыть поглядеть ip-адрес который получила гостевая машина (с помощью ifconfig например), и запомнить пароль рута, чтобы коннектиться по ssh, потому что у меня виртуальная консоль изменяла конфигурацию экрана и работать было неудобно. После перезагрузки подключайтесь к машине по ssh как обычно и работайте.

Можно управлять виртуальной машиной с помощью утилиты virsh. Например, virsh start try14 запустит машину с идентификатором try14. Правда выключить гостя с помощью virsh shutdown try14 или перезагрузить с помощью virsh reboot try14 мне не удалось, но это можно сделать используя reboot или poweroff внутри гостя. Man virsh в помощь. Добавление. В доках у редхэта описана проблема с virsh shutdown. См. добавление в конце записи.

Чтобы выйти из консоли гостя (если подключение было через qemu:///system), нужно использовать ctrl+] . Впрочем, об этом пишет система при подключении к консоли.

Ну что ж, на этом пока всё. В следующий раз опишу подключение сетевого адаптера в режиме моста. Спасибо за внимание.

Добавление. В документации у Red-Hat описана проблема с virsh shutdown. Она связана с тем что в минимальной установке не ставится acpid, а при установке в текстовом режиме как раз выбирается минимальный набор пакетов. Решение очень простое, дано там же в документации:

# yum install acpid
# chkconfig acpid on
# service acpid start


См. так же
Подключение диска (lvm-раздела) к существующей виртуальной машине.

Комментариев нет:

Отправить комментарий