LiveCDではなく、カスタムブータブルLinuxイメージを作成します。

LiveCDではなく、カスタムブータブルLinuxイメージを作成します。

だからカーネルとinitrdをコンパイルしました。その後、イメージを作成してgrubをインストールして実際にディスクからイメージをロードするにはどうすればよいですか?私の目標は、USBから起動可能なlivecdを作成するためにそれを使用しないことです。これに関する記事がたくさんあるからです。私の目標は、イメージを作成してから(dd if=/dev/zero of=linux.img ...全体のイメージを生成するために必要なものがわかっている)単純にddを使用してそのイメージをディスクの最初のセクターに書き込んでからそこから起動することです。しかし、私のカーネルとinitrdはimgからどこに行きましたか?すぐ後ろ?ディスクにはパーティションがありません。これはカスタムカーネルで、最小限のbusybox設定を削除しました。したがって、/boot パーティションは必要なく、1 つ以上のファイルがないため、他のパーティションには「ファイル」は存在しません。

MBRが512バイトであることがわかっているので、grub最初のセクタで512バイトを上書きするとします。しかし、イメージにgrubをどのようにインストールしますか?動作することができますかgrub-install linux.img? / bootにあるので、通常の設定でカーネルとinitrdをロードする場所を知っていますが、grubこの「イメージ」には見ているパーティションはありません/boot。ただルートをそれ自体に設定しますか?

どんな助けでも大変感謝します。

initrd生成プロセス:https://pastebin.com/ti9LXakx

initrdの現在のinitスクリプト:

#!/bin/sh   
mount -t sysfs sysfs /sys 
mount -t proc proc /proc 
mount -t devtmpfs udev /dev 
exec /bin/sh

ベストアンサー1

512バイトはGRUBと比較して小さすぎます。クラシックBIOSブートMBRパーティションディスクでは、GRUBはまた、一般的に使用されていないブロック #1..#2047に自分の一部を配置します。最新のオペレーティングシステムでは正確に配置します。最初のパーティションの先頭は 1 です。ブロック#2048のディスクの先頭からMiBです。通常、GRUBコアイメージに構築するために選択した機能とGRUBモジュールにロードする機能に応じて、約100個のブロックを使用できます。一部ファイルシステム)。

また、MBRブロック(ブロック#0)から512バイトをすべて取得することもできません。 MBRブロックの末尾にある少なくとも2バイトは署名によって占められ、BIOSにディスクが起動可能であることを知らせます。

GRUBには、構成ファイル、カーネル、およびinitrdを検索するディスク/パーティション/論理ボリューム/暗号化ボリュームのデフォルトの期待があります。一種のファイルシステムが含まれます。。ディスクの連続ブロックを読み込んでカーネルとinitramfsを読み取ろうとすると、これは古代のLILOブートローダが行ったものと似ています。

簡単に言えば、パーティションテーブルを省略することはあなたが考える利点ではありません。カスタム構成では、できるGRUB がブロック #A.. #B をカーネルに、#(B+1).. #C を initramfs ファイルに読み込むようにします。しかし、これは何の理由もなくあなたの人生をより困難にするだけです。

Live CDについて言及したので、CD-ROM / DVDに書き込むとき、または仮想マシンで仮想CDとして使用するときに画像を操作するには、HDD画像とMBRの両方で動作するハイブリッド画像を作成する必要があります。ブートローダーとEl Toritoブート拡張を含む有効なISO9660 CD / DVDイメージ - これには、イメージの異なる場所に別々のブートローダーが必要です。

UEFI互換性が欲しいなら… 「学んだことを忘れなければならない」

UEFIではシステムファームウェアFATファイルシステム(FAT32が推奨されていますが、最新バージョンのUEFIでは他の形式のFATも許可されています)とそのファイルシステムで特定の名前のファイルであるブートローダが見つかると予想されます。ファイルシステムはすでにUEFI起動可能性のファームウェア要件を満たしているため、カーネル、initramfs、およびブートローダの設定を通常のファイルとして保存することもできます。

イメージを作成するには、losetupそれをデバイスにバインドして/dev/loop<device_number>から物理ディスクのように使用できます。イメージにパーティションテーブルが含まれている場合は、losetup -P自動的に作成されたパーティションデバイス形式を使用して、/dev/loop<device_number>p<partition_number>イメージファイル内のすべてのパーティションに簡単にアクセスできます。

おすすめ記事