11

В Windows 7 я пытаюсь запустить виртуальную машину с VMWare Player из операционной системы, установленной в физическом разделе. Однако, когда я загружаю виртуальную машину, VMWare Player говорит, что не может получить доступ к физическому диску для записи.

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

Я погуглил проблему и нашел несколько обходных путей. Однако чистые , похоже, работают только на целых физических дисках, а не на разделах.

Так что я остался бы с грязным решением. Короче говоря, он вмешивается в MBR, чтобы стереть любые следы используемых разделов, заставляет Windows забыть о них, а затем восстанавливает MBR, чтобы мы могли запустить виртуальную машину.

Я не уверен, что хочу это сделать. Есть ли способ позволить VMWare получить эксклюзивный доступ к разделу, не требуя от меня его уничтожения? Полагаю, я бы искал способ отключить только разделы, а не целые физические диски.


Больше информации, связанной с щедростью.

У меня двойная загрузка: Mac OS - моя основная операционная система, и у меня также установлена Windows. Я могу запускать Windows на виртуальной машине, если не хочу перезагружаться, но я бы хотел иметь возможность запускать Mac OS на виртуальной машине, когда я нахожусь под Windows.

Моя цель - запустить мой основной раздел Mac OS из VMWare под Windows, так же, как я запускаю Windows из VMWare Fusion. (Поскольку это моя основная ОС, я не планирую исправлять ядро или что-то еще, чтобы оно работало на виртуальной машине.) Я создал виртуальную машину из VMWare Fusion (поскольку она имеет тип виртуальной машины "Mac OS X Server"), затем переместил ее в Windows и изменил ее из VMWare Player. Кажется, почти работает, когда ОС попадает на экран загрузки, а затем виртуальная машина умирает, потому что не может получить доступ к \\.\PhysicalDrive0 .

Виртуальный ящик дает сбой еще сильнее, так как он запускает Mac OS в подробном режиме и очень быстро падает (но, похоже, может получить доступ к разделу), поэтому я думаю, что было бы проще получить доступ к моему разделу VMWare, чем запускать Virtual Box Это.

С юридической стороны, я бы запустил одну копию Mac OS X на одном компьютере с Apple, так что я в порядке.

2 ответа2

5

Я встречал только одно возможное решение, используя бесплатный драйвер виртуального диска imdisk вместе с devio (удаленный доступ к накопителю и получение данных). Поскольку imdisk является драйвером ядра, он может выполнять запись в раздел. К сожалению, поскольку devio работает в пользовательском режиме, я не слишком уверен, будет ли этот подход работать для вас.

devio может получить физический раздел и опубликовать его в сети. Например:

devio -r 9000 \\.\PhysicalDrive0 2

публикует с первого диска второй раздел по TCP-порту 9000 и будет ожидать подключения к этому порту. Лучше отключите брандмауэр во время тестирования и запустите devio от имени администратора.

Чтобы определить этот опубликованный раздел как новый и автономный жесткий диск, используйте:

imdisk -a -t proxy -o ip -f 127.0.0.1 -m R:

который с помощью localhost создаст новый жесткий диск с именем R, который не является разделом чего-либо. Теперь вы можете попытаться использовать настоящий виртуальный жесткий диск R в виртуальной машине VMware.

Этот подход подробно объясняется в Devio: Удаленный доступ к накопителю и получение данных.

Если это не сработает, вам придется:

  1. Примите опасное решение, которое изменяет MBR.
  2. Откажитесь от использования MacOS в Win7 в качестве виртуальной машины, используя файлы в разделе Mac через приложения Windows (с проблемами символов конца строки).
  3. Используйте продукт Виртуальной файловой системы, такой как ELDOS Callback File System, хотя я сомневаюсь, что эта проблема стоит для вас несколько тысяч долларов.
  4. Отказаться от Windows 7 и перейти на XP.
  5. Измените источник imdisk таким образом, чтобы в качестве драйвера ядра он создавал диск с изображением непосредственно на физическом разделе, без необходимости использования devio.
2

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

  1. Напишите драйвер, чтобы обойти ограничение, установленное Windows, используя (полу-?)задокументированный флаг SL_FORCE_DIRECT_WRITE .

  2. Перехватите вызов CreateFile и / или WriteFile из VMWare, используя такую библиотеку, как EasyHook (я же говорил, это было легко!) для связи с файлом вручную с вашим драйвером, возможно, для связи с драйвером с помощью DeviceIoControl .

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


Редактировать:

Я предполагаю, что вы уже поняли это, но структура, которую вам нужно изменить, называется FLT_IO_PARAMETER_BLOCK для IRP_MJ_READ . Не уверен, насколько легко это будет, но это не должно быть слишком сложно.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .