Наши партнеры

UnixForum






Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

Заметки пользователя Linux. Установка VMware Workstation 4.0.5

(C) В.А.Костромин, kos @ rus-linux dot net

Часть 5. Материальное воплощение виртуального компьютера

4 января 2004 г., последние изменения внесены 14 января 2004 г.

Предыдущая страница

Хотя я и пообещал в конце предыдущей заметки заняться подключением физического диска к виртуальному компьютеру, но на следующий день мне пришлось поменять свои планы. Дело в том, что на следующий день виртуальный компьютер, на котором у меня стояла Windows NT, отказался запускаться. Два других (помните, с двумя вариантами Linux?) работали исправно, а самый нужный - забарахлил. Путем каких-то манипуляций мне удалось запустить его еще раз, причем я постарался в ходе этого запуска скопировать все нужные мне данные на тот физический диск, который был подключен к виртуальному компьютеру как разделяемый ресурс. Это мне удалось, так что я уже не очень переживал. Даже тогда, когда после очередной перезагрузки (я выключаю компьютер на ночь) восстановить работоспособность "какими-то махинациями" мне уже не удалось. И пришлось попытаться разобраться с тем, что же представляет из себя виртуальный компьютер, и в каких файлах хранится вся относящаяся к нему информация.

Для начала вспомним, что сама система VMware представляет собой демон (процесс), запускаемый файлом /usr/bin/vmware. Реально /usr/bin/vmware - это скрипт, запускающий целую группу процессов. Когда я запустил саму систему VMware, но еще не запускал ни одного виртуального компьютера, команда pstree -p показала следующее:

init(1)-+-atd(1295)
        |-kdeinit(1457)---vmware(2068)
        |-vmnet-bridge(913)
        |-vmnet-natd(936)
После того, как я запустил один виртуальный компьютер, в выводе той же команды я увидел:
init(1)-+-atd(1295)
        |-kdeinit(1457)---vmware(2068)---vmware-vmx(2074)-+-vmware-mks(2075)
        |                                                 |-vmware-vmx(2076)
        |                                                 |-vmware-vmx(2077)
        |                                                 |-vmware-vmx(2078)
        |                                                 `-vmware-vmx(2079)---vmware-vmx(2080)
        |-vmnet-bridge(913)
        |-vmnet-natd(936)

Когда я запустил и второй виртуальный компьютер, картина приняла следующий вид:

init(1)-+-atd(1295)
        |-kdeinit(1457)---vmware(2068)-+-vmware-vmx(2074)-+-vmware-mks(2075)
        |                              |                  |-vmware-vmx(2076)
        |                              |                  |-vmware-vmx(2077)
        |                              |                  |-vmware-vmx(2078)
        |                              |                  `-vmware-vmx(2079)---vmware-vmx(2080)
        |                              `-vmware-vmx(2129)-+-vmware-mks(2130)
        |                                                 |-vmware-vmx(2131)
        |                                                 |-vmware-vmx(2132)
        |                                                 |-vmware-vmx(2133)
        |                                                 `-vmware-vmx(2134)---vmware-vmx(2135)
        |-vmnet-bridge(913)
        |-vmnet-natd(936)

Как видите, для каждого виртуального компьютера запускается целая группа процессов. Файлы vmware-vmx и vmware-mks нашлись в двух каталогах: /usr/lib/vmware/bin и /usr/lib/vmware/bin-debug. Но это все файлы, относящиеся к самой системе VMware. Файлы же, относящиеся к нашему виртуальному компьютеру, надо искать в своем домашнем каталоге. Действительно, когда я создавал свой виртуальный компьютер, я запускал VMware с правами простого пользователя, так что все создаваемые файлы не могут размещаться в системных каталогах.

В моем домашнем каталоге обнаружились два подкаталога: vmware и .vmware (с точкой). Давайте вначале заглянем в .vmware. Там я увидел три файла:

-rw-r--r--    1 kos      kos           398 Дек 13 21:46 license.ws.4.0
-rw-rw-r--    1 kos      kos          1339 Янв 11 17:09 preferences
-rw-rw-r--    1 kos      kos           637 Янв 11 17:05 vmlist
Об их назначении можно догадаться по названиям. В частности, первый файл - это, очевидно, файл лицензии. И просмотр его содержимого только подтверждает эту догадку. Прежде чем делать окончательные заключения относительно двух других файлов, давайте тоже посмотрим на их содержимое.

Файл vmlist.

-------------------------------------------------
# This file is automatically generated.
# Please do not edit it by hand.
vmlist1.config = "/home/kos/vmware/linux-test/linux-test.vmx"
vmlist1.GuestOS = "Linux"
vmlist1.DisplayName = "Mandrake 9.2"
vmlist1.ParentID = "0"
vmlist1.ItemID = "1"
vmlist1.SeqID = "0"
vmlist2.config = "/mnt/dop/kos/vmware/winNT/winNT.cfg"
vmlist2.GuestOS = "Windows NT"
vmlist2.DisplayName = "Windows NT"
vmlist2.ParentID = "0"
vmlist2.ItemID = "2"
vmlist2.SeqID = "1"
vmlist3.config = "/home/kos/vmware/ASP Linux 9/ASP Linux 9.vmx"
vmlist3.GuestOS = "Linux"
vmlist3.DisplayName = "ASP Linux 9"
vmlist3.ParentID = "0"
vmlist3.ItemID = "3"
vmlist3.SeqID = "2"
-------------------------------------------------
Содержимое этого файла похоже на список виртуальных компьютеров. Но, как я выяснил чуть позже, файл vmlist не является списком всех известных системе VMware виртуальных компьютеров. Он выполняет более скромную роль - служит для формирования боковой панели Favorites окна VMware, то есть представляет собой список тех виртуальных компьютеров, которые отображаются в этой самой панели. При этом для каждого такого компьютера указывается его название, местоположение конфигурационного файла, запускаемая в этом компьютере ОС, и три каких-то идентификатора, назначение которых мне пока непонятно.

Файл preferences.

-------------------------------------------------
# DO NOT EDIT THIS FILE.
# This file is automatically generated and maintained by vmware.
#
# If you are going to ignore this order, at least first make
# sure that no instances of vmware are running.
pref.motionScroll = "TRUE"
prefvmx.mru.config = ""
prefvmx.allVMMemoryLimit = "160"
prefvmx.checkMemoryLimit = "TRUE"
hint.mks.fullscreen = "FALSE"
hint.cowdisk.rootDisk.checkSpace = "FALSE"
pref.view.favorites.width = "131"
pref.placement.left = "97"
pref.placement.right = "900"
pref.placement.bottom = "552"
pref.openedVM0.present = "TRUE"
pref.openedVM0.file = "/home/kos/vmware/linux-test/linux-test.vmx"
pref.openedVM.maxNum = "3"
pref.autoFit = "TRUE"
pref.view.favorites = "TRUE"
pref.placement.top = "0"
pref.view.tabs = "TRUE"
pref.openedVM1.present = "TRUE"
pref.openedVM1.file = "/home/kos/vmware/ASP Linux 9/ASP Linux 9.vmx"
hint.hostlinux.othervms = "FALSE"
prefvmx.defaultVMPath = "/home/kos/vmware"
pref.openedVM2.present = "TRUE"
pref.openedVM2.file = "/mnt/dop/kos/vmware/winNT/winNT.cfg"
pref.view.toolbars = "FALSE"
pref.view.statusBar = "FALSE"
pref.grabOnKeyPress = "TRUE"
pref.grabOnMouseClick = "TRUE"
pref.hideCursorOnUngrab = "TRUE"
pref.openedVM3.present = "FALSE"
pref.openedVM3.file = "/home/kos/vmware/winNT/winNT.vmx"
-------------------------------------------------
Содержимое файла preferences труднее поддается интерпретации. Тем не менее ясно, что здесь указан путь к каталогу, в котором по умолчанию хранятся виртуальные машины:
prefvmx.defaultVMPath = "/home/kos/vmware"
Для каждой ВМ здесь указывается полное имя конфигурационного файла и задаются параметры поведения окна: показывать ли панель статуса, боковую панель "Favorites", захватывать ли мышку при попадание ее в окно ВМ, и так далее. На что я особо обратил внимание в этом файле, так это на то, что здесь определены 4 ВМ (VM0, VM1, VM2, VM3), причем в отличие от трех первых ВМ для четвертой ВМ в строке
pref.openedVM3.present = "FALSE"
задано значение FALSE вместо TRUE. Я действительно создавал четвертую ВМ, которая как-то исчезла у меня из вида в ходе экспериментов. Но, как видите, следы от нее остались. И не только следы, как вы увидите чуть ниже.

В каталоге /home/kos/vmware/ обнаружились три подкаталога со следующим содержимым:

Подкаталог /home/kos/vmware/winNT/:
-rw-------    1 kos      kos          8664 Янв  1 22:32 nvram
-rw-r--r--    1 kos      kos         24843 Янв  1 22:32 vmware.log
-rw-------    1 kos      kos        327680 Янв  2 13:49 winNT-s001.vmdk
-rw-------    1 kos      kos        327680 Янв  2 13:49 winNT-s002.vmdk
-rw-------    1 kos      kos         65536 Янв  2 13:49 winNT-s003.vmdk
-rw-------    1 kos      kos           396 Янв  1 22:12 winNT.vmdk
-rwxrwxr-x    1 kos      kos           738 Янв  1 22:31 winNT.vmx
Подкаталог /home/kos/vmware/ASP Linux/:
-rwxrwxr-x    1 kos      kos           745 Дек 20 21:02 ASP Linux 9.vmx
-rw-------    1 kos      kos      858193920 Янв 11 17:38 hda-s001.vmdk
-rw-------    1 kos      kos      956956672 Янв 11 17:38 hda-s002.vmdk
-rw-------    1 kos      kos         65536 Янв 11 17:38 hda-s003.vmdk
-rw-------    1 kos      kos           416 Янв 11 17:06 hda.vmdk
-rw-------    1 kos      kos          8664 Янв 11 17:38 nvram
-rw-r--r--    1 kos      kos         39249 Янв 11 17:38 vmware.log
Подкаталог /home/kos/vmware/linux-test/ (в этом ВМ была запущена Mandrake):
-rw-------    1 kos      kos      559087616 Янв 11 17:38 linux-test-s001.vmdk
-rw-------    1 kos      kos      67043328 Янв 11 17:38 linux-test-s002.vmdk
-rw-------    1 kos      kos         65536 Янв 11 17:38 linux-test-s003.vmdk
-rw-------    1 kos      kos           434 Янв 11 17:34 linux-test.vmdk
-rwxrwxr-x    1 kos      kos          1103 Янв 11 17:23 linux-test.vmx
-rw-------    1 kos      kos          8664 Янв 11 17:38 nvram
-rw-r--r--    1 kos      kos         42317 Янв 11 17:38 vmware.log
А вот подкаталога /mnt/dop/kos/vmware/winNT/, в котором должен был находиться файл winNT.cfg, я не нашел. Тут и стала понятной причина проблем с виртуальным компьютером, который имел имя Windows NT, и конфигурационный файл которого должен был иметь полное имя /mnt/dop/kos/vmware/winNT/winNT.cfg. Мой виртуальный компьютер оказался в каталоге /mnt/dop/kos/vmware/winNT/ по той причине, что после обновления операционной системы и переустановки VMware я выполнил операцию "Open existing virtual machine" (см. часть 1 заметок, рис.1). А потом я занялся "упорядочением" файлов на диске и перенес этот каталог в другое место. Естественно, что VMware была поставлена в тупик. Я вернул каталог в его прежнее положение и попытался снова запустить VMware. В окне VMware снова появилась и вкладка "Windows NT", и эта виртуальная машина успешно запустилась. Содержимое подкаталога /mnt/dop/kos/vmware/winNT/ при этом вы видите на следующем листинге:
Подкаталог /mnt/dop/kos/vmware/winNT/ :
-rw-------    1 kos      kos         70144 Янв  2 13:48 winNT-02.vmdk
-rwxrwxr-x    1 kos      kos          1712 Янв  2 13:52 winNT.cfg
-rw-r--r--    1 kos      kos         29008 Янв 12 18:32 winNT.log
-rw-rw-r--    1 kos      kos          8664 Янв 12 18:28 winNT.nvram
-rw-------    1 kos      kos      1003457024 Янв  2 13:48 winNT.vmdk

Тут уж я совсем обнаглел и решил перенести этот виртуальный компьютер в стандартный каталог /home/kos/vmware/. Сначала переименовал подкаталог /mnt/dop/kos/vmware/winNT/ в /mnt/dop/kos/vmware/WindowsNT (поскольку в /home/kos/vmware уже имелся подкаталог с именем winNT), а затем перенес подкаталог WindowsNT в /home/kos/vmware/.

После этого внес следующие поправки в конфигурационные файлы:
- в файле ~/.vmware/vmlist - заменил строку
vmlist2.config = "/mnt/dop/kos/vmware/winNT/winNT.cfg"
на строку
vmlist2.config = "/home/kos/vmware/WindowsNT/winNT.cfg"
- в файле ~/.vmware/preferences строки
pref.openedVM2.file = "/mnt/dop/kos/vmware/winNT/winNT.cfg"
на
pref.openedVM2.file = "/home/kos/vmware/WindowsNT/winNT.cfg"
Однако этого оказалось еще недостаточно. При запуске VMware и виртуального компьютера с именем WindowsNT появилось сообщение

Рис. 30. Сообщение о том, что не найден файл жесткого диска.

Я стал искать, где же задан этот неправильный путь и нашел эту ошибку в файле /home/kos/vmware/WindowsNT/winNT.cfg. По-видимому, это и есть главный конфигурационный файл виртуального компьютера. Его содержимое полностью воспроизведено в следующем листинге

Файл /home/kos/vmware/WindowsNT/winNT.cfg
------------------------------------------------------
#!/usr/bin/vmware
config.version = "7"
virtualHW.version = "2"
displayName = "Windows NT"

# CD-ROM
ide1:0.present = TRUE
ide1:0.fileName = "/dev/cdrom"
ide1:0.deviceType = "cdrom-raw"
ide1:0.startConnected = "TRUE"

# Virtual hard disk on scsi0:0
scsi0.present = "TRUE"
scsi0:0.present = "TRUE"
scsi0:0.fileName = "/home/kos/vmware/dop/winNT.vmdk"
scsi0:0.deviceType = scsi-hardDisk
scsi0:0.mode = "persistent"
scsi0:0.writethrough = FALSE

# Floppy
floppy0.present = "TRUE"
floppy0.fileName = /dev/fd0
floppy0.startConnected = "FALSE"

# Networked to host only subnet 
ethernet0.present = TRUE
ethernet0.connectionType = "bridged"

# Memory size
memsize = "128"

# Nvram
nvram = winNT.nvram

# Log file
log.fileName = winNT.log

# Hints
guestOS = winNT

tools.remindInstall = "FALSE"
serial0.present = "TRUE"
serial0.fileName = "/dev/ttyS0"

mouse.hostType = "ps2"

usb.present = "TRUE"
usb.generic.autoconnect = "TRUE"
usb.generic.devfsPath = "/proc/bus/usb"

priority.grabbed = "normal"
priority.ungrabbed = "normal"
isolation.tools.dnd.disable = "TRUE"
uuid.location = "56 4d 0f a7 e3 df b1 82-58 77 48 ba a0 1e 37 69"
ethernet0.addressType = "generated"
ethernet0.generatedAddress = "00:0c:29:65:83:c5"
ethernet0.generatedAddressOffset = "0"
tools.syncTime = "TRUE"

Ethernet0.vnet = "/dev/vmnet0"

sharedFolder.maxNum = "1"
sharedFolder0.present = "TRUE"
sharedFolder0.enabled = "TRUE"
sharedFolder0.readAccess = "TRUE"
sharedFolder0.writeAccess = "TRUE"
sharedFolder0.hostPath = "/home/kos/"
sharedFolder0.guestName = "public"
sharedFolder0.expiration = "never"

#scsi0:1.present = "TRUE"
#scsi0:1.fileName = "/mnt/dop/kos/vmware/winNT/winNT-02.vmdk"

scsi0:1.mode = "persistent"
sound.present = "TRUE"

uuid.bios = "56 4d 0f a7 e3 df b1 82-58 77 48 ba a0 1e 37 69"
------------------------------------------------------
Поменять в этом файле пришлось две строки, содержащие неправильные пути. После этого виртуальный компьютер запустился нормально.

А четвертой ВМ я по-прежнему не вижу. Так что продолжаем разбираться. Про эту машину, как вы помните, в файле preferences были записаны следующие строки:

pref.openedVM3.present = "FALSE"
pref.openedVM3.file = "/home/kos/vmware/winNT/winNT.vmx"
Я тогда попытался сделать следующее. В меню "File" системы VMware нашел пункт "Open" и появившемся окне ввода выбрал конфигурационный файл /home/kos/vmware/winNT/winNT.vmx. После этого в окне VMware появилась четвертая вкладка, а в файле preferences соответствующие строки приняли вид:
pref.openedVM3.present = "TRUE"
pref.openedVM3.file = "/home/kos/vmware/winNT/winNT.vmx"

Вероятно такой же эффект можно было получить и прямой заменой значения FALSE на TRUE в файле preferences.

Теперь можно хотя бы предварительно подвести некоторые итоги (кой-какие данные для приводимого ниже описания я извлек из материалов, имеющихся на сайте компании VMware). Итак:

Виртуальный компьютер хранится в базовой системе в виде набора файлов, расположенных в отдельном каталоге для каждой конкретной виртуальной машины. По умолчанию эти каталоги размещены в подкаталоге vmware домашнего каталога пользователя (но, как мы видели, могут размещаться и в других местах). Материальный образ виртуального компьютера образуют следующие файлы:

  • Файл с расширением .vmx представляет собой конфигурационный файл, в котором сохраняются установки, заданные при создании виртуального компьютера, или измененные затем с помощью Панели управления виртуальной машины. Если виртуальный компьютер на базовом компьютере, работающем под Linux, был создан с помощью предыдущих версий системы VMware, этот файл может иметь расширение .cfg.
  • Файл nvram (или имеющий расширение .nvram) - это файл, в котором хранится состояние BIOS виртуального компьютера.
  • Файлы с расширением .vmdk - это файлы, в которых хранится образ виртуального диска или дисков.
    Виртуальный диск может состоять из одного или более файлов .vmdk. Если вы указали при создании виртуального диска, что он должен быть разбит на "ломти" (chunks) по 2GB, число .vmdk-файлов зависит от размера виртуального диска. По мере того, как вы записываете информацию на виртуальный диск, размер .vmdk-файла(ов) увеличивается вплоть до достижения каждым из них размера в 2GB. (Если вы при создании виртуального диска указали, что все пространство должно быть выделено, когда вы создаете диск, эти файлы с самого начала имеют максимальный размер и уже не увеличиваются.) Почти все содержимое файла .vmdk представляет собой данные виртуальной машины и только очень небольшая часть файла представляет собой накладные расходы.

    Если виртуальная машина работает непосредственно с физическим диском, в файле .vmdk хранится информация о разделах диска, к которым виртуальной машине разрешен доступ. Замечание: Ранние версии продуктов VMware использовали расширение .dsk для файлов виртуальных дисков.

  • Файл с расширением .log (или просто vmware.log) - это файл, содержащий записи об основных событиях в жизни VMware Workstation. Этот файл может оказаться полезен в случае каких-то проблем с VMware. Этот файл сохраняется в каталоге, в котором хранится конфигурационный файл (.vmx или .cfg) виртуальной машины.

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

  • В первую очередь среди таких файлов надо упомянуть файлы с расширением .WRITELOCK. Такие файлы появляются после запуска виртуального компьютера. Они создаются для файлов конфигурации и каждого виртуального (или физического) диска.
  • Файлы с расширением .vmdk.REDO_xxxxxx автоматически создаются для каждого виртуального диска, когда вы делаете снимок состояния виртуального компьютера. В каталоге может одновременно находиться несколько таких файлов. Суффикс xxxxxx добавляется автоматически с целью избежать дублирования имен таких файлов.
  • Файлы с расширением .vmss хранят состояние виртуального компьютера когда он находится в режиме suspended. Замечание: Некоторые из более ранних версий VMware использовали для таких файлов расширение .std.
  • Файл с расширением .vmsn - файл снимка состояния виртуальной машины, в котором сохраняется состояние работающей машины на тот момент, когда вы делаете снимок ее состояния.
  • Файлы с расширением .vmx.sav или .cfg.sav - хранят состояние конфигурации ВМ на тот момент, кода был сделан снимок.

Могут быть и другие файлы, некоторые из них появляются только в том случае, когда виртуальный компьютер запущен. Но, честно признаться, я не делал снимков состояния виртуального компьютера и не переводил его в замороженное состояние, а поэтому видел и манипулировал только с тем файлами, которые выше отнесены к числу таких, которые имеются в каталоге всегда. Как будут отражаться в конфигурационных файлах те файлы, которые отнесены к категории дополнительных, мне не ведомо.

При запуске системы VMware она считывает сначала файлы ~/.vmware/prefarences и ~/.vmware/vmlist. С помощью файла ~/.vmware/prefarences определяется перечень созданных данным пользователем виртуальных компьютеров. Для каждого из них счиитывается конфигурационный файл (имя которого указано в файле ~/.vmware/prefarences), после чего находятся файлы соответствующих виртуальных устройств (BIOS, жесткие диски и так далее). После этого система VMware готова запустить любой из этих виртуальных компьютеров по требованию пользователя.

Теперь достаточно смело обращаюсь с моими виртуальными компьютерами (точнее, с основными их файлами). Могу, при необходимости, перенести их в другой каталог, могу переименовать, причем после внесения соответствующих изменений в конфигурационные файлы мой виртуальный компьютер работает как ни в чем ни бывало! Надо только соблюдать то требование, которое указано в начале каждого из упоминаемых в данной статье конфигурационных файлов - все они создаются системой VMware автоматически, так что прежде, чем приступать к их редактированию, надо по меньшей мере остановить систему VMware (останавливать основной демон нет необходимости, но окно VMware требуется закрыть).

Кстати, теперь я могу решить и еще одну проблему, которая раньше вызывала у меня затруднения. Помните тот четвертый компьютер, который я на какое-то время потерял? Произошло это по той причине, что после его создания я решил его удалить за ненадобностью. Пытаясь сделать это через меню системы VMware, я нашел только один пункт, который хоть как-то вроде бы подходил для решения этой задачи - это пункт "File/Close". После выполнения этой команды вкладка "WinNT" в окне VMware пропала. Однако, как вы уже видели, тем самым "материальная сущность" виртуального компьютера затронута не была, он был только "скрыт от глаз моих". Но теперь я знаю, где лежат и как вызываются виртуальные компьютеры, так что могу ненужные компьютеры и удалить, чтобы, к примеру, освободить место на диске. А места, как вы тоже видели, они могут занимать немало. Впрочем, я пока этот четвертый компьютер "стирать без следа" не собираюсь. Как раз с помощью этого компьютера я и поэкспериментирую с использованием физического диска в виртуальном компьютере, чем давно уже собирался заняться.

Список литературы и ссылки.

  1. В.А.Костромин, "Linux для пользователя", изд. БХВ-Петербург, 2002 год, серия "Самоучитель", 650 стр.