Adicionando uma unidade de DVD a um VirtualBox headless no FreeBSD

4

Eu tenho uma VM do Windows 10 executando sem cabeça no VirtualBox no FreeBSD 11.1. Corre sem problemas. Gostaria de habilitar a VM para acessar CDs / DVDs físicos para que eu possa inserir discos reais e abri-los na VM.

Quando faço

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

a VM não inicia mais.

$ 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

Assegurei que /etc/devfs.conf contém

perm cd* 0660
perm xpt0 0660
perm pass* 0660

e meu usuário está no grupo de operadores. Além disso, o log do VirtualBox não contém erros ou avisos óbvios. A VM apenas aborta sem qualquer informação de diagnóstico útil. A remoção do dispositivo de CD restaura a VM para a funcionalidade.

Alguma idéia?

Atualização: parece que VBoxHeadless está sendo encerrado devido a uma falha de segmentação. A causa ainda não está clara para mim. De /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

Atualização 2: o ponto em que VBoxHeadless é anulado é onde a VM inicializa os dispositivos ATA. Sem o dispositivo de CD, vejo o seguinte no log:

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

mas quando eu adiciono de volta, recebo

...
00:00:00.273730 VD#0: Cancelling all active requests
[end of file]
    
por Dan Barowy 06.05.2018 / 17:23

2 respostas

2

Coisas para experimentar:

De acordo com o Manual do FreeBSD §21.6 .3: VirtualBox ™ Host DVD / CD Access

HAL needs to run for VirtualBox™ DVD/CD functions to work

Assim você precisa…

enable it in /etc/rc.conf and start it if it is not already running

Isso é feito adicionando hald_enable="YES" ao seu arquivo /etc/rc.conf e, em seguida, executando

# service hald start

Isso é um acréscimo ao requisito de que o usuário precise de acesso a /dev/xpt0 , /dev/cdN e /dev/passN , que, de acordo com a mesma seção do manual, "geralmente são atingidos tornando o usuário membro de operator ", e corrigindo as permissões do dispositivo" adicionando estas linhas a /etc/devfs.conf "

perm cd* 0660
perm xpt0 0660
perm pass* 0660

e (para que o sistema faça uso dessas mudanças) reiniciando o devfs service

# service devfs restart

Se, depois de tudo isso, sua VM ainda não iniciar quando estiver conectada à sua unidade de CD / DVD, considere seguir este conselho (tirado do mesma página como acima):

If needed, create an empty IDE CD/DVD device first. Then choose the Host Drive from the popup menu for the virtual CD/DVD drive selection.

Se você não pode usar o 'menu pop-up' mencionado, acho que (a partir da leitura da documentação) o seguinte deve ser o equivalente na linha de comando:

  1. Com a VM desligada: conecte um dispositivo de CD / DVD IDE virtual vazio

    VBoxManage storageattach MyVM --storagectl "SATA Controller" --port 1 --device 0 --type dvddrive --medium emptydrive
    
  2. Inicialize sua VM:

    VBoxManage startvm MyVM
    
  3. Enquanto a VM ainda está em execução: Mude para o uso da unidade host

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

Infelizmente, ainda pode não funcionar:

Parece que pode haver um bug no VirtualBox que está impedindo que isso funcione no seu sistema. Sugiro que o problema seja relatado aos desenvolvedores do VirtualBox no Bugtracker do projeto.

Solução alternativa:

Até que esse problema seja resolvido, recomendo que você trabalhe com o problema criando um arquivo ISO a partir do (s) disco (s) físico (s) para uso com o VirtualBox. (Algumas pessoas podem preferir isso de qualquer maneira.)

  1. Leia o tamanho do bloco e do volume do disco para que você possa criar um ISO perfeito (esse passo não é realmente necessário , mas um ISO feito sem ele terá uma soma de verificação diferente do arquivo ISO original usado para criar o CD devido a "Um par de blocos de dados nulos no final", mais o tamanho do volume pode ser útil posteriormente.
    isoinfo -d -i /dev/cd0 | grep -i -E 'block size|volume size'

    Você terá uma saída semelhante a esta:

    Logical block size is: 2048
    Volume size is: 327867
    
  2. Use dd para copiar o conteúdo do disco

    • dd if=/dev/cd0 of=<cd name>.iso bs=<block size from step 1> count=<volume size from step 1>
      Por exemplo, farei um ISO chamado "MyVirtualCD.iso" no disco de exemplo acima:
      dd if=/dev/cd0 of=MyVirtualCD.iso bs=2048 count=327867
    • Se você pulou a etapa 1, apenas deixe bs e count da seguinte forma:
      dd if=/dev/cd0 of=MyVirtualCD.iso
      Seu ISO ainda funcionará bem, ele terá apenas alguns "blocos de dados zero" desnecessários no final.
    • Se você estiver usando uma nova versão de dd , ele poderá ser compatível com a exibição do status adicionando status=progress à linha de comando acima
    • Se você estiver usando uma versão mais antiga de dd ou desejar um indicador de progresso mais atraente, instale pv via " A coleção de portes " ou " FreshPorts ", e canaliza a dd output através de pv para ver as estatísticas e, como sabemos o tamanho do volume da etapa 1, uma barra de progresso precisa:
      dd if=/dev/cd0 | pv -s <volume size from step 1> | dd of=<cd name>.iso

      No nosso exemplo, isso seria o seguinte:
      dd if=/dev/cd0 of=MyVirtualCD.iso | pv -s 327867 | dd of=MyVirtualCD.iso

  3. Agora você pode anexar o ISO à VM e inicializá-lo:

    • VBoxManage storageattach MyVM --storagectl "SATA Controller" --port 1 --device 0 --type dvddrive --medium /path/to/MyVirtualCD.iso
    • VBoxManage startvm MyVM
    • Além disso, se você inicializar sua VM com ela configurada para usar a mídia emptydrive mencionada anteriormente, a unidade de CD virtual vazia estará disponível para você usar o mesmo comando storageattach enquanto a VM estiver em execução para trocar seus CDs virtuais sempre que quiser.

Fontes:
Manual do FreeBSD , VBoxManage docs , Thomas-Krenn Wiki , Pergunte ao Ubuntu por "phoibos"

    
por 15.05.2018 / 04:50
2

Acho que o seu erro é que você deve definir o armazenamento como IDE Controller em vez de SATA Controller .

O comando deve ser semelhante a:

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

Em caso de problema, tente isto:

   $ 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
    
por 13.05.2018 / 20:55