Libvirt / qemu-kvmで不要なiPXEブート試行を無効にするにはどうすればよいですか?


12

どういうわけか、12.04にアップグレードした後、仮想マシンは常に最初にネットワークからの起動を試みて起動します。こちらをご覧ください:

virt-managerスクリーンショット

PXE構成が設定されていない場合:

PXEブート構成

私はもう試した:

  • XMLを編集emulatorして/usr/bin/kvmfromを変更し、SPICEを無効に/usr/bin/kvm-spiceします。
  • Ctrl+ Bを使用してiPXEを設定しますが、これをブートオプションとして無効にすることはできません。
  • 別の種類のNICを設定する-オプションではなくvirtio、パフォーマンス上の理由で必要です。ただし、e1000e機能しません。
  • NICの削除:動作します。ただし、ネットワークが必要です。
  • ぐるぐる回る。ハード。多くの結果は、構成されたPXEブートの失敗に関するものです。

大きな問題ではありませんが、ここではブート時間を50〜100%増やします(SSDからのブート)ので、比較的長く、イライラさせられます。

これを無効にして仮想ハードディスクから直接起動するにはどうすればよいですか?

回答:


6

短い答え

libvirt 0.9.10+(Quantalで利用可能)にアップグレードし<rom bar='off'/>、マシンのXML定義のインターフェース構成にオプションを追加します。

長い答え

iPXEブートオプションを実際に使用しているので、SeaBIOS画面で発生する遅延は実際のブート試行ではないことがわかります。VirtioネットワークオプションROMを読み込んでいるだけで、数秒の時間を要します。つまり、まだiPXEブートを試行していません。これにより、libvirtのドキュメントを再度読むことになり、興味深い発見をしました。

私の知る限り、libvirt 0.9.7以降、動作はデフォルトでインターフェースのオプションROMをロードするように変更されました。Ubuntu 11.10には0.9.2が付属し、Ubuntu 12.04には0.9.8が付属しています。これは、12.04へのアップグレード以降、なぜこのようなことが起こるのか、間違いなく理にかなっています。

さらに、これはlibvirtバージョン0.9.10で<rom bar='off'/>XMLのオプションで設定可能になりました!(こちらをご覧ください)ただし、そのバージョンのlibvirtはUbuntu 12.04では使用できないため、12.10にアップグレードするか、バックポートする必要があります。これにより、Ubuntu 12.04は2つのスツールの間になります。

他の回避策は、@ AHが指摘したオプションROMファイルを削除し、@ NlightNFotisが指摘したSeaBIOS 'filesystem'を変更することです。ただし、どちらの方法でも基本的にiPXEは完全に無効になり、構成できません(virtioネットワークデバイスのみに固定する場合)。iPXEマシンと非PXEマシンのセットアップが混在しているため、これを設定する必要があります。


マシンのXML定義はどこにありますか?
ブライスギンタ

1
@BryceGuinta最初にVMを作成してから、コマンドを使用してそのXML定義(詳細)を編集しますvirsh edit <domain>
gertvdijk

5

同じ問題についての私の実験は、いくつかのヒントを与えてくれました。

このパッケージkvm-ipxeは、いくつかのPXEオプションROMを/usr/share/qemu/以下にインストールします。

pxe-e1000.rom
pxe-ne2k_isa.rom
pxe-pcnet32.rom
pxe-rtl8139.rom
pxe-virtio.rom

これらのNICの1つで起動すると、どういうわけかこれらは自動的に検出され、seabiosによって使用されます。chmod a= pxe*.romこれらのファイルを実行して仮想マシンを起動すると、「エラー」メッセージが表示されます

kvm: pci_add_option_rom: failed to find romfile "pxe-rtl8139.rom"

ただし、PXEなしで正常に起動します。


ありがとう。これにより、回避策が少し得られます。virtio一般的なネットワークデバイスやe1000ePXEを必要とするVMに使用します。しかし、まだバグだと思います。どういうわけかLibvirtは適切なブートパラメーターをSeaBIOSに正常に渡しません。
-gertvdijk

何をchmod a=するの?
ブライスギンタ

5

コマンドラインでqemu-kvmに次のオプションを渡すことで、Ubuntu 12.04でこれを回避できました(romfileを空白に設定するのがコツです)。

-netdev user,id=hostnet0 -device virtio-net-pci,romfile=,netdev=hostnet0

クールですが、Libvirt XMLマシン定義でこれを指定できますか?
gertvdijk

コマンドラインからアドホックに繰り返し再起動する場合、これが方法です。それは少しノイズを追加しますが、XMLファイルを編集したり、ネットワークのすべてを削除したりすることなく、iPXEを瞬時に殺します。
i336_

0

あなたの写真から、VM BIOSに関係している可能性が高いことがわかります。VM SeaBIOSの設定は、設定を上書きしてはいけません。これは、VMをPXE最初から起動させる必要があるためです。

最初の可能な解決策として、仮想マシンのBIOSを入力してそこにあるオプションを編集できるかどうかを確認してください。

注:私の研究がより多くの可能な解決策または原因を明らかにしている間、答えを更新し続けます。

[編集#1]: SeaBIOS 起動順序を設定する方法についての情報はこちらにありますこれで問題が解決するはずです。


VMのBIOSを入力するにはどうすればよいですか?SeaBIOSに関するウィキペディアでは、起動時にF12を試す必要があると言われていますが、それはiPXEの試行を1回スキップするだけです。
gertvdijk

@gertvdijk現在調査中です。すぐに連絡します。
NlightNFotis

@gertvdijkこれは何らかの形で関連しているようです:seabios.org/pipermail/seabios/2012-March/003526.html
NlightNFotis

ありがとう、今日新しいことを学んだ。ただし、これはシステム全体に適用され、新しいCBFS(コアブートファイルシステム)の構築について適用されるようです。私が見る限り、PXEブートも完全に無効にします。私はこのアプローチが気に入らないので、virt-manager GUIで可能なように、iPXEブート試行ランタイムを防ぐことができると思います。
gertvdijk

@gertvdijkそれがそれを無効にすることをどのように知っていますか?私が見ることができるのは、起動順序を設定することですつまり、何かが他の何かよりも先に起動されるということです
NlightNFotis

-1

「-net none」を使用してこれを防ぐことができました。

# qemu-system-i386 -net none

しかし、その後、あなたはまったくネットワークを持っていません!これは本当に答えではないと思います。
gertvdijk

申し訳ありませんが、OPがまだネットワーキングを必要としていたという事実を見逃しました。私の場合、ネットワークなしで実行することは受け入れられました。
カタリンP
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.