mkdosfs
xorrisoを使用してUSBメディアに追加し、起動可能な状態に保つことができる事前に作成されたEFIイメージ(提供されたボリューム名なしで作成)を使用してISOを構築し、起動を制御しようとしています。これは一般的にうまく機能します。
xorriso \
-volid "FooInstall" \
-map /path/to/content \
-boot_image any efi_path='/efi.img' \
-boot_image any platform_id=0xef \
-boot_image any efi_boot_part=--efi-boot-image \
-boot_image any partition_table=on \
-end
ただし、これは信頼できるディレクトリ(メディアの挿入方法によって/dev/disk/by-*/
異なり、本質的に不安定でUSBデバイスベンダー名を含む項目)にはISO9660ファイルシステム自体へのリンクはありませんが、GPTパーティションテーブルのエントリのみを含みます。by-path
by-id
# stat -c'%N' /dev/disk/by-*/* | grep sdc | grep -Ev '[/]by-(id|path)[/]' # comments
'/dev/disk/by-label/FooInstall' -> '../../sdc2' # EFI
'/dev/disk/by-partlabel/EFI\x20boot\x20partition' -> '../../sdc2' # EFI
'/dev/disk/by-partlabel/Gap0' -> '../../sdc1' # Gap0
'/dev/disk/by-partlabel/Gap1' -> '../../sdc3' # Gap1
'/dev/disk/by-partuuid/30373931-3130-4130-b031-303030303031' -> '../../sdc1' # Gap0
'/dev/disk/by-partuuid/30373931-3130-4130-b032-303030303031' -> '../../sdc2' # EFI
'/dev/disk/by-partuuid/30373931-3130-4130-b033-303030303031' -> '../../sdc3' # Gap1
'/dev/disk/by-uuid/0000-0001' -> '../../sdc2' # EFI
'/dev/disk/by-uuid/1970-01-01-00-00-01-00' -> '../../sdc3' # Gap1
...これは最終的にISO自体へのシンボリックリンクではなく、最終パーティションまたはイメージ(不安定に見える)のEFIパーティションへのシンボリックリンクに/dev/disk/by-label/FooInstall
なります。Gap1
同様に、明示的なUUIDを割り当てると、/dev/disk/by-uuid
返品Gap1
RAWデバイス(および有効なiso9660ファイルシステム)ではなく、パーティションへのリンクで終了します。
/dev/sdc
最終的に、EFIイメージまたは塗りつぶされたGap
パーティションのいずれかを参照できないISO9660ファイルシステム自体(上記の例)への信頼性の高いリンクを取得するにはどうすればよいですか?
答え1
あなたが経験しているのは、実際にはudevファイル60-pertant-storage.rulesのバグです。 https://github.com/dsd/systemd/commit/dd1afeea4ed9b60b8a4d8b2a6d211f919cb5202e で議論された https://github.com/systemd/systemd/issues/14408
ルールファイルを回復しないと、ラベルのないパーティション(ファイルシステムがないため)は、プライマリデバイス上のファイルシステムのラベルを盗むことがあります。したがって、EFIパーティション・イメージにはLABELが必要であり、マウント可能なISOパーティション以外のパーティションがあってはなりません。
まあ、あなたは解決策を見つけました。したがって、以下はアーカイブに関するものです。
ISOのファイルをパーティションとして表示するのではなく、EFIファイルシステムイメージをパーティションにリンクすると、マウント可能なパーティションのみを含むパーティションテーブルを取得できます。
- -boot_image any efi_boot_part=--efi-boot-image \
- -boot_image any partition_table=on \
+ -append_partition 2 0xef /...path.on.disk.../efi.img \
MBRの代わりにGPTが必要な場合は、次を追加してください。
-boot_image any appended_part_as=gpt \
-boot_image any partition_offset=16 \
-padding 0 \
-compliance no_emul_toc \
ISO 9660ファイルシステムからefi.imgを省略したい場合:
- -boot_image any efi_path='/efi.img'
- -boot_image any platform_id=0xef \
-append_partition 2 0xef /u/FERTIG/SX \
+ -boot_image any cat_path=/boot.cat \
+ -boot_image any efi_path='--interval:appended_partition_2:all::' \
+ -boot_image any platform_id=0xef \
(cat_path = / boot.catの必要性は私が今見つけたxorrisoのバグから来ました。ディレクトリパスに "/"がなければならず、cat_path =が設定されておらず "/"がない場合、xorrisoはefi_path =。
答え2
GPTの代わりにMBRを使用することは、これらのアドレッシング可能性を達成する唯一の信頼性の高い方法のようです。
xorriso \
-volid "FooInstall" \
-map /path/to/content \
-boot_image any appended_part_as=mbr \
-boot_image any partition_offset=16 \
-boot_image any partition_table=on \
-boot_image any efi_path='/efi.img' \
-boot_image any platform_id=0xef \
-boot_image any iso_mbr_part_type=0x83 \
-boot_image any next \
-append_partition 2 0xef "/path/to/content/efi.img" \
-boot_image any efi_path=--interval:appended_partition_2:all:: \
-end
...また、ISOボリューム名を明確にするためにコマンドライン-n OTHERNAME
に追加され、そのISOへのリンクが作成されます。mkdosfs
/dev/disk/by-label/FooInstall