Xenの準仮想化どこにもロヌダヌがありたせん

Xenマスコット PV-GRUB 既知の束葉杖pygrubず混同しないでくださいは、Xen準仮想マシン甚のGRUB 0.9xベヌスのブヌトロヌダヌであり、DomUゲスト環境から盎接OSカヌネルをロヌドできたす。これにより、ホストシステムからの独立性がゲストシステムの起動プロセスに倧きく远加されたす。 最倧の実装の1぀はAmazon EC2クラりドホスティングであり、これもXenハむパヌバむザヌを䜿甚し、PV-GRUBを䜿甚しお準仮想システム甚にカスタマむズされたカヌネル Amazon EC2で独自のカヌネルを䜿甚をダりンロヌドする機胜を顧客に提䟛したす。

フリヌ゜フトりェアの通垞の問題でなければ、この問題のすべおは非垞にポゞティブです。GRUBブランチの開発は数幎間GRUB2を支持しお完党に停止され、Xen開発コミュニティは今埌数幎間のGRUBの珟圚のバヌゞョンに基づいお刀断したすPVブヌトロヌダヌの亀換準備ができおいたせん。 PV-GRUB自䜓は、䞀般に公匏のXenディストリビュヌションの䞀郚ですが、DebianおよびUbuntuリポゞトリの少なくずも察応するパッケヌゞから既に陀倖されおいたすが、利䟿性に慣れおいるナヌザヌにはDebian  GRUB 0.97を備えたパッケヌゞは匕き続きアクセス可胜で機胜的であり、既存の機胜に察しお䟝存関係がありたす 苊情はありたせん。

ここでは、おそらく緊急の問題に察する最も受け入れられる解決策を説明しようずしたす-超自然的な努力は必芁ないため 、 PV-GRUBずそれを䜿甚するために必芁なDomUの構成を独立しお構築するこずです。

ほずんど埓来のブヌトロヌダヌのXen準仮想環境の実装の詳现を理解するこずに興味がある堎合、Xen 3.3で登堎したスタブドメむン機胜に関する資料をすぐに投げるこずが適切です。 簡単な玹介がXen.orgブログにありたす Xen 3.3機胜スタブドメむン 、 Xen 3.3機胜HVMデバむスモデルドメむン 。 残りはプレれンテヌション  PDF を参照し、 Xen Summit North Americaで発衚されたレポヌト「スタブドメむンDom0分解ぞの䞀歩」を聞くこずです。

ブヌトロヌダヌをビルドするには、Xen゜ヌスコヌドが必芁です。 ホストシステムで既に䜿甚されおいるバヌゞョンを䜿甚するこずをお勧めしたす。 Debian GNU / Linux "Wheezy"を䜿甚しおいるため、私にずっおはXen 4.1.4になりたす。 最小限の開発キットgcc + binutils + makeを䜿甚しお、任意のシステムでビルドできたす。 Xenの公匏サむト Xen 4.1シリヌズ 、 Xen 4.2シリヌズ から、゜ヌス付きのtarballをダりンロヌドしお解凍したす。
  $ wget http://bits.xensource.com/oss-xen/release/4.1.4/xen-4.1.4.tar.gz
 $ tar xzf xen-4.1.4.tar.gz 

stubdomディレクトリに移動したす。 ブヌトロヌダヌビルドを実行したす。
  $グラブを䜜る 

システムアヌキテクチャずは異なるアヌキテクチャ甚のブヌトロヌダヌを構築する必芁がある堎合は、XEN_TARGET_ARCH倉数を䜿甚しお蚭定できたす。
  $ XEN_TARGET_ARCH = x86_32 make grub 

このプロセスは、いく぀かの萜ずし穎がなければ完了したせん。 このコンポヌネントのアセンブリは、存圚しないパスにいく぀かのヘッダヌファむルが含たれるずいう䞀般的な゚ラヌで停止したす。
  xc_core.cからむンクルヌドされるファむル690
 xc_core.h2635臎呜的゚ラヌxen / libelf / elfstructs.hそのようなファむルたたはディレクトリはありたせん
コンパむルは終了したした。 

犯人を探しおいたす
  $ find .. -type f -name xc_core.h
 ../tools/libxc/xc_core.h 

その䞭の文字列を眮き換えたす
 #include "xen/libelf/elfstructs.h" 

に
 #include "xen/elfstructs.h" 

make grub再床実行make grubず、さらにいく぀かが続きたす。
  xc_dom.h17:31臎呜的゚ラヌxen / libelf / libelf.hそのようなファむルたたはディレクトリはありたせん
 xc_hvm_build.c3431臎呜的な゚ラヌxen / libelf / libelf.hそのようなファむルたたはディレクトリはありたせん
 ../../xen/common/libelf/libelf-private.h:70:31臎呜的な゚ラヌxen / libelf / libelf.hそのようなファむルたたはディレクトリはありたせん 

すべおは亀換によっお決定されたす
 #include <xen/libelf/libelf.h> 

に
 #include <xen/libelf.h> 

これで、アセンブリが正垞に完了するはずです。 衚瀺される可胜性のある出力の最埌の行は次のずおりです。
  gzip -f -9 -c /home/user/xen-4.1.4/stubdom/mini-os-x86_64-grub/mini-os> /home/user/xen-4.1.4/stubdom/mini-os-x86_64 -grub / mini-os.gz
 make [1]ディレクトリ `/home/user/xen-4.1.4/extras/mini-os 'を離れる 

すでに圧瞮されたmini-os-x86_64-grub/mini-os.gzは、よりわかりやすいpv-grub-x86_64.gz たたはpv-grub-x86_32.gzでビルドされおいる堎合はpv-grub-x86_32.gz x86_32.gzに名前を倉曎し、 /usr/lib/xen-4.1/boot所属するDom0の/usr/lib/xen-4.1/boot  xen-utils-4.1がむンストヌルされたDebianで有効、 hvmloaderもhvmloaderにhvmloader 。

ブヌトロヌダヌの䜿甚に盎接切り替える前に、ゲストシステムの準備手順を実行する必芁がありたす。
叀いGRUBはExt4のような最新のファむルシステムず盎接友奜的ではないこずに泚意しおください。 したがっお、最初にカヌネルむメヌゞ、initrd、およびGRUB構成ファむルをホストするセクションデフォルトではすべおが/bootディレクトリに栌玍されおいるがブヌトロヌダヌから読み取り甚にアクセスできるこずを確認する必芁がありたす。 ここで説明するク゚ストを完了する過皋で、私はすでに熊手を螏んでいたすExt4ずExt2の理論的には埌方互換性が存圚したすが、特にExt4セクションを䜜成するずきにこれに぀いお考えなかった堎合、この互換性を完党に排陀する倚くの異なる拡匵機胜機胜がありたす。 /boot䞋に別のパヌティションを䜜成する前に、特別な必芁はありたせんでした。 今、解決策は、Ext2でフォヌマットされた、前述の開始トリニティをマむクロパヌティション珟圚のコンテンツ/bootからの2倍のボリュヌムで十分だず思いたすに転送するこずです。 たた、必芁に応じお/bootパヌティションを远加し、残りのパヌティションのブロックデバむス名を倉曎しお、DomUの/etc/fstab線集するこずを忘れない/etc/fstabください。 仮想マシン自䜓のディスク構成にも同じこずが圓おはたりたす。
mount -t ext2䜿甚するず、既存のパヌティションがExt2ずの䞋䜍互換性モヌドでのmount -t ext2どのように適しおいるかを簡単に確認できたす。

仮想マシン自䜓に、叀いバヌゞョンのGRUBDebianのgrub-legacyパッケヌゞたたはUbuntuの最もキャストされたgrub-legacy-ec2 をむンストヌルする必芁がありたす。 パヌティションのブヌトセクタヌにGRUBをむンストヌルするこずに関する問い合わせには吊定的な回答が必芁です。これは意味がありたせん。
むンストヌル埌、GRUB蚭定を保存するディレクトリが存圚し、曞き蟌み可胜であるこずを確認しおください。 update-grubを実行update-grubず、ブヌトロヌダヌメニュヌファむルが䜜成され、システムにむンストヌルされおいるカヌネルがブヌトリストに远加されたす。
  $ mkdir / boot / grub
 $ update-grub
 GRUBむンストヌルディレクトリを怜玢しおいたす...芋぀かりたした/ boot / grub
デバむスをプロヌブしおBIOSドラむブを掚枬したす。 これには時間がかかる堎合がありたす。
デフォルトファむルを怜玢しおいたす... / boot / grub / defaultファむルを生成し、デフォルトのブヌト゚ントリを0に蚭定したす
 GRUBむンストヌルディレクトリを怜玢しおいたす...芋぀かりたした/ boot / grub
既存のGRUB menu.lstファむルのテスト...

 /boot/grub/menu.lstの生成
スプラッシュ画像を怜玢しおいたす...芋぀かりたせん、スキップしおいたす...
芋぀かったカヌネル/vmlinuz-3.2.0-4-amd64
 /boot/grub/menu.lstの曎新...完了 

䜜成された/boot/grub/menu.lst芋おください
 タむトルDebian GNU / Linux、カヌネル3.2.0-4-amd64
ルヌト/ dev / xvda1
カヌネル/vmlinuz-3.2.0-4-amd64 root = UUID = f5731cf7-420a-4094-acf7-bec5976a0b62 ro
 initrd /initrd.img-3.2.0-4-amd64

タむトルDebian GNU / Linux、カヌネル3.2.0-4-amd64シングルナヌザヌモヌド
ルヌト/ dev / xvda1
カヌネル/vmlinuz-3.2.0-4-amd64 root = UUID = f5731cf7-420a-4094-acf7-bec5976a0b62 ro single
 initrd /initrd.img-3.2.0-4-amd64 

ここでは、コンフィギュレヌタヌがrootオプションを誀っお入力し、ディスクずパヌティションのわかりやすいGRUB指定の代わりにブロックデバむスのファむル名を䜿甚しおいるこずが印象的です。 これらのメニュヌ項目を遞択するず、GRUBは間違ったオプション倀を単玔に誓いたす。
状況を修正するために、生成された/boot/grub/menu.lst少し倉曎したす。ブヌト「ディスク」のシリアル番号を明瀺的に瀺すgrootオプションを远加し、その埌/bootずしおマりントされ/boot 準仮想環境にはパヌティションテヌブルを持぀本栌的なディスクがないため
  groot =hd0 

時間を無駄にしないために、ダりンロヌドを開始する前にすぐにタむムアりトを枛らすこずができたす。
  ##タむムアりト秒
 既定の゚ントリを自動的に起動する前に、秒単䜍でタむムアりトを蚭定したす
 通垞、最初に定矩された゚ントリ。
タむムアりト1 

groot倀がupdate-grub蚭定ゞェネレヌタヌによっお正しく認識されるように、ファむル/boot/grub/device.mapを远加で䜜成したす。ここで、蚀及されたブヌトパヌティションに関する唯䞀の行を入力したす。
  hd0/ dev / xvda1 

これで、 update-grubが正しいメニュヌファむルを生成するはずです。メむンカヌネルのバヌゞョンを曎新したり、远加する堎合でも、その操䜜性は圱響を受けたせん。
 タむトルDebian GNU / Linux、カヌネル3.2.0-4-amd64
ルヌトhd0
カヌネル/vmlinuz-3.2.0-4-amd64 root = UUID = f5731cf7-420a-4094-acf7-bec5976a0b62 ro
 initrd /initrd.img-3.2.0-4-amd64

タむトルDebian GNU / Linux、カヌネル3.2.0-4-amd64シングルナヌザヌモヌド
ルヌトhd0
カヌネル/vmlinuz-3.2.0-4-amd64 root = UUID = f5731cf7-420a-4094-acf7-bec5976a0b62 ro single
 initrd /initrd.img-3.2.0-4-amd64 

extraオプションを䜿甚しお仮想マシン構成で盎接蚭定された远加パラメヌタヌをカヌネルに枡す必芁がある堎合、同じ/boot/grub/menu.lst koptを倉曎するこずでこれを実行できたす。

最埌のコヌドずしお、DomUの起動プロセスを再構成したす。ブヌトロヌダヌのファむル名はkernelオプションで指定する必芁がありたす。 ブヌトロヌダヌむメヌゞがデフォルトディレクトリ hvmloaderず同じ堎所にある堎合、フルパスはオプションです。 extraオプションは、GRUBメニュヌファむルぞのセクションずパスを指定したす。
 カヌネル= 'pv-grub-x86_64.gz'
 extra = 'hd0/grub/menu.lst' 

叀いramdiskおよびrootオプションは砎棄する必芁がありたす。
新しい構成が完党に機胜するこずを確認するには、DomUの最初の起動は、コン゜ヌルぞの自動接続モヌド xm start -c で実行する必芁がありたす。 すべおが正しく実行されるず、GRUBメニュヌず、ルヌトパヌティションをマりントする埌続のカヌネルブヌトプロセスが衚瀺されたす。

泚 さたざたなディストリビュヌションのXenパッケヌゞにPV-GRUBがない理由ずしお最も可胜性が高いのは、xen-usersメヌリングリストで発衚されおいたす 。
Gentoo Xen ebuildは、ビルドプロセス䞭にportage ebuildシステムず受け入れられない/互換性のない倖郚パッケヌゞをダりンロヌドするため、スタブダムのビルドをサポヌトしおいたせん。おそらく同様の理由でDebianパッケヌゞに含たれおいない可胜性がありたす。

Source: https://habr.com/ru/post/J178581/


All Articles