web-dev-qa-db-fra.com

Comment démarrer à partir d'un liveusb en utilisant qemu-kvm?

J'essaie d'obtenir qemu-kvm pour démarrer à partir de ma clé USB en direct. Est-ce possible?

29
mikewilliamson

qemu-kvm -hdb <device>, où <device> est la clé USB (par exemple /dev/sdb), devrait le faire (testé avec Ubuntu 12.04 sur une clé USB et ça marche).

Vous aurez besoin d'une autorisation d'écriture sur l'appareil (c'est-à-dire être root ou modifier ses autorisations).

25
Renan

qemu-kvm a disparu. utilisez l'indication dans démarrez qemu en lui donnant un chemin vers une racine linux à la place. ça signifie

qemu-system-x86_64 -usb -usbdevice disk:/dev/sdb

où/dev/sdb est votre périphérique brut (pas la partition) de la clé USB que vous souhaitez démarrer.

(Cependant, à partir de 12/2014, cela a été floconneux pour moi. démarrer ubuntu-gnome 14.10 entraîne finalement une panique du noyau sur un bâton vérifié pour démarrer très bien sur le métal.)

/ iaw

26
ivo Welch

Je ne sais pas exactement pourquoi, mais la réponse de Renan n'a pas vraiment fonctionné pour moi. KVM m'a dit qu'il ne pouvait pas trouver de lecteur de démarrage (malgré la partition USB marquée comme telle).

Cependant, j'ai trouvé une autre solution. Obtenez le périphérique USB VendorID: ProductID avec lsusb. Exemple:

$ lsusb
...
Bus 002 Device 007: ID 0781:5406 SanDisk Corp. Cruzer Micro U3

Passez cela à KVM et demandez le menu de démarrage:

Sudo  kvm -m 512 -smp 1 -drive file=/path/to/hardisk/file.img -usb \ 
-usbdevice Host:0781:5406 -boot menu=on

Appuyez sur F12 pour le menu, choisissez le périphérique USB, cela fonctionne. Il y a probablement un moyen de commander le démarrage USB sans avoir besoin d'appeler le menu de démarrage, mais je n'en ai trouvé aucun dans man kvm.

8
dgmorales

Si vous souhaitez utiliser un image d'un liveusb, au lieu d'une clé USB physique, vous pouvez le faire avec

$ kvm -usbdevice disk:/path/to/liveusb.img -boot menu=on ...

Sans "-boot menu = on", kvm préférera toujours le disque dur que vous définissez avec "-drive" ou "-hd [a | b | c | d]".

1
kaapstorm

J'ai fait cela en créant d'abord un invité en utilisant par exemple virt-manager, puis éditez le fichier de configuration virsh pour démarrer à partir de l'USB:

  1. Editez le fichier de configuration pour le vm:

    # virsh edit TAILS
    
  2. Supprimez le <boot> élément de <os> élément. (Laissez le reste du <os> élément intact.) Vous ne pouvez pas utiliser <boot> ici, car l'ordre de démarrage sera spécifié à l'étape 4.

  3. Obtenez l'ID du fournisseur et du produit pour le périphérique USB qui contient le système en direct:

    # lsusb -v | grep -E '\<(Bus|iProduct|bDeviceClass|bDeviceProtocol)' 2>/dev/null
    

    Cela produit une sortie comme:

Bus 002 Device 007: ID 090c:1000 Silicon Motion, Inc. - Taiwan (formerly Feiya Technology Corp.) Flash Drive
  bDeviceClass            0 
  bDeviceProtocol         0 
  iProduct                2 

L'ID du fournisseur correspond aux quatre premiers chiffres hexadécimaux après "ID" sur la première ligne, 090c dans cet exemple. L'identifiant du produit correspond aux quatre derniers chiffres hexadécimaux après les deux-points, ici 1000.

  1. Dans l'éditeur virsh, ajoutez un <hostdev> élément pour votre périphérique USB, à l'intérieur du <devices> élément (qui devrait déjà exister). Des instructions/exemples détaillés pour cet élément se trouvent à https://libvirt.org/formatdomain.html#elementsHostDev . lsusb donne les valeurs en hexadécimal, donc utilisez le 0x préfixe sauf si vous souhaitez convertir les valeurs pour une raison quelconque.
<devices>
  <hostdev mode='subsystem' type='usb'>
    <source startupPolicy='mandatory'>
      <vendor id='0x090c'/>
      <product id='0x1000'/>
    </source>
    <boot order='1'/>
  </hostdev>
</devices>
  1. Enregistrez et quittez l'éditeur virsh, et démarrez le VM de la manière habituelle. (J'utilise virt-manager, mais un démarrage en ligne de commande utilise le même fichier de configuration.)
0
r1bb1t