pxelinuxでブートディスクを選択する方法

pxelinuxでブートディスクを選択する方法

pxelinux でコンピューターを構成し、DHCP/TFTP から起動できるようになりました。ブートローダーを受信して​​、ローカル HDD または SSD から起動できます。ただし、ブートローダーでどのデバイスから起動するかを選択する必要があります。たとえば、2 つのデバイスがあるコンピューターで、どのデバイスから起動するかを選択する必要があります。pxelinux の構成をいじってドキュメントを読みましたが、ネット ブート プロセスについてしか触れられていないようです。これが私のサンプル構成ファイルです (デフォルト)

default ssd
prompt 1
ONTIMEOUT local
timeout 3000

MENU TITLE PXE Menu

LABEL hdd
    MENU LABEL Boot local hard drive
    root= (hd0,2)
    kernel /boot/vmlinuz-3.11.6-4-desktop
    initrd=(hd0,2)/boot/initrd-3.11.6-4-desktop

LABEL ssd
    MENU LABEL Boot local hard drive
    LOCALBOOT -1

pxelinux 6.0.3 が搭載されており、ほぼすべての組み合わせを試しましたが、やなどをinitrd言っても、常にカーネルまたはファイルが見つからないという答えしか返ってきません。/dev/sda2(hd0,2)

何か見落としているのでしょうか、それともこのタスクはpxelinuxでは不可能なのでしょうか?


どのオプションでも、応答は常に「そのようなファイルまたはディレクトリはありません」ですが、オプション「2」は正常に起動します (コンソールからログを取得できませんでした)。クライアントからサーバーへの tftp は問題なく動作しています。

default menu.c32
prompt 0
ONTIMEOUT local
timeout 3000

MENU TITLE PXE Menu

LABEL one
        MENU LABEL Boot local hard drive
    root= hd0 2
    kernel /boot/vmlinuz-3.11.6-4-desktop

LABEL two
        MENU LABEL Boot local hard drive
        LOCALBOOT 0

LABEL three
        MENU LABEL Boot local hard drive
    root=/dev/sda2
    kernel vmlinuz-3.11.6-4-desktop
    initrd=/boot/initrd-3.11.6-4-desktop.gz

LABEL four
        MENU LABEL VIER
    root=/dev/sda2 rw
        KERNEL ftp://179.99.99.1/chain.c32

LABEL five
    MENU LABEL Hole chain.c32 uebers Netz
    root hd0 2
    KERNEL chain.c32

LABEL six
        MENU LABEL VIER
    root=(hd0,2) rw
        KERNEL /boot/chain.c32

LABEL seven
    MENU LABEL Hole chain.c32 uebers Netz
    root hd0 2
    KERNEL /boot/chain.c32
    initrd=/boot/initrd-3.11.6-4-desktop.gz 

xinetd デーモンのステータスは、クライアント tftp がサーバーからファイルを要求していることを示しています。クライアントがサーバーからファイルを取得しているように見えます。しかし、なぜ処理されないのでしょうか...

xinetd.service - Xinetd A Powerful Replacement For Inetd
   Loaded: loaded (/usr/lib/systemd/system/xinetd.service; enabled)
   Active: active (running) since Wed 2016-06-29 16:08:46 CEST; 21min ago
 Main PID: 1536 (xinetd)
   CGroup: /system.slice/xinetd.service
           |-1536 /usr/sbin/xinetd -stayalive -dontfork
           `-2938 in.tftpd -s /rde/installation/tftpboot -vvv

Jun 29 16:21:47 uaewg-srv in.tftpd[4161]: RRQ from ::ffff:199.99.99.10 filename menu.c32
Jun 29 16:22:32 uaewg-srv in.tftpd[4279]: RRQ from ::ffff:199.99.99.10 filename chain.c32
Jun 29 16:22:32 uaewg-srv in.tftpd[4280]: RRQ from ::ffff:199.99.99.10 filename chain.c32
Jun 29 16:22:36 uaewg-srv in.tftpd[4288]: RRQ from ::ffff:199.99.99.10 filename chain.c32
Jun 29 16:24:17 uaewg-srv in.tftpd[4544]: RRQ from ::ffff:199.99.99.10 filename pxelinux.0
Jun 29 16:24:17 uaewg-srv in.tftpd[4545]: RRQ from ::ffff:199.99.99.10 filename ldlinux.c32
Jun 29 16:24:17 uaewg-srv in.tftpd[4556]: RRQ from ::ffff:199.99.99.10 filename pxelinux.cfg/default
Jun 29 16:24:17 uaewg-srv in.tftpd[4558]: RRQ from ::ffff:199.99.99.10 filename menu.c32
Jun 29 16:24:34 uaewg-srv in.tftpd[4580]: RRQ from ::ffff:199.99.99.10 filename chain.c32
Jun 29 16:24:38 uaewg-srv in.tftpd[4588]: RRQ from ::ffff:199.99.99.10 filename chain.c32

答え1

pxelinux を自分のニーズに合わせて構成する方法を見つけました。tftp はすでに実行されていて機能していましたが、「tail -f /var/log/messages」を実行して、chain.c32 が機能していないことを発見しました (ロードはしていましたが、何も起こりませんでした)。

2016-06-29T16:15 uaewg-srv xinetd[1536]: START: tftp from=::ffff:172.99.199.9
2016-06-29T16:15 uaewg-srv in.tftpd[2939]: RRQ from ::ffff:172.99.199.9 filename chain.c32
2016-06-29T16:18 uaewg-srv sshd[3183]: Accepted keyboard-interactive/pam for uae_wg_sim from 127.0.0.1 port 54948 ssh2

それから他のファイルでも試すことができました。vmlinuzとinitrdファイルを../tftpboot/pxelinux.cfg/デフォルト設定ファイル:

prompt 0
ONTIMEOUT local
timeout 3000

MENU TITLE PXE Menu

LABEL local
        MENU LABEL Boot local hard drive
        LOCALBOOT 0

LABEL hdd
      kernel vmlinuz-3.11.6-4-desktop
      APPEND initrd=initrd-3.11.10-21-desktop  root=/dev/sda2

chain.c32、menu.c32 はどちらもシステム上で動作しませんでした。理由はわかりません。時間が残っていたら調べてみるかもしれません。今は動作しているので嬉しいです。 /var/log/メッセージエラー診断に非常に役立ちます。tftpdの責任者が誰なのかは不明でしたが、systemdではなくxinetdによって起動された可能性が高いことがわかりました。tftp は、に :

service tftp
{
#   per_source      = 11
    cps         = 100 2
    socket_type     = dgram
    protocol        = udp
    wait            = yes
    user            = root
    server          = /usr/sbin/in.tftpd
    server_args     = -s /rde/installation/tftpboot -vvv
    flags           = IPv6 IPv4
}

助けてくれたcasに敬意と感謝を!

答え2

チェーンローダー(チェーン.c32) からsyslinux他のsyslinuxモジュールと同様に、BIOS、efi32、efi64 には異なるバージョンがあります。

LABEL local
    MENU DEFAULT
    MENU LABEL Boot from Local Hard Disk
    KERNEL /path/to/chain.c32
    APPEND hd0 2

これは私の/srv/tftp/defaultファイルから少し変更したものです - 私のバージョンには(私の httpdは からKERNEL http://ip.ip.ip.ip/tftp/chain.c32サービスを提供するように設定されています- tftp でも同様に動作します) と があります。/tftp//srv/tftpAPPEND hd0 0

関連情報