Арсений Чеботарев,
[email protected]
Мощность процессоров растет, память дешевеет… С геймерами все более или менее ясно: для них пришло время Doom III и других гига-шутеров. А какую выгоду из такой ситуации может получить системный администратор? Одна из открывающихся возможностей — запуск несколько операционных систем одновременно
Типичным вопросом, который задают тысячи (а не задают, но мучаются им, миллионы) пользователей, программистов и администраторов, звучит примерно так: «Я не против попробовать Linux (FreeBSD, Plan9, Solaris, QNX), хотел бы поставить его на свой компьютер, испытать в работе. Но для этого нужно как-то разбить свой жесткий диск, установить менеджер загрузки, перегружать все время компьютер… А как быть с сетью? — у меня дома нет сети, как мне освоить все сетевые возможности?» — ну и так далее.
Одно из решений — установить Cygwin и другие интересующие порты, о чем я напишу когда-нибудь. Ну а сегодня речь совсем о другом, о настоящих произведениях программистского ремесла — виртуальных машинах VMWare и VirtualPC.
Виртуальная машина, или, иначе, VM,- это программа, которая эмулирует настоящий физический компьютер, притом таким изощренным образом, что на этот компьютер можно установить операционную систему и приложения, которые будут работать, не подозревая о том, что работают они не на «железе», а в программной среде. При этом виртуальная машина может создавать различные аппаратные конфигурации (в некоторых пределах) — например, можно определить, сколько памяти получит та или иная виртуальная машина. Сама программа эмуляции, равно как и работающая на ней операционная система, называется виртуальной машиной, в то время как основная операционная система и физическая машина называются хост-системой.
Задействованные виртуальной машиной ресурсы или «вырезаются» из основного пула ресурсов (как, например, происходит с оперативной памятью), или раздельно используются и хост, и виртуальной системами — как это происходит с процессором и съемными носителями.
Следует отметить, что описываемые виртуальные машины предназначены для работы в качестве хост-системы под Windows и в случае VMWare — под Linux, хотя многообразие устанавливаемых систем значительно шире. Как правило, VMWare показывает отличные результаты, но если не удается поставить какую-то систему или возникают сбои, то, как вариант, попробуйте VirtualPC — возможно, она справится с вашими проблемами.
Не существует однозначного ответа на этот вопрос — можно сказать только, для каких операционных систем виртуальная машина прошла тестирование. В принципе, если ОС работает на архитектуре Intel и не вытворяет с аппаратной частью несусветных вещей, то она с максимальной вероятностью установится и станет работать. Совершенно достоверно работают все версии DOS и Windows, а также основные дистрибутивы Linux. Проявив определенную настойчивость, мне удалось настроить FreeBSD (проблемы были только с видео, остальное прошло нормально). Определенно работает Plan9 (на VMWare). QNX работает в ограниченных графических режимах.
Обещанный NetWare мною не тестировался, так что ничего сказать не могу. Короче, практика — лучшее мерило истины. Попробуйте — это не сложно и диск форматировать не надо.
Естественно, никакая инсталляция операционной системы не обойдется без дисковых накопителей в той или иной форме. Поэтому VMWare при создании виртуальной машины сразу же создает виртуальный жесткий диск, после чего вы можете добавить еще какое-то их количество. Размер этого диска по умолчанию — 4 Гб, но этот размер просто изменить. С точки зрения аппаратной части, этот диск может быть привязан к любому каналу IDE или SCSI — но если вы хотите изменить эти настройки, то делайте это до инсталляции операционной системы, поскольку впоследствии не все системы правильно поймут перестановку диска с одного шлейфа на другой.
С жесткими дисками связано три возможности. Во-первых, файл жесткого диска можно, подобно физическому устройству, «извлечь» из ВМ — то есть сохранить, переписать на другую систему и потом подключить, воссоздав тем самым ВМ в первозданном виде.
Другая возможность — настроить «откат» изменений на диске. Обычно ваши изменения будут храниться на диске так же, как это происходит на обычном компьютере. Режим отката позволяет работать с системой, но после перезагрузки все изменения на диске будут утеряны. Существует также промежуточный вариант, то есть при выключении ВМ будет задан вопрос, сохранить ли изменения.
Наконец, третий вариант — при создании машины сделать не виртуальный диск в файле, а отвести под диск настоящий раздел. Это несколько трудоемкий и не очень эффективный метод. Его назначение, как я понял,- установить ВМ, настроить систему в виртуальном режиме, после чего перенести жесткий диск с настройками на другой компьютер и запускать систему в собственном режиме.
Несколько другая ситуация со сменными носителями. Самое главное отличие — это то, что под VMWare они могут использоваться одновременно и ВМ, и хостом. При этом несколько виртуальных машин тоже разделяют одно устройство, так что никаких проблем не возникает. Кроме того, в VMWare есть возможность вместо физического устройства использовать образ диска — как ISO для CD-ROM, так и образа флоппи-диска для соответствующего юнита.
Под VirtualPC все сделано слабее. Сменные носители монтируются, подобно тому как это происходит в Unix. После того как диск примонтирован, он захватывается ВМ и из других систем не доступен. Если пользователь извлекает носитель, устройство автоматически освобождается — и ВМ теряет его. С этим был связан кошмарный глюк, над которым я бился добрых пять секунд: при инсталляции двухдисковой инсталляции, например ASP Linux, после установки первого диска я вставил второй, но система отказывалась его видеть. Смысл оказался в том, чтобы щелкнуть правой кнопкой на маленькой пиктограмме в строке состояния и снова захватить CD ROM.
Настройка видео — ответственный участок в настройке виртуальной машины. По крайней мере, при настройке X-Windows — поскольку тут придется сделать кое-что своими руками. VMWare и VirtualPC решают проблему видео разными путями, а именно: VirtualPC эмулирует видеокарточку S3 Trio 32/64 PCI, и поскольку любая существующая операционная система поддерживает эту карточку с вероятностью 99,99%, то таким образом проблема видео решается удовлетворительно.
Совершенно другим путем пошла VMWare. Вместо эмуляции какой-то существующей карточки она предлагает собственный драйвер, входящий в пакет vmware-tools, устанавливаемый на виртуальной системе. Поскольку процесс в некотором смысле «магический», то я его опишу здесь детально на примере установки под Red Hat Linux. С небольшими отличиями это применимо и для других версий Linux и BSD.
Итак, поехали.
При инсталляции системы настройте видеопараметры X-Windows любым произвольным образом — инсталляция vmware-tools все равно все сделает по-своему.
Завершите инсталляцию и войдите в систему в консольном режиме с правами root.
Выйдите из виртуальной машины в хост-систему по <Alt + Ctrl> и выберите в меню Settings > VMWare tools install. В появившемся диалоговом окне (смысл вопроса в этом окне — «убедитесь, что вы запустили виртуальную машину») ответить Install. По этой команде виртуальная машине «вставит» в устройство лазерного диска /dev/cdrom (или как бы он там не назывался) образ диска со своими утилитами.
Войдите в виртуальную машину и скопируйте инсталляцию на диск, а потом запустите ее:
cd / mount —t 9660 /dev/cdrom /mnt cp /mnt/* /tmp umount /dev/cdrom cd /tmp tar zxf vmware-linux-tools.tar.gz (я делаю tar zxf vm*) cd vmware-linux-tools ./install.pl |
При инсталляции следуйте поставленным вопросам — точнее, в нужных местах вставляйте <Enter>.
После инсталляции vmware-tools автоматически настроит разрешение и глубину экрана виртуальной машины аналогично параметрам хост-системы. Это не всегда удобно, а точнее — всегда неудобно, потому что окно виртуальной машины полностью покрывает все рабочее поле. Чтобы исправить такое положение, просто исправьте файл настроек X-сервера — для Red Hat и четвертых иксов это /etc/X11/XF86Config-4. Проигнорировав секцию Monitor (она больше ничего не делает) исправьте в секции Screen подсекции Display, указав вместо разрешения по умолчанию желаемое.
Если у вас все время слетает настройка, то просто автоматизируйте все перечисленные процессы, начиная с пункта 4 (конечно, копировать и разархивировать каждый раз не нужно). То есть инсталлируйте tools, исправляйте XF86Config и запускайте startx в одном стартовом скрипте уровня системы и/или пользователя. Для исправления XF86Config проще всего сохранить правильный вариант и потом просто делать cp.
Хочу обратить ваше внимание на то, что без установленных vmware-tools система тоже понимает какие-то режимы видео, в частности текстовые и графический VGA, так что даже если vmware-tools не устанавливаются на вашей виртуальной системе — это не значит, что она не будет работать. Яркий пример — Plan9, которая прекрасно работает без всяких vmware-tools, чем еще раз подтверждает, что в лаборатории Bell не разучились писать оси.
Настройка сетевых интерфейсов — это самое важное, поскольку вряд ли кто-то ставит FreeBSD или Linux с иной целью, чем задействовать сетевые возможности последних. Представляемые виртуальные машины имеют несколько принципиально различных методов подключения к вашему компьютеру и ко внешней сети. Рассмотрим (как более канонический вариант) схемы подключения vmware и потом перечислим отличия в VirtualPC.
Существует три основных режима подключения виртуальной машины к сети: Bridged mode, NAT и Host Only, схематически показанные на рисунке.
Bridged mode дает виртуальной машине непосредственный доступ к внешнему интерфейсу хост-машины, на котором виртуальная машина самостоятельно устанавливает или получает через DHCP собственные сетевые параметры — такие как IP-адрес, маршрутизатор по умолчанию и тому подобные. Этот вариант подключения нужно использовать для тех случаев, когда на VM вы устанавливаете серверы, которые должны иметь определенные сетевые адреса.
NAT использует трансляцию адресов исходящего трафика. Напомню, что в этом случае адрес виртуальной машины, полученный по встроенному в NAT DHCP, в момент пересылки на внешний протокол подменяется на адрес хост-машины. При этом запрос помещается в таблицу запросов. Полученные ответы от удаленных систем сверяются с этой таблицей — и по ряду параметров находится соответствие, по типу «в ответ на ваше письмо от такого-то какого-то рады вам сообщить…». При пересылке в VM адрес снова подменяется, так чтобы программа, запросившая информацию, получила пакеты на свой порт и адрес. Таким образом пересылаются запросы и в серверные приложения, к которым пользователь обычно не обращается напрямую, например DNS.
NAT без проблем работает на исходящем трафике, но в случае входящего запроса все запросы приходят на адрес хост-машины, поскольку во внешнем мире все NAT-адреса были представлены одним адресом хост-системы. Для того чтобы виртуальная машина могла получать входящий трафик, на хост-машине необходимо вручную установить правило ретрансляции, смысл которого примерно следующий: «входящие пакеты на порту таком-то переводить в ВМ такую-то на порт такой-то (порт обычно тот же самый)». То есть доступ к серверу можно осуществлять и через NAT, но это требует дополнительной настройки. Для более подробной инструкции по настройке NAT под VMWare ищите «Understanding NAT» в справочном пособии и изучайте файл C:\WINNT\system32\vmnetnat.conf.
Третий режим Host Only представляет дела так, будто у хост-машины в дополнение к имеющимся сетевым интерфейсам есть еще одна сетевая карточка (видимая в системе и без запуска VM), к которой подключается наша ВМ, образуя с хост-машиной маленькую подсеть. Таким образом, можно устроить сеть на одном компьютере, что называется, не отходя от дома. При этом совсем не обязательно судьба исходящих пакетов заканчивается на хост-машине — она может выступать как мост между подсетями и переводить пакеты на другой интерфейс, например на модем. Таким образом ВМ может получать доступ к другим подсетям.
Завершая эту тему, нужно отметить, что все это относится к одному сетевому интерфейсу ВМ, виртуальной сетевой карточке, создаваемой по умолчанию при создании ВМ. Впоследствии вы можете создать любое количество таких интерфейсов — и на каждом настроить свой режим, превратив ВМ в маршрутизатор, NAT, DHCP и настроив его, как любой сервер.
Пару слов о VirtualPC, которая «тоже ВМ». Настройки здесь слабее, но, в общем, то же самое. Первый режим — None, никакой сети. Зачем он нужен — большая тайна Connectix. Второй режим — NAT, но, в отличие от VMWare, здесь никакой настройки не предусматривается, так что «A guest PC using Shared Networking is not able to act as an Internet server». Кроме NAT, есть еще режим Virtual Switch, что наиболее точно соответствует Bridged mode в VMWare. То есть виртуальная машина имеет свой собственный IP на внешнем интерфейсе хоста, со всеми вытекающими последствиями. У этого режима есть дополнительный фильтр, который ограничивает хождение пакетов «только между ВМ», «ВМ и хост» и «только наружу». При всей фантазии я не смог придумать этим фильтрам какого-то применения, так что оставляю это читателям в качестве лабораторной работы.
6. Настройка производительности
Естественно, ни для кого не секрет, что несколько приложений, работающих параллельно, будут работать медленнее, чем по отдельности. В случае с виртуальными машинами процесс усугубляется тем, что все приложения на всех машинах разделяют один (если вам повезло, то, возможно, два) процессора. Поскольку виртуальные машины не используют особых средств разделения процессорного времени, кроме системных диспетчеров хост- и виртуальной машин, и учитывая, что накладные расходы современных диспетчеров составляют не более 1%, то для расчета производительности можно применять обычную арифметику.
Например, для нормальной работы Windows 2000 нужен (для ваших целей — в зависимости от того, что вы там гоняете) Pentium II/III 600. Для работы вашего Linux-сервера в терминальном режиме требуется Pentium 300. Просто складывая эти числа, вы получите искомый 1 ГГц, на котором обе системы будут поддерживать прежнюю производительность.
В меню Settings > Preferences на закладке Priority VMWare есть установка приоритетов, помогающая тонко настроить приоритет вашей виртуальной машины при распределении циклов процессора. Global обозначает настройку для всех виртуальных машин. Локальная настройка относится только к текущей виртуальной машине. Grabbed input соответствует режиму, когда виртуальная машина получает управление и захватывает ввод пользователя; Ungrabbed, соответственно,- фоновому режиму виртуальной машины (даже если ее окно и находится на переднем плане).
Особое внимание нужно обратить на память, учитывая, что она выделяется статически, в момент запуска виртуальной машины. Поскольку на хост-системе установлена виртуальная память, можно загрузить несколько виртуальных машин — и под все будет распределена память. Но поскольку вся она (на 90%) будет в файле подкачки, производительность упадет драматически. Рассчитывайте память честно, беря в расчет только физическую память. Например, современные Linux-системы с Gnome для комфортной работы требуют около 128 Мб памяти. Плюс в хост-режиме под NT5 вы планируете обрабатывать графику (как я, например, обрабатываю скриншоты), что, по моим оценкам, тоже требует около 128 Мб. Добавьте сюда еще несколько приложений, таких как браузер, почтовый клиент, текстовый редактор. Таким образом, система с 256 Мб будет показывать несколько замедленную реакцию в требовательных к памяти приложениях, а вот установка 256 + 128 Мб обеспечит полный комфорт в работе.
Чтобы не блуждать в потемках и действовать наверняка, постоянно пользуйтесь Диспетчером задач для просмотра нагрузки на процессор и распределенной памяти, исследуйте, сколько требуют те или иные системы при запуске тех или иных приложений. Стремитесь привести свой компьютер в соответствие с требованиями ваших VM — и тогда вы получите максимум производительности и удовольствия от этой технологии. В конце концов, апгрейд памяти и процессора — это огромная экономия по сравнению с отдельным компьютером, не говоря уже об удобстве работы с несколькими системами одновременно.
7. Вопрос последний, который возникает первым: «Как мне выйти из этой виртуальной машины?»
В VMWare нажмите левые <Alt + Ctrl>, в VirtualPC — правый <Atl>. Эти же комбинации вернут вас к хост-системе из полноэкранного виртуального режима. Другое дело - как вообще вернуться из виртуального компьютерного мира в реальную жизнь, но для этого клавишной комбинации пока не предусмотрено.
Арсений Чеботарев,
[email protected]