木っ端拾いの材木流し

Cannot see the wood for the trees.

xorriso/mkisofsによる起動・dd書き込み可能なisoの作成 (3)

前回、以下のコマンドでisoファイルを作成した。
※-boot-load-sizeが誤っていたので修正

xorriso -as mkisofs \
    -b boot/etfsboot.com -no-emul-boot -boot-load-size 8  \
    -eltorito-alt-boot -e efi/microsoft/boot/efisys.bin -no-emul-boot -isohybrid-gpt-basdat  -o output.iso .

作成したファイルを見ると、
・fdisk -l:パーティション情報が表示されない
$ fdisk -l w10-22h2-inst-xorrisofs.iso
ディスク w10-22h2-inst-xorrisofs.iso: 4.56 GiB, 4891910144 バイト, 9554512 セクタ
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト

・hexdump -C:LBA0、LBA1が空
$ hexdump -C w10-22h2-inst-xorrisofs.iso | head
00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|

00008000 01 43 44 30 30 31 01 00 20 20 20 20 20 20 20 20 |.CD001.. |
00008010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
00008020 20 20 20 20 20 20 20 20 49 53 4f 49 4d 41 47 45 | ISOIMAGE|
00008030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
00008040 20 20 20 20 20 20 20 20 00 00 00 00 00 00 00 00 | ........|
00008050 94 72 24 00 00 24 72 94 00 00 00 00 00 00 00 00 |.r$..$r.........|
00008060 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00008070 00 00 00 00 00 00 00 00 01 00 00 01 01 00 00 01 |................|
Ubuntuディスクユーティリティ:パーティション情報が表示されない
VirtualBoxからHDDとしてUEFI起動:失敗(CDROMと認識される)

xorrisofsのisohybrid関連オプション

xorriso -as mkisofs ではなく xorrisofs を使う。
実体は同じだと思うが、オプションの情報はこちらのほうが調べやすかった。


xorrisofs - マニュアルページ セクション 1: ユーザーコマンド
https://docs.oracle.com/cd/F16635_01/html/E71065/xorrisofs-1.html
Oracle Solarisのだけど、xorrisofsのman。

isohybrid関係のオプション:

・ -isohybrid-gpt-basdat
EFIのブートイメージをESPとして疑似MBR・GPTに登録する。-isohybrid-mbrと一緒に使うことが前提。

・-part_like_isohybrid

  • isohybrid-gpt-basdatを指定した際、-isohybrid-mbr が指定されていなくてもEFIのブートイメージをESPとしてGPTに登録する。MBRには登録されない。

・-efi-boot-part disk_path
disk_path のファイルをGPTでESPとしてマークする。disk_pathはFAT-12のディスクイメージを指定する。disk_pathの代わりに --efi-boot-image を指定すると、 -eもしくは -efi-boot で指定したブートイメージが指定される。


aports/scripts/mkimg.base.sh at master · alpinelinux/aports · GitHub
https://github.com/alpinelinux/aports/blob/master/scripts/mkimg.base.sh
Alpine Linuxのisoイメージを作成するスクリプト

スクリプトの中で、以下のような記述があった。

		if [ -z "$_isolinux" ]; then
			# efi boot only
			_efiboot="
				-efi-boot-part
				--efi-boot-image
				-e boot/grub/efi.img
				-no-emul-boot
				"
		else
			# hybrid isolinux+efi boot
			_efiboot="
				-eltorito-alt-boot
				-e boot/grub/efi.img
				-no-emul-boot
				-isohybrid-gpt-basdat
				"

isolinuxはBIOS環境でCDROM起動する仕組みなので、efi boot only とコメントが付いているオプションを指定すると、UEFI環境でのみHDD起動すると思われる。


RepackBootableISO - Debian Wiki
https://wiki.debian.org/RepackBootableISO
DebianでブータブルISOを再作成する際のガイド。
xorrisofsの各オプションの説明の中で --isohybrid-mbr と --isohybrid-gpt-basdat についても説明されている。

    • isohybrid-mbr isohdpfx.bin について、isoファイルの先頭432バイトに書き込む、とある。

ロードされるファイルは isolinux.bin が想定されているのだが、ISO9660ファイルシステム上、ブートローダーのセクタ位置は同じなのではないか。

対処

UEFI環境でCDROMとHDD両方に対応するハイブリッドisoファイルを作る方法は以下が考えられる。
(1) -isohybrid-mbr を指定せず -isohybrid-gpt-basedat -part_like_isohybrid を指定することで、疑似MBRなしで疑似ESPだけを付与する
(2) -isohybrid-mbr を指定せず -efi-boot-part --efi-boot-image を指定することで、疑似MBRなしで疑似ESPだけを付与する
(3) -isohybrid-mbr isohdpfx.bin と -isohybrid-gpt-basedat を指定することで、疑似MBRと疑似ESP両方を付与する

(1) -isohybrid-mbr を指定せず -isohybrid-gpt-basedat -part_like_isohybrid を指定することで、疑似MBRなしで疑似ESPだけを付与する

$ sudo xorrisofs -iso-level 4 -R -D -U -b boot/etfsboot.com -no-emul-boot -boot-load-size 8 -boot-info-table -eltorito-alt-boot -e efi/microsoft/boot/efisys.bin -no-emul-boot -isohybrid-gpt-basdat -part_like_isohybrid -o ../w10-22h2-inst-xorrisofs.iso isoroot .


結果:だめ。LBA1にGPTヘッダーは書き込まれるのだが、GPTパーティションとして認識されない。

・fdisk -l:パーティション情報が表示されない

$ fdisk -l ../w10-22h2-inst-xorrisofs.iso 
ディスク ../w10-22h2-inst-xorrisofs.iso: 4.56 GiB, 4891942912 バイト, 9554576 セクタ
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト

・hexdump -C:LBA0が空、LBA1にGPTヘッダーあり

$ hexdump -C ../w10-22h2-inst-xorrisofs.iso | head
00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00000200  45 46 49 20 50 41 52 54  00 00 01 00 5c 00 00 00  |EFI PART....\...|
00000210  05 86 bf 93 00 00 00 00  01 00 00 00 00 00 00 00  |................|
00000220  8f ca 91 00 00 00 00 00  40 00 00 00 00 00 00 00  |........@.......|
00000230  50 ca 91 00 00 00 00 00  d9 26 4f b9 01 64 5b 45  |P........&O..d[E|
00000240  94 d2 c1 89 29 e4 cf 82  02 00 00 00 00 00 00 00  |....)...........|
00000250  f8 00 00 00 80 00 00 00  92 53 36 1f 00 00 00 00  |.........S6.....|
00000260  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*

Ubuntuディスクユーティリティ:パーティション情報が表示されない

VirtualBoxからHDDとしてUEFI起動:失敗(CDROMと認識される)

(2) -isohybrid-mbr を指定せず -efi-boot-part --efi-boot-image を指定することで、疑似MBRなしで疑似ESPだけを付与する

$ sudo xorrisofs -iso-level 4 -R -D -U -b boot/etfsboot.com -no-emul-boot -boot-load-size 8 -boot-info-table -eltorito-alt-boot -e efi/microsoft/boot/efisys.bin -no-emul-boot -isohybrid-gpt-basdat -part_like_isohybrid -o ../w10-22h2-inst-xorrisofs.iso isoroot .


結果:だめ。3つの中で唯一UbuntuのディスクユーティリティーがHDDをGPTとして認識し、VirtualBoxでもHDDとして認識されるが、起動すると Press any key の後インストーラーを読み込めずに終了する。
(1)で boot/etfsboot.com と efi/microsoft/boot/efisys.bin と efi/boot/bootx64.efi だけを入れたISOファイルを作って起動すると Press any key は表示されるので、bootx64.efi か efisys.bin までは読み込んでいるが、それ以降のファイルへはアクセスできていないと思われる。


(3) -isohybrid-mbr isohdpfx.bin と -isohybrid-gpt-basedat を指定することで、疑似MBRと疑似ESP両方を付与する

$ sudo xorrisofs -iso-level 4 -R -D -U -b boot/etfsboot.com -no-emul-boot -boot-load-size 8 -boot-info-table -isohybrid-mbr ./isohdpfx.bin -eltorito-alt-boot -e efi/microsoft/boot/efisys.bin -no-emul-boot -isohybrid-gpt-basdat -o ../w10-22h2-inst-xorrisofs.iso isoroot .


結果:
結果:だめ。LBA0にMBRが、LBA1にGPTヘッダーが書き込まれるが、パーティションMBRと認識され、疑似GPTパーティションが認識されない。

・fdisk -l:MBRとして空のディスクとEFIパーティションが表示される。

$ sudo fdisk -l /dev/sdc
ディスク /dev/sdc: 4.56 GiB, 4893106176 バイト, 9556848 セクタ
Disk model: VBOX HARDDISK   
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスクラベルのタイプ: dos
ディスク識別子: 0x244c3ab9

デバイス   起動 開始位置 最後から  セクタ サイズ Id タイプ
/dev/sdc1  *           0  9556847 9556848   4.6G  0 空
/dev/sdc2           1160     4039    2880   1.4M ef EFI (FAT-12/16/32)

・hexdump -C:LBA0にMBR、LBA1にGPTヘッダーあり

$ sudo hexdump -C /dev/sdc | less
00000000  33 ed 90 90 90 90 90 90  90 90 90 90 90 90 90 90  |3...............|
00000010  90 90 90 90 90 90 90 90  90 90 90 90 90 90 90 90  |................|
00000020  33 ed fa 8e d5 bc 00 7c  fb fc 66 31 db 66 31 c9  |3......|..f1.f1.|
00000030  66 53 66 51 06 57 8e dd  8e c5 52 be 00 7c bf 00  |fSfQ.W....R..|..|
00000040  06 b9 00 01 f3 a5 ea 4b  06 00 00 52 b4 41 bb aa  |.......K...R.A..|
00000050  55 31 c9 30 f6 f9 cd 13  72 16 81 fb 55 aa 75 10  |U1.0....r...U.u.|
00000060  83 e1 01 74 0b 66 c7 06  f1 06 b4 42 eb 15 eb 00  |...t.f.....B....|
00000070  5a 51 b4 08 cd 13 83 e1  3f 5b 51 0f b6 c6 40 50  |ZQ......?[Q...@P|
00000080  f7 e1 53 52 50 bb 00 7c  b9 04 00 66 a1 b0 07 e8  |..SRP..|...f....|
00000090  44 00 0f 82 80 00 66 40  80 c7 02 e2 f2 66 81 3e  |D.....f@.....f.>|
000000a0  40 7c fb c0 78 70 75 09  fa bc ec 7b ea 44 7c 00  |@|..xpu....{.D|.|
000000b0  00 e8 83 00 69 73 6f 6c  69 6e 75 78 2e 62 69 6e  |....isolinux.bin|
000000c0  20 6d 69 73 73 69 6e 67  20 6f 72 20 63 6f 72 72  | missing or corr|
000000d0  75 70 74 2e 0d 0a 66 60  66 31 d2 66 03 06 f8 7b  |upt...f`f1.f...{|
000000e0  66 13 16 fc 7b 66 52 66  50 06 53 6a 01 6a 10 89  |f...{fRfP.Sj.j..|
000000f0  e6 66 f7 36 e8 7b c0 e4  06 88 e1 88 c5 92 f6 36  |.f.6.{.........6|
00000100  ee 7b 88 c6 08 e1 41 b8  01 02 8a 16 f2 7b cd 13  |.{....A......{..|
00000110  8d 64 10 66 61 c3 e8 1e  00 4f 70 65 72 61 74 69  |.d.fa....Operati|
00000120  6e 67 20 73 79 73 74 65  6d 20 6c 6f 61 64 20 65  |ng system load e|
00000130  72 72 6f 72 2e 0d 0a 5e  ac b4 0e 8a 3e 62 04 b3  |rror...^....>b..|
00000140  07 cd 10 3c 0a 75 f1 cd  18 f4 eb fd 00 00 00 00  |...<.u..........|
00000150  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
:[K
[K000001b0  80 04 00 00 00 00 00 00  b9 3a 4c 24 00 00 80 00  |.........:L$....|
000001c0  01 00 00 97 ff e5 00 00  00 00 70 d3 91 00 00 fe  |..........p.....|
000001d0  ff ff ef fe ff ff 88 04  00 00 40 0b 00 00 00 00  |..........@.....|
000001e0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
000001f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 55 aa  |..............U.|
00000200  45 46 49 20 50 41 52 54  00 00 01 00 5c 00 00 00  |EFI PART....\...|
00000210  ff 4b d8 24 00 00 00 00  01 00 00 00 00 00 00 00  |.K.$............|
00000220  6f d3 91 00 00 00 00 00  40 00 00 00 00 00 00 00  |o.......@.......|
00000230  30 d3 91 00 00 00 00 00  44 ec 49 75 ab c7 57 42  |0.......D.Iu..WB|
00000240  be 4a 18 0b 11 6c 40 b9  02 00 00 00 00 00 00 00  |.J...l@.........|
00000250  f8 00 00 00 80 00 00 00  85 6b 70 f3 00 00 00 00  |.........kp.....|
00000260  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00000400  a2 a0 d0 eb e5 b9 33 44  87 c0 68 b6 b7 26 99 c7  |......3D..h..&..|

Ubuntuディスクユーティリティ:
MBR 2パーティションとして認識される。
GPTでないのでEFIパーティションはESPとしては認識されない。

VirtualBoxからHDDとしてUEFI起動:失敗(CDROMと認識される)


Windowsのisoファイルにisohybrid相当の疑似MBR/GPTを付与するのは難しそう。