Come collegare un dispositivo cdrom a un dominio kvm / qemu (usando gli strumenti da riga di comando)?


22

Ho installato una macchina virtuale con Windows XP sul mio laptop Ubuntu. Utilizzando l' virt-managerapplicazione GUI, posso inserire un CD nel mio disco e andare su Dettagli → IDE CDROM 1 e fare clic sul Connectpulsante. Quindi il CD diventa disponibile nella mia macchina virtuale.

Come posso fare lo stesso attraverso la riga di comando? Ovviamente, vorrei essere in grado di disconnettermi anche dalla riga di comando.

Nota: posso avviare la VM dalla riga di comando utilizzando virsh start testbed(testbed è il nome del dominio / VM).

Risposte:


23

Se al momento della creazione della macchina virtuale non è stato definito alcun CDROM, è possibile collegare il dispositivo anche a un dominio in esecuzione (macchina virtuale) eseguendo il comando seguente:

virsh attach-disk testbed /dev/sr0 hdc --type cdrom

Se hai già definito un CD-ROM, ma indicava un'immagine ISO, nella mia esperienza, puoi comunque eseguire lo stesso comando. La hdcparte deve corrispondere al dispositivo a blocchi presente nella testbedmacchina virtuale.

Quando si desidera puntare nuovamente a un'immagine ISO, si sostituisce /dev/sr0al nome file sull'host, qualcosa del genere

virsh attach-disk testbed ~/virtio-win-0.1-22.iso hdc --type cdrom

La documentazione suggerisce l'utilizzo virsh update-device, ma è più laborioso creare una definizione XML simile a:

<disk type='block' device='cdrom'>
  <driver name='qemu' type='raw'/>
  <source dev='/dev/sr0'/>
  <target dev='hdc' bus='ide'/>
  <readonly/>
</disk>

Se sei in questo modo, salva qualcosa del genere in un file (diciamo ~/cdrom-real.xml) e poi lancia:

virsh update-device testbed ~/cdrom-real.xml

Sembra che sia quello che voglio; Verificherò al più presto (non posso al momento). Grazie comunque.
ΤΖΩΤΖΙΟΥ

Sì, eccolo. Sai anche come staccare il dispositivo? Ci ho provato virsh detach-disk testbed hdc, ma ci sono riuscito error: unsupported configuration: This type of device cannot be hot unplugged.
ΤΖΩΤΖΙΟΥ

I dispositivi IDE non sono effettivamente hotpluggable. detach-disknon funziona per una macchina virtuale arrestata. Per rimuovere del tutto il CD, è necessario utilizzare virsh edit testbedmentre la macchina è ferma ed eliminare l' diskelemento che definisce il cdrom. Se non si è viesperti dell'editor, eseguire export EDITOR=nanoprima di eseguire il comando di modifica.
parrucca

A proposito, se ritieni che la mia risposta ti abbia aiutato, per favore accettala come risposta.
parrucca

Accetterò la tua risposta. Il fatto è che se il dispositivo è collegato alla macchina virtuale testbed e avvio testbed senza l'inserimento di un disco, testbed non viene visualizzato e devo aprire la GUI di Virtual Manager e disconnettere prima il dispositivo. Ecco perché nella mia domanda ho affermato che volevo un modo per disconnettere anche il dispositivo.
ΤΖΩΤΖΙΟΥ

4

Utilizzare il comando qemu-monitor-virsh per passare l'espulsione e modificare i comandi fino a qemu.

Per prima cosa usa "blocco informazioni" per ottenere il nome del dispositivo qemu per il tuo cdrom.

virsh # qemu-monitor-command mirage --hmp --cmd "info block"
drive-virtio-disk0: type=hd removable=0 file=/home/daoist/mirage/mirage.qcow2 ro=0 drv=raw encrypted=0
drive-ide0-0-0: type=cdrom removable=1 locked=0 file=/home/daoist/iso/en_windows_7_ultimate_with_sp1_x64_dvd_u_677332.iso ro=1 drv=raw encrypted=0

Quindi nel mio caso sono interessato a drive-ide0-0-0 . Quindi, per cambiare il disco, procedere come segue:

virsh # qemu-monitor-command mirage --hmp --cmd "eject drive-ide0-0-0"
virsh # qemu-monitor-command mirage --hmp --cmd "change drive-ide0-0-0 /path/to/new.iso"
virsh #

Il comando "blocco info" genera un errore per me: "errore: errore interno impossibile analizzare blocco informazioni json: errore lessicale: carattere non valido nel testo json".
cg.

Sembra che la sintassi debba essere cambiata da sotto di me. Giuro che ha funzionato quando l'ho scritto. Ho provato la sintassi suggerita dalla risposta di Joe Huss e ora funziona. Ho aggiornato la mia risposta.
Keith Twombley,

1

Per quanto riguarda il comando "blocco info" sopra, il modo corretto di chiamarlo è il seguente:

 virsh qemu-monitor-command <domain> --hmp --cmd "info block"

vale a dire

 virsh qemu-monitor-command windows44407 --hmp --cmd "info block"

0

Stavo passando attraverso un lettore BluRay che non funzionava correttamente a meno che non lo attraversassi in un altro modo. Ecco come l'ho fatto sulla base di questo articolo.

https://lime-technology.com/forums/topic/33851-blu-ray-dvd-rom-passthrough/

Trova SCSI #:

lsscsi

[root@kvmatrix ~]# lsscsi
[#:0:0:0]    cd/dvd  HL-DT-ST BD-RE  WH14NS40  1.03  /dev/sr0

Modifica dominio XML e aggiungi questo:

Nota: sostituire scsi_host # con il # trovato in lssci

<controller type='scsi' index='0' model='virtio-scsi'/>
    <hostdev mode='subsystem' type='scsi'>
      <source>
        <adapter name='scsi_host#'/>
        <address type='scsi' bus='0' target='0' unit='0'/>
      </source>
      <readonly/>
      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
    </hostdev>

Ho dovuto forzare l'accettazione dell'XML come virsh edit ha dato errori, basta premere i e quindi riavviare vm per testare.


-6

mount -t iso9660 / dev / sr0 / media

Puoi usare qualunque dispositivo sia impostato per il tuo cdrom nella directory / dev. Inoltre / dev / cdrom è un collegamento al dispositivo corretto sulla maggior parte dei sistemi Linux. -T è per il tipo di dispositivo che si sta montando e iso9660 è il tipo universale per i supporti cdrom.

Il mount point può essere quello che vuoi ovviamente, assicurati solo che esista.


Um. Ecco come posso montare un CD nell'host. Ok, errore mio. "Come collegare un dispositivo cdrom a un dominio kvm / qemu / VM?" Si noti che questa risposta non è assolutamente utile, quindi è necessario modificarlo o eliminarlo.
ΤΖΩΤΖΙΟΥ
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.