4

У меня есть виртуальная машина Windows 10, работающая без звука в VirtualBox на FreeBSD 11.1. Работает без проблем. Я хотел бы разрешить виртуальной машине доступ к физическим CD /DVD, чтобы я мог вставлять реальные диски и открывать их в виртуальной машине.

Когда я делаю

VBoxManage storageattach MyVM --storagectl "SATA Controller" --port 1 --device 0 --type dvddrive --medium host:/dev/cd0

ВМ больше не запускается.

$ VBoxManage startvm MyVM
--type headless Waiting for VM "MyVM" to power on...
VBoxManage: error: The VM session was aborted
VBoxManage: error: Details: code NS_ERROR_FAILURE (0x80004005), component SessionMachine, interface ISession

Я гарантировал, что /etc/devfs.conf содержит

perm cd* 0660
perm xpt0 0660
perm pass* 0660

а мой пользователь в группе операторов. Кроме того, журнал VirtualBox не содержит явных ошибок или предупреждений. ВМ просто прерывается без какой-либо полезной диагностической информации. Извлечение устройства CD восстанавливает работоспособность виртуальной машины.

Есть идеи?

Обновление: похоже, что VBoxHeadless работу из-за ошибки сегментации. Причина до сих пор неясна для меня. Из /var/log/messages:

May 5 12:05:31 the_computer kernel: vboxdrv: XXXXXXXXXXXXXXXX VMMR0.r0
May 5 12:05:31 the_computer kernel: vboxdrv: XXXXXXXXXXXXXXXX VBoxDDR0.r0
May 5 12:05:31 the_computer kernel: pid 61621 (VBoxHeadless), uid 1001: exited on signal 11

Обновление 2: точка, в которой VBoxHeadless прерывает работу, - это место, где виртуальная машина инициализирует устройства ATA. Без устройства CD я вижу в журнале следующее:

...
00:00:01.280311 VD#0: Cancelling all active requests
00:00:01.280468 PIIX3 ATA: LUN#0: no unit
...

но когда я добавляю его обратно, я получаю

...
00:00:00.273730 VD#0: Cancelling all active requests
[end of file]

2 ответа2

2

Я думаю, что ваша ошибка в том, что вы должны определить хранилище как IDE Controller а не SATA Controller .

Команда должна выглядеть так:

VBoxManage storageattach MyVM --storagectl "IDE Controller" --port 1 --device 0 --type dvddrive --medium host:/dev/cd0

В случае проблем попробуйте это:

   $ VBoxManage storagectl MyVM --name "IDE Controller" --remove 
   $ VBoxManage storagectl MyVM --name "IDE Controller" --add ide
   $ VBoxManage storageattach MyVM --storagectl "IDE Controller" --port 1 --device 0 --type dvddrive --medium host:/dev/cd0
2

Вещи, чтобы попробовать:

Согласно Руководству FreeBSD § 21.6.3: VirtualBox ™ Host для доступа к DVD/CD

Для работы функций DVD/CD VirtualBox ™ необходимо запустить HAL

Таким образом, вам нужно ...

включите его в /etc/rc.conf и запустите, если он еще не запущен

Это можно сделать, добавив hald_enable="YES" в файл /etc/rc.conf и затем выполнив

# service hald start

Это в дополнение к требованию для пользователя, нуждающегося в доступе к /dev/xpt0 , /dev/cdN и /dev/passN , что в соответствии с тем же разделом руководства «обычно достигается путем превращения пользователя в члена operator "и исправляя разрешения устройства", добавив эти строки в /etc/devfs.conf "

perm cd* 0660
perm xpt0 0660
perm pass* 0660

и (чтобы система использовала эти изменения) перезапустить сервис devfs

# service devfs restart

Если после всего этого ваша виртуальная машина по-прежнему не запускается при подключении к приводу CD/DVD вашего хоста, рассмотрите возможность следования этому совету (взято с той же страницы, что и выше):

При необходимости сначала создайте пустое устройство IDE CD/DVD. Затем выберите Host Drive во всплывающем меню для выбора виртуального CD/DVD привода.

Если вы не можете использовать упомянутое «всплывающее меню», я думаю (из прочтения документации), что следующее должно быть эквивалентно командной строке:

  1. Когда виртуальная машина выключена: подключите пустое виртуальное устройство IDE CD/DVD

    VBoxManage storageattach MyVM --storagectl "SATA Controller" --port 1 --device 0 --type dvddrive --medium emptydrive
    
  2. Загрузите свою виртуальную машину:

    VBoxManage startvm MyVM
    
  3. Во время работы виртуальной машины: переключитесь на использование хост-диска

    VBoxManage storageattach MyVM --storagectl "SATA Controller" --port 1 --device 0 --type dvddrive --medium host:/dev/cd0
    

К сожалению, это все еще может не работать:

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

Временное решение:

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

  1. Прочитайте блок и размер тома диска, чтобы вы могли сделать идеальный ISO
    (этот шаг не является действительно необходимым, но ISO, созданный без него, будет иметь другую контрольную сумму, чем исходный файл ISO, использованный для создания компакт-диска из-за "пары нулевых блоков данных в конце", плюс размер тома может быть пригодится позже)
    isoinfo -d -i /dev/cd0 | grep -i -E 'block size|volume size'

    Вы получите вывод, похожий на этот:

    Logical block size is: 2048
    Volume size is: 327867
    
  2. Используйте dd для копирования содержимого диска

    • dd if=/dev/cd0 of=<cd name>.iso bs=<block size from step 1> count=<volume size from step 1>
      Например, я создам ISO с именем «MyVirtualCD.iso» из приведенного выше примера диска:
      dd if=/dev/cd0 of=MyVirtualCD.iso bs=2048 count=327867
    • Если вы пропустили шаг 1, просто оставьте bs и count , например, так:
      dd if=/dev/cd0 of=MyVirtualCD.iso
      Ваш ISO все равно будет работать нормально, в конце у него просто будут ненужные "нулевые блоки данных".
    • Если вы используете новую версию dd она может поддерживать отображение своего статуса, добавив status=progress в приведенную выше командную строку.
    • Если вы используете более старую версию dd или хотите более приятный на вид индикатор прогресса, вы можете установить pv через "Коллекцию портов" или "FreshPorts" и направить вывод dd через pv чтобы увидеть статистику, а так как мы знаем размер тома с шага 1, точный индикатор выполнения:
      dd if=/dev/cd0 | pv -s <volume size from step 1> | dd of=<cd name>.iso

      В нашем примере это будет выглядеть следующим образом:
      dd if=/dev/cd0 of=MyVirtualCD.iso | pv -s 327867 | dd of=MyVirtualCD.iso

  3. Теперь вы можете подключить ISO к ВМ и загрузить его:

    • VBoxManage storageattach MyVM --storagectl "SATA Controller" --port 1 --device 0 --type dvddrive --medium /path/to/MyVirtualCD.iso
    • VBoxManage startvm MyVM
    • Кроме того, если вы загружаете свою виртуальную машину, на которой она настроена на использование носителя emptydrive упомянутого ранее, пустой виртуальный дисковод компакт-дисков будет доступен для вас, чтобы использовать ту же команду storageattach когда виртуальная машина работает для замены одного из ваших виртуальных компакт-дисков в любое время.

Источники:
Руководство FreeBSD, VBoxManage docs, Thomas-Krenn Wiki, Ask Ubuntu ответ от "phoibos"

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