xorrisoを使用してISOパーティションとEFIパーティションに異なるボリュームラベルを提供しますか?

xorrisoを使用してISOパーティションとEFIパーティションに異なるボリュームラベルを提供しますか?

mkdosfsxorrisoを使用して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-pathby-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 返品Gap1RAWデバイス(および有効な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 =。

おすすめ記事