rootfs Linuxファイルから起動可能なisoファイルを作成する

rootfs Linuxファイルから起動可能なisoファイルを作成する

一般的なLinuxディストリビューションから起動可能なisoファイルを作成したいと思います。 grubブートローダを作成しようとしています。まず、 grub.cfg を使用してテンプレートを作成し、最初にgrub-mkconfig次の設定を追加します。

set default=0
set timeout=5

menuentry "LinuxTest" {
    set root=(hd0)
    linux /boot/bzImage root=/dev/sda1
}

それから私はgrub-mkrescue -o /path/to/file.iso /path/to/linux/files

しかし、実行しようとすると、「エラー:不明なファイルシステム」と表示されます。

これを行うために私は何を間違っていたかしませんでしたか?

Linuxファイル

grub-cliのls

答え1

2番目の画像のテキストをコピーします。

grub> ls
(proc) (hd0) (cd) (cd,apple4) (cd,apple3) (cd,apple2) (cd,apple1) (cd,gpt4) (cd,gpt3) (cd,gpt2) (cd,gpt1)
grub> _

BIOS以外のUEFI:システムは常に現在のブートメディアを(hd0)GRUBとして予約しているわけではありません。この場合、ブートメディアがとして認識されているように見えることがあります(cd)

非常に単純なGRUB構成フラグメントは、単一のパーティション化されていないデバイスとして読み取ろうとします(hd0)が、パーティション化されていない空のディスクのように見えるか、GRUBのGPTパーティション検出モジュールが認識しないパーティションのように見えます。

GRUB 構成フラグメントはそれ自体一貫性もありません。 Linuxカーネルがこれを処理すると仮定すると(hd0)/dev/sdaとにかく保証されません!)、これはパスを含むファイルシステムがset root=(hd0)あることを示します。/dev/sda/boot/bzImage

一方、Linuxカーネルブートパラメータはパーティション化をroot=/dev/sda1推奨し、/dev/sdaルートファイルシステムは最初のパーティションにあります。

パーティション化されておらず、/dev/sdaディスク/イメージ全体を含む単一のファイルシステムのみを含めたり、パーティション化したりして/dev/sda1最初のパーティションにすることはできません。

grub-mkrescue教育的な経験のために、結果のISOイメージをループデバイスに接続し、次の場所で検出されたパーティションの内容を調べることをお勧めします。

ls /dev/loop*
sudo losetup -P --show -f /path/to/file.iso
ls /dev/loop*          # you might see more than one new device!
file -s /dev/loop*     # to identify the filesystem types within

このコマンドはスタイルループデバイス名をlosetup出力しますが、実際に含まれるパーティションのループデバイスも作成します。 X位置の数字を記録し、次のいずれかのコマンドで/dev/loopX置き換えます。X

試してみてくださいfdisk -l /dev/loopX:単一のISOファイルに見えるものには、実際には次の有効なGPTパーティションテーブルが含まれています(パーティションサイズは異なる場合があります)。

# fdisk -l /dev/loop0
Disk /dev/loop0: 13,22 MiB, 13867008 bytes, 27084 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 7FB1CA87-86D8-4C32-A49D-F5CEB184C045

Device       Start   End Sectors  Size Type
/dev/loop0p1    64   251     188   94K Microsoft basic data
/dev/loop0p2   252  6011    5760  2,8M EFI System
/dev/loop0p3  6012 26435   20424   10M Apple HFS/HFS+
/dev/loop0p4 26436 27035     600  300K Microsoft basic data

これは、単に古いISO-9660イメージではないからです。ハイブリッドISO-9660/ハードディスクイメージ。これはLinux関連のISOイメージで非常に一般的なトリックです。

このコマンドを使用してfdisk /dev/loopXパーティションに関する追加情報を取得すると、「Microsoft基本データ」パーティションの名前がそれぞれ「Microsoft基本データ」と「Microsoft基本データ」と表示され、非表示のために存在することを示します。 ISO-9660ファイルシステムメタデータなどは、「ハードディスクイメージ」ビューの「非表示」から削除する必要があります。ifdiskGap0Gap1

EFIシステムパーティションにはFATファイルシステムファミリが含まれていますefi/boot/bootx64.efi

Apple HFS +パーティションには、GRUBモジュールの完全なセットを含むディレクトリ階層と、EFIシステムパーティションのファイルと同じファイルを含むディレクトリなど、いくつかの追加ファイルを含むコピーが/path/to/linux/files含まれています。boot/grub/System/Library/CoreServices/boot.efiSystemVersion.plistbootx64.efi

bootx64.efi/はboot.efi、基本的にMBR、GPT、および従来のmacOSパーティションをサポートする64ビットUEFIアーキテクチャ用のGRUBです。 (デフォルトでboot/grub/x86_64-efi/part_*.mod可能であれば、すべてのGRUBモジュールファイルをアルファベット順にロードするように設定されています。)

ISO-9660ファイルシステムタグがに設定されていることがisoinfo -i /path/to/file.isoわかるため、少なくともGRUB構成フラグメントを次のように設定する必要があります。grub-mkrescueISOIMAGE

set default=0
set timeout=5

menuentry "LinuxTest" {
    search --label --set root "ISOIMAGE"
    linux /bzImage root=/dev/sda
}

これにより、GRUBはラベルでファイルシステムを検索し、それ以降のすべてのファイルパス参照の新しいルートにする必要があります。

最初の写真では、ファイルがディレクトリではなくISO-9660ファイルシステムのルートにbzImageあることがわかるため、パス名も変更する必要があります。/boot

最後に、カーネルのルートファイルシステムパラメータは難しいかもしれません。 initramfsを使用しないため、ルートファイルシステムを指定する方法にはいくつかの制限があります。ファイルシステムラベルではなく、/dev/*名前、PARTUUID=構文、またはPARTLABEL=構文のみを使用できます。

ルートファイルシステムの内容はディスク装置全体からISO-9660ファイルシステムにアクセスできますが、PARTUUID=残念ながらPARTLABEL=

これにアクセスする別の方法は、3番目のパーティションでHFS +ファイルシステムを使用することです(コマンドが示すPARTLABEL=HFSPLUSように)。しかし、カーネルイメージにApple HFS +ファイルシステムサポートを含める先見の明があるかどうか疑問です。ifdisk /dev/loopX

GRUBlsコマンドはCD /イメージに加えてシステムにHDDもあるため、システムに含まれるストレージドライバbzImageとシステムがドライバを検索する順序に応じて動作する場合と動作しない可能root=/dev/sda性がありますroot=/dev/sdb

これは、ブータブルメディアのワンタイム、クラックで十分ですが、複数のシステムで動作する必要がある場合は、より強力なソリューションが必要です。この場合は、grub-mkrescue意図しない目的で使用しないでください。まず、USBスティック/ハードドライブの起動とCD-ROM / DVDの起動(必要な場合)用に別々の画像を設定することをお勧めします。ハードドライブからのブートとCD / DVDメディアからのブートの違いに慣れている場合は、両方を実行するイメージに混在させるのが簡単になります。

関連情報