Добавление DVD-привода в безголовый VirtualBox на FreeBSD

547
Dan Barowy

У меня есть виртуальная машина 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] 
4

2 ответа на вопрос

2
harrymc

Я думаю, что ваша ошибка в том, что вы должны определить хранилище как, 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 
Хорошее предложение, но, к сожалению, выдает ту же ошибку. Журнал теперь показывает две записи PIIX3 вместо одной (для LUN # 0 и LUN # 1). Dan Barowy 6 лет назад 0
Это должно было сработать. Что-то не так с вашей виртуальной машиной. Я предлагаю скопировать его на компьютер с графическим интерфейсом и изучить определение. При необходимости восстановите его на основе жесткого диска. harrymc 6 лет назад 0
2
3D1T0R

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

Согласно Руководству 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 Handbook, VBoxManage docs, Thomas-Krenn Wiki, Ask Ubuntu ответ от "phoibos"

`hald` уже запущен на моей машине, с точно таким же` / etc / devfs`, который у вас есть. Хорошее мышление, хотя! Dan Barowy 6 лет назад 0
К сожалению, этот ответ не помог (я подозреваю, что ошибка VBox), но он кажется достаточно полным, что, надеюсь, это поможет кому-то еще. Dan Barowy 6 лет назад 0
Я отредактировал свой ответ, чтобы показать информацию о том, как сделать ISO-файлы с ваших компакт-дисков в качестве обходного пути для этой проблемы. Поскольку это кажется ошибкой в ​​VirtualBox, я призываю вас сообщить об этом через их [Bugtracker] (https://www.virtualbox.org/wiki/Bugtracker). Если вы это сделаете, пожалуйста, опубликуйте ссылку на ошибку в комментарии здесь, и я отредактирую ее в своем ответе. 3D1T0R 6 лет назад 0
@DanBarowy: Вы отправили сообщение об ошибке? 3D1T0R 6 лет назад 0

Похожие вопросы