PXEブートカーネルを作成しようとしていますクローンデプロイ. すぐには動作しないが、Ubuntu インストールでは問題なく動作するドライバーが必要な NIC があるので、Ubuntu を起動するカーネルと initrd を使用して PXE ブートするだけだと考えました (Linux にあまり詳しくないので、これよりよい方法は思いつきません。独自のカーネルを構築しようとしても、動作する NIC を作成できませんでした)。
最新の 18.04.2 インストールを実行しています。そのため、次のファイルを PXE システムの適切な場所にコピーし
vmlinuz-4.18.0-20-generic
、initrd.img-4.18.0-20-generic
そこから起動しようとしました。
これは (ipxe) ブート コマンド ラインです (読みやすくするためにイメージの場所を短縮しています)。
kernel http://.../IpxeBoot?filename=vmlinuz-4.18.0-20-generic&type=kernel initrd=initrd.img-4.18.0-20-generic root=/dev/ram0 rw ramdisk_size=1560000 web=http://.../ USER_TOKEN= task=debug consoleblank=0
imgfetch --name initrd.img-4.18.0-20-generic http://.../IpxeBoot?filename=initrd.img-4.18.0-20-generic&type=bootimage
boot
起動時に、一連の関連デバイス (NIC を含む) が初期化されますが、その後、次のエラーが発生します。
gave up waiting for root file system device
ALERT! /dev/ram0 does not exist. Dropping to a shell!
見つけたこの質問、これは、起動中にどこかで brd モジュールをロードし、initrd を実際に使用可能な RAM ディスクに変換するための追加手順を実行する必要があることを示しています。 が提案されましたがadd "brd rd_size=16777216" to /etc/initramfs/modules
、initrd.img-4.18.0-20-generic ファイルを解凍すると ( を使用)、/etc/initramfs がありません。 (また、ram0 から ram15 ではなく、ram0 のみを作成するために をunmkinitramfs
使用する必要があることにも注意してください)。rd_nr=1 rd_size=1048576
ブート エラーを回避するにはどうすればよいでしょうか。また、brd のロードが必要な場合、このカーネル バージョンではどのように実行すればよいでしょうか。
答え1
初期 RAM ディスク (この場合は) は、システムへのカーネルのインストール中にツールinitrd.img-4.18.0-20-generic
によって自動的に生成されます。update-initramfs
update-initramfs
システムをチェックアウトし、initrd
起動時にロードするために必要なモジュールを追加します。
スクリプトを配置できる場所は 2 つありますinitial ramdisk
。
/usr/share/initramfs-tools
そして
/etc/initramfs-tools
あなたの場合は、その行を挿入し/etc/initramfs-tools/modules
て実行する必要があります
update-initramfs -u
現在のカーネル用。
次に結果を確認します。
mkdir myinitramfs
cd myinitramfs
zcat /boot/initrd.img-4.18.0-20-generic | cpio --extract
cat conf/modules
モジュールがリストに含まれているか確認する