web-dev-qa-db-ja.com

qemu-kvmを使用してliveusbから起動するにはどうすればよいですか?

Qemu-kvmをライブUSBスティックから起動しようとしています。これは可能ですか?

29
mikewilliamson

qemu-kvm -hdb <device>、 どこ <device>はUSBスティックです(例:/dev/sdb)、それを行う必要があります(USBスティック上のUbuntu 12.04でテストされ、動作します)。

デバイスへの書き込み権限が必要です(つまり、rootになるか、その権限を変更します)。

25
Renan

qemu-kvmが消えました。代わりに linuxルートへのパスを指定してqemuを開始 のヒントを使用してください。これの意味は

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

/ dev/sdbは、起動するUSB​​スティックのrawデバイス(パーティションではない)です。

(ただし、2014年12月の時点では、不安定な状態です。ubuntu-gnome14.10を起動すると、最終的に、スティック上でカーネルパニックが発生し、金属上で正常に起動することが確認されています。)

/ iaw

26
ivo Welch

なぜなのか正確にはわかりませんが、レナンの答えは私にはうまくいきませんでした。 KVM起動可能なドライブが見つからなかったと言われました(USBパーティションがそのようにマークされているにもかかわらず)。

しかし、私は別の解決策を見つけました。 lsusbを使用してUSBデバイスVendorID:ProductIDを取得します。例:

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

それをKVMに渡し、ブートメニューを要求します。

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

F12キーを押してメニューを表示し、USBデバイスを選択すると機能します。おそらく、ブートメニューを呼び出さずにUSBブートをコマンドする方法はありますが、man kvmには何も見つかりませんでした。

8
dgmorales

物理的なUSBスティックの代わりにimageのliveusbを使用したい場合は、

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

「-boot menu = on」を指定しない場合、kvmは常に「-drive」または「-hd [a | b | c | d]」で設定したハードドライブを優先します。

1
kaapstorm

私は最初に、たとえば、 virt-manager、次にvirsh設定ファイルを編集してUSBから起動します:

  1. Vmの構成ファイルを編集します。

    # virsh edit TAILS
    
  2. <boot>要素から<os>要素を削除します。 (残りの<os>要素はそのままにします。)ここでは<boot>を使用できません。これは、ブート順序が手順4で指定されるためです。

  3. ライブシステムを含むUSBデバイスのベンダーと製品IDを取得します。

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

    これにより、次のような出力が生成されます。

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

ベンダーIDは、最初の行の「ID」の後の最初の4桁の16進数です。この例では090cです。製品IDは、コロンの後の最後の4桁の16進数です(ここでは1000)。

  1. Virshエディターで、USBデバイスの<hostdev>要素を<devices>要素(すでに存在しているはずです)内に追加します。この要素の詳細な手順/例は https://libvirt.org/formatdomain.html#elementsHostDev にあります。 lsusbは値を16進数で与えるため、何らかの理由で値を変換する必要がない限り、0x接頭辞を使用します。
<devices>
  <hostdev mode='subsystem' type='usb'>
    <source startupPolicy='mandatory'>
      <vendor id='0x090c'/>
      <product id='0x1000'/>
    </source>
    <boot order='1'/>
  </hostdev>
</devices>
  1. Virshエディターを保存して終了し、通常の方法でVMを起動します(virt-managerを使用していますが、コマンドラインブートでは同じ設定ファイルを使用しています)。
0
r1bb1t