如何创建非 UEFI 可启动 USB 安装? (openSuSE 15.3)

如何创建非 UEFI 可启动 USB 安装? (openSuSE 15.3)

标题基本概括了所有内容。我有一台安装了 OpenSuSE 的旧机器(12.x,IIRC),我想更新它。它没有 UEFI BIOS。我想创建一个可引导的 USB 安装,但我尝试的所有操作,从 OpenSuSE imagewriter 程序到直接 dd 复制到拇指驱动器,都会创建一个 EFI 目录,其下有 BOOT。这不会从目标机器启动 - 事实上,甚至无法识别。

我使用当前的 openSUSE-Leap-15.3-NET-x86_64.iso 进行安装,并尝试在运行 15.0 和 15.2 的几台不同机器上创建安装。我使用基本相同的过程在两台机器上进行安装,没有出现常见的问题。

此外,其中一台机器也是非 UEFI,并且创建的 USB 记忆棒可以很好地使用它。两者的 BIOS 日期都是 2007 年的。唯一的区别是,它使用的一个可能是 IBM BIOS(它是 ThinkPad T60p),另一个则使用 AMI BIOS。

PS:我还将 BIOS 设置为仅从 USB 启动,但这只会导致机器在启动时挂起,并显示一条消息:找不到可启动驱动器。在我启动到已安装的 Linux 后,机器还会安装并读取该棒,因此这不仅仅是 USB 硬件损坏的问题。

答案1

请注意,写入拇指驱动器的图像应显示为分区:第一个确实是 FAT32 分区,根目录为 EFI 目录,但第二个分区虽然标记为类型 ID 17(根据 Debian 10 的“隐藏 HPFS/NTFS” fdisk),但实际上包含 ISO9660 文件系统,该系统具有大部分ISO 的内容。对于 BIOS+UEFI 可启动混合启动介质来说,这是相当正常的结构。

# sha256sum openSUSE-Leap-15.3-NET-x86_64-Current.iso
54fb3a488e0fececf45cdaeefaccfb64437745

我将使用启用分区支持的环回设备模拟将其写入 USB 拇指驱动器:

# losetup -fP --show openSUSE-Leap-15.3-NET-x86_64-Current.iso
/dev/loop0

# fdisk -l /dev/loop0
Disk /dev/loop0: 146 MiB, 153092096 bytes, 299008 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: dos
Disk identifier: 0x1d9b6617

Device       Boot Start    End Sectors   Size Id Type
/dev/loop0p1        276   7331    7056   3.5M ef EFI (FAT-12/16/32)
/dev/loop0p2 *     7332 299007  291676 142.4M 17 Hidden HPFS/NTFS

# file -s /dev/loop0p2
/dev/loop0p2: ISO 9660 CD-ROM filesystem data 'openSUSE-Leap-15.3-NET-x86_64160' (bootable)

但是,如果您的问题系统使用(或能够使用)分区类型 ID 0x17 来实现某些内部目的,例如“恢复出厂默认设置”系统映像,那么这可能解释了为什么系统拒绝从该分区类型 ID 0x17 进行 BIOS 式引导。分割。您可以尝试将安装程序拇指驱动器的第二个分区的分区类型更改为其他值。除任何“扩展分区”类型之外的任何值都应该有效;我相信 RedHat 曾经将分区类型 0x00 用于其某些混合 ISO 映像。

MBR 内容的十六进制转储表明ISOLINUXBIOS 引导加载程序已安装:

# dd if=openSUSE-Leap-15.3-NET-x86_64-Current.iso bs=512 count=1 | xxd -g 1
1+0 records in
1+0 records out
512 bytes copied, 9.4268e-05 s, 5.4 MB/s
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  [email protected].>
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  ................
00000160: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000170: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000180: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00000190: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
000001a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
000001b0: 50 39 00 00 00 00 00 00 17 66 9b 1d 00 00 00 08  P9.......f......
000001c0: 15 00 ef 25 04 03 14 01 00 00 90 1b 00 00 80 25  ...%...........%
000001d0: 05 03 17 3f 20 91 a4 1c 00 00 5c 73 04 00 00 00  ...? .....\s....
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.

如果我们搜索第二个分区(它被正确标记为 BIOS 样式可启动),我们将找到isolinux.bin

# mount -o ro /dev/loop0p2 /mnt
# find /mnt -name isolinux.bin
/mnt/boot/x86_64/loader/isolinux.bin

/boot/x86_64/loader/是引导加载程序安装路径的典型 SuSE 风格。因此,BIOS 式启动的所有基本组件似乎都已就位,但是问题系统的 BIOS 似乎由于某种原因拒绝了它。正如我上面所说,我怀疑 ISO9660 分区的分区类型 ID 的选择可能与您的问题有关。

相关内容