Iso

需要可引導 ISO 的哪些部分以及在其中放入什麼

  • May 21, 2021

所以我想為我的個人 Linux From Scratch 製作一個可啟動的 USB。但我找不到任何關於如何做到這一點的指南。那麼哪些文件是絕對需要的,哪些部分是可選的,我不知道該怎麼做。

如果您的目標是可啟動 USB,那麼第一個可選的事情就是首先將其稱為ISO

通常,帶有.iso後綴的磁碟映像文件表示該映像文件使用 ISO-9660(或可能是 UDF)文件系統,並且旨在刻錄到光學介質(CD、DVD 或藍光)上。

使用任何其他格式的磁碟映像在技術上應該稱為其他名稱;.bin.img或者.dmg是它們的常見後綴。

從 USB 啟動時,USB 磁碟本質上與硬碟相同,因此要使 USB 媒體可啟動,您應該對硬碟執行完全相同的操作以使其可啟動。

首先必須滿足預期系統韌體的啟動要求,這樣您的 USB 介質才能被辨識為可啟動的。


在舊版 BIOS 系統上,這意味著第一個 512 字節塊(= 塊 #0)的最後兩個字節應該是 0x55 0xAA,將其標識為有效的主引導記錄,或簡稱為 MBR。MBR 分區表通常會佔用另外 64 個字節(但自定義引導載入程序可能會忽略該要求)。剩餘的 446 字節將包含一個 16 位 x86 機器程式碼程序,該程序將由韌體載入和執行。當我們談論引導 Linux 時,這 446 字節將是引導載入程序的第一部分。

446 字節的機器程式碼勉強足以載入到引導載入程序的其他部分,因此任何現代引導載入程序將佔用的不僅僅是 MBR 中的 446 字節。在為 BIOS 樣式引導準備的 USB 介質上,您可以使用i386-pcGRUB、SYSLINUX、舊 LILO 或任何其他您認為適合您的目的的引導載入程序版本。之後的一切都取決於您將選擇使用哪個引導載入程序。


在以 UEFI 樣式引導的現代 64 位 x86 系統上,從可移動媒體引導的要求是:

  • 它應該包含一個帶有 FAT32 文件系統的分區
  • 在該文件系統中,應該有一個引導載入程序文件位於 path \EFI\BOOT\BOOTX64.EFI,使用 Microsoft PE+ 二進制格式。對於其他硬體架構,文件名會有所不同。
  • 如果啟用了安全啟動,則必須使用韌體辨識為有效的安全啟動證書對引導載入程序文件進行簽名,或者必須在韌體中明確將引導載入程序文件的 SHA256 雜湊列入白名單。(還有某些其他要求和限制,我建議您先讓 USB 在禁用安全啟動的情況下工作,然後再嘗試使其與安全啟動兼容。)

簡而言之,UEFI 引導載入程序就是:一個*.efi文件。它可能需要自己的配置文件,或者配置可能嵌入在引導載入程序二進製文件中。


一旦你可以執行引導載入程序,引導 Linux 的下一步就是指定一個核心文件,通常是一個 initramfs 文件。如果你能保證你的 Linux 根文件系統可以被核心中的文件系統驅動程序訪問,你可以在技術上省略 initramfs 文件……但通常使用 initramfs 文件會更容易處理不同的系統配置,這很好如果您希望將 USB 從一個系統移動到另一個系統,這一點很重要。

如果您的目標只是執行一個特定的 Linux 實用程序,您可以將它(以及它可能需要的任何數據文件)打包到 initramfs 文件中,然後將 initramfs 引導過程配置為直接從 initramfs 執行它而不實際掛載任何其他實用程序文件系統。一些實用程序,如磁碟擦除工具 DBAN 和舊版本的磁碟工具 GParted Live 和 Clonezilla Live 基本上就是這樣(如果我沒記錯的話,現代版本可能會載入額外的 squashfs 圖像)。一些硬體供應商甚至發布了以這種方式打包的基於 Linux 的韌體升級工具。

在引導載入程序成功載入核心文件和 initramfs 文件(如果使用)後,它將控制權轉移到 Linux 核心,然後引導載入程序的工作將完成。從那時起,一切都由 Linux 核心和 initramfs 文件的內容控制。

引用自:https://unix.stackexchange.com/questions/650809