簡體   English   中英

從目錄創建純 uefi 可啟動 iso

[英]create pure uefi bootable iso from directory

我創建了一個實時 Linux 系統,我想創建一個能夠啟動 uefi 的 iso 文件,不需要舊的 BIOS。

我有一個包含 EFIBOOT 文件的文件夾(包含 Refind 啟動管理器和我的 efi 啟動內核 (Linux-Sytem.efi))

EFITBOOT

efi
    ├── boot
    │   ├── bootx64.efi
    │   └── refind.conf
    └── gentoo
        └── Linux-Sytem.efi

和一個包含系統映像的文件夾:

system/
└── Linux-Sytem.img

我的猜測是現在我必須創建一個包含 EFIBOOT 結構的 efi 兼容 (fat16/32) efi.img。

然后我必須以某種方式創建將 efi.img 和系統結構放在一起的 iso...

我已經看到使用 grub 來執行此操作的各種教程,但它們都使用雙引導選項(用於 uefi 和 bios)...

如果沒有 grub 工具和純 uefi,我怎么能做到這一點?

(如果將 EFIBOOT 和系統結構復制到適當的分區/格式化的 USB 驅動器,我非常滿意。它可以毫無問題地啟動)

這對我有用,但可能是錯誤的:

首先,我創建了一個包含兩個分區的disk.iso ,一個 EFI 分區和一個 SYSTEM 分區,整個 img 將是 1.4GB(EFI 分區為 100MB,其余為 SYSTEM 分區):

dd if=/dev/zero of=disk.iso bs=1M count=1400

然后我用 fdisk GPT 表對 disk.iso 文件進行分區:

fdisk disk.iso
# press
g # create GPT-Table
n # new partition
1 # partition number
ENTER # select default
+100M # set size to 100MB
t # set partition type
1 # to EFI SYSTEM
n # new partition
ENTER # default partition number
ENTER # default 1st sector
ENTER # default last sector
w # write changes to file and exit

然后顯示分區布局:

fdisk -l disk.iso
Disk disk.iso: 1.4 GiB, 1468006400 bytes, 2867200 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: D7DD43FA-30B6-2445-B34C-F4DB7B5D6F37

Device      Start     End Sectors  Size Type
disk.iso1    2048  206847  204800  100M EFI System
disk.iso2  206848 2867166 2660319  1.3G Linux filesystem

使用 Lostup 從 disk.iso 循環掛載兩個分區,將兩個分區格式化為您想要的格式(EFI 為 fat16,SYSTEM 為 ext4),並在需要時額外為它們分配標簽...使用 fdisk START END 值乘以扇區大小來設置邊界:

losetup --offset $((512*2048)) --sizelimit $((512*206847)) --show --find disk.iso
# /dev/loop0
losetup --offset $((512*206848)) --sizelimit $((512*2867166)) --show --find disk.iso
# /dev/loop1
mkfs.fat -F16 /dev/loop0
mkfs.ext4 /dev/loop1
tune2fs -L "SYSTEM" /dev/loop1  # assign label SYSTEM to SYSTEM-Partition

掛載兩個分區並將相應的內容復制到其中:

mkdir /mnt/p1 /mnt/p2
mount /dev/loop0 /mnt/p1/
mount /dev/loop1 /mnt/p2/
cp -a efi /mnt/p1/
cp -a system/* /mnt/p2/
umount /mnt/p1 /mnt/p2

卸載兩個循環設備:

losetup -d /dev/loop0 /dev/loop1 

disk.iso 現在可以啟動了。 Iso 使用 qemu-kvm 和 virt-manager 進行測試,作為 CDROM 介質插入。 未使用真實刻錄的磁盤進行測試!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM