Заняться
виртуализацией двигало появившееся у меня желание сократить количество
компьютеров в доме. У меня уже давно находится компьютер который
является Wi-Fi точкой доступа, FTP сервером, является качалкой torrent и
прочее. Вся работа на нём ведётся под управлением OC Linux. После
покупки программно-аппаратного комплекса PC-3000 UDMA пришлось
собрать ещё один компьютер под управлением Windows. PC-3000
оборудование хорошее, но к сожалению в сторону Linux разработчики даже
не смотрят. Я решил объединить две системы в один компьютер используя
виртуализацию, при этом Linux будет использоваться как основная система,
а работа с PC-3000 будет вестись из гостевой виртуальной машины с
Windows. Ситуация осложнялась тем что для такого объединения простая
аппаратная виртуализация VT-x (Intel
VT или AMD-v) имеющаяся на множестве процессоров мне не подходила. Для
подобной системы требовалась более продвинутая аппаратная виртуализация,
виртуализация ввода-вывода, называемая VT-d.
Именно этот тип виртуализации позволяет пробросить любое устройство
воткнутое в PCI или PCI-e шину в гостевую виртуальную систему.
Какие преимущества получаются при использовании такой системы?
- Пониженное потребление электроэнергии. Очевидно что одна система потребляем меньше электроэнергии чем две.
- Снижение стоимости. Это преимущество актуально для тех кто только собирается собирать систему для ремонта или задумывается об обновлении платформы собранной для ремонта
- Повышенная надёжность. Сервер как правило комплектуется источником бесперебойного питания, что позволит продолжать работу во время кратковременного пропадания электроэнергии.
- Возможность удобно масштабировать дисковое пространство. При сохранении информации из виртуальной машины с использованием Samba или FTP сервиса, увеличение дискового пространства для виртуальной машины будет абсолютно прозрачным.
- Удобство работы. Отсутствует привязка к рабочему месту. Подключив накопитель с которым требуется поработать можно подсоединившись удалённо к виртуальной машине продолжить работу с накопителем. При этом виртуальную машину можно перезагружать, выключать, снова включать зная что даже если возникнут серьёзные проблемы на этапе загрузки виртуальной машины их можно устранить удалённо.
- Для меня так же очевидным преимуществом является опыт в работе с технологиями виртуализации получаемый при построении подобной системы.
Выбор оборудования
Создание
платформы начнём с подбора оборудования. Для работы технологии
виртуализации ввода-вывода VT-d необходима соответствующая поддержка со
стороны материнской платы, BIOS (или EFI) материнской платы и реализация технологии VT-d в процессоре.
Начнём
с выбора материнской платы. Технология VT-d гарантированно
обслуживается линейкой чипсетов серии “Q”, начиная с самой ранней модели
чипсета Q35 и заканчивая современной на данный момент моделью чипсета
Q77. Это сужает круг поисков требуемой материнской платы, всё что нам
нужно это посмотреть предложения материнских плат на рынке с данными
типами чипсета. Мой выбор пал на модель от ASUS P8Q77-M,
mATX формата. Хоть и дороговатая, но качественная, современная
материнская плата. Ваш выбор возможно будет отличаться от моего, тут уж
кому какой производитель но душе.
Проверяем
поддержку VT-d на уровне BIOS или EFI. Тут достаточно просто, с
материнскими платами идут инструкции по эксплуатации которые можно
скачать с сайта производителя. Скачиваем инструкцию и начинаем искать в
районе раздела “Advanced menu” строчку “Intel Virtualization Technology”.
Эта строчка означает что есть поддержка технологии VT-x и помимо этого,
при поддержке технологии VT-d к этой строчке обязательно должна идти
строка “Intel TXT(LT) Support” заявляющая о
гарантированной поддержке необходимой нам технологии Intel VT-d
(Virtualization Technology for Directed I/O, технология виртуализации
ввода/вывода).
Подбор процессора с поддержкой VT-d.
Для подбора требуемого процессора воспользуемся выбором процессора по
определённым критериям на сайтом компании Intel. По ссылке представлены
Core i5 процессоры с поддержкой технологии VT-d с TDP от 45-и ватт
(убраны варианты для мобильных систем). По возможности приобретайте
процессор который идёт сразу с вентилятором, в этом случае в прайс листе
продавца рядом с наименованием процессора идёт пометка “BOX”.
Вентилятор в комплекте идёт достаточно тихий и качественный.
Желательно
убедиться что выбранный процессор поддерживается выбранной материнской
платой. Как правило таблица поддерживаемых процессоров находится на
сайте производителя, посмотрите соответствие по наименованию процессора и
версии BIOS материнской платы с которой эта поддержка анонсирована. При
необходимости обновите BIOS до актуальной версии.
Программное обеспечение
После
сборки оборудования устанавливаем операционную систему. Я уже давно
пользуюсь CentOS, поэтому рассказ о конфигурации ПО буду вести на
примере CentOS 6.3. По завершению установки системы смотрим установлены
ли компоненты виртуализации. В случае отсутствия требуемых компонентов
виртуализации они будут установлены в систему командой
[midnighter@localhost ~]$ yum groupinstall "Платформа виртуализации"
Настройка платформы виртуализации
Итак, все требуемые аппаратные и программные компоненты у нас имеются, самое время приступить к настройке.
- Активируем подержку VT-d в BIOSПри старте системы по нажатию клавиши “Del” на клавиатуре попадаем в BIOS. Место расположения нужных опций которые требуется активировать отличается от поставщика BIOS, как правило это раздел “Advanced menu”. В этом разделе ищем строчки “Intel Virtualization Technology” и “Intel TXT(LT) Support” которые требуется переключить в “enabled”. По умолчанию как правило все опции виртуализации заблокированы.
- Активируем поддержку VT-d в ядреДля этого нам требуется добавить параметр intel_iommu=on к строке конфигурации ядра в файле /boot/grub/menu.lst
Кроме того возможны случаи когда система может иметь проблемы с таблицами ACPI. Это проявляется в непрерывных сообщениях в логе похожих на подобную запись.
dmar: DMAR:[DMA Read] Request device [00:02.0] fault addr 7f800000 dmar: DRHD: handling fault status reg 3
В случае если такая проблема возникла для её устранения достаточно добавить запись intel_iommu=igfx_off
Пример ниже демонстрирует модифицированную запись файла menu.lstdefault=0 timeout=5 splashimage=(hd0,0)/grub/splash.xpm.gz hiddenmenu title Red Hat Enterprise Linux Server (2.6.32-36.x86-645) root (hd0,0) kernel /vmlinuz-2.6.32-36.x86-64 ro root=/dev/VolGroup00/LogVol00 rhgb quiet intel_iommu=on intel_iommu=igfx_off initrd /initrd-2.6.32-36.x86-64.img
- Перезагрузка системы
Для применения новой конфигурации требуется перезагрузка. После перезагрузки проверяем активацию технологии виртуализации.midnighter@localhost ~]$ dmesg | grep "Virtualization Technology" PCI-DMA: Intel(R) Virtualization Technology for Directed I/O
Начиная с этого момента начала работать платформа с активированной технологией VT-d.
Настройка сервиса виртуализации
Программная часть виртуализации основана на сервисе libvirtd. Требуется убедиться что сервис стартует вместе с загрузкой основной системы, нам в этом поможет команда
[midnighter@localhost ~]$ chkconfig --list | grep libvirtd libvirtd 0:выкл 1:выкл 2:выкл 3:вкл 4:вкл 5:вкл 6:выклВ противном случае устанавливаем загрузку на уровнях 3, 4, 5 во “вкл”
Далее в файле /etc/sysconfig/libvirtd убираем комментарий со строки
# Listen for TCP/IP connections # NB. must setup TLS/SSL keys prior to using this LIBVIRTD_ARGS="--listen"
isten_tls = 0 listen_tcp = 1
Подобная
конфигурация допустима на время тестирования. Позже если открываете
доступ к виртуальной машине из локальной сети или интернета, обязательно
настройте безопасный доступ в этом же конфигурационном файле.
Перезагружаем сервис виртуализации для того чтобы новая конфигурация вступила в силу
[midnighter@localhost ~]$ sudo service libvirtd restart
Создаём пользователя в SASL с помощью которого будем подключаться к сервису виртуализации.
[midnighter@localhost ~]$ sudo saslpasswd2 -a libvirt -c midnighter
Образы
виртуальных машин хранятся в директории “/var/lib/libvirt/images”,
целесообразно будет под образы выделить отдельный LVM том и добавить его
автомонтирование в файл “/etc/fstab”. После этой операции определяемся с
гостевой ОС. Я рекомендую установить Windows 7 Home Basic 32-х битной
архитектуры. Почему именно эта система? Более продвинутые версии имеют в
своём составе сервисы которые в холостую будут потреблять процессорное
время попусту грея воздух и расходуя электроэнергию, Home Basic вполне
достаточно для обычной работы. Оперативной памяти под такую гостевую
систему которая будет работать только с ПО PC-3000 выделять более 2гб.
излишне, поэтому вполне достаточно будет 32-х битной архитектуры. Теперь
мы можем работать с образом виртуальной машины имеющим некоторый набор
виртуального оборудования, но запускать такой контейнер и устанавливать
на него операционную систему пока ещё рано.
Подключение к виртуальной машине
Для возможности
удалённого подключения к сервису виртуализации требуется убрать
комментарии со строчек vnc_listen = “0.0.0.0” и spice_listen = “0.0.0.0”
в файле /etc/libvirt/qemu.conf и применить данную конфигурацию командой
[midnighter@localhost ~]$ sudo service libvirtd restart
При
создании образа виртуальной машины идёт комплектация определённым
набором оборудования настроенного по умолчанию. Графический адаптер в
списке этого оборудования настроен на соединение с адресом “127.0.0.1”,
поэтому требуется создать новый графический адаптер у которого после
правки файла “/etc/libvirt/qemu.conf” появилась возможность указать
“прослушивать все доступные интерфейсы”. В противном случе при удалённом
подключении появится сообщение "ошибка соединения просмотрщика с хостом
гипервизора". Позже обязательно настройте безопасный авторизованный
доступ в файле “/etc/libvirt/qemu.conf”.
Подключаться к сервису виртуализации можно с помощью менеджера виртуальных машин, с помощью
этой программы можно создавать и смотреть вывод дисплея виртуальной
машины по протоколу VNC или SPICE. Какой протокол будет использоваться
указываем в конфигурации видеоадаптера при создании машины. Также есть возможность отдельно сконфигурировать образ виртуальной машины консольной утилитой virsh, а затем для просмотра вывода дисплея виртуальной машины использовать программу для работы с протоколом VNC.
Пробрасываем устройство
Самый
простой способ пробросить устройство при создании образа виртуальной
машины это воспользоваться программой “менеджер виртуальных машин”. В
этом случае при создании машины в разделе “Параметры виртуального
оборудования” нажимаем кнопку “Добавить оборудование”. В появившемся
списке выбираем “PCI Host Device” и после выбора этого пункта у нас
появляется дополнительный перечень оборудования которое мы можем
пробросить. Выбираем оборудование и после перезагрузки виртуальной
машины всё что требуется сделать это установить драйвера на это
оборудование. У меня это PC-3000 для которого я и установил требуемые
драйвера и необходимое для работы программное обеспечение.
Работа с помощью консольной утилиты более сложна и детально описана в разделе 12.1 документации по пробросу PCI устройств с помощью virsh.
Как
можно видеть из этой статьи, пробросить можно любое оборудование
установленное в PCI или PCI-e шину и при этом полноценно работать и ним
из виртуальной гостевой операционной системы.
Скажите, пожалуйста, можно ли пробросить PCI-e видеокарту?
ОтветитьУдалитьНадо пробовать. Конкретно с видеокартами могут быть подводные камни.
Удалить