GRUB 從 NTFS 分割區啟動 ISO/磁碟映像

GRUB 從 NTFS 分割區啟動 ISO/磁碟映像

我正在嘗試從 PC 上現有的 NTFS 分割區啟動包含 Linux live 系統的 ISO。 PC有UEFI,硬碟用GPT分割區,所以GRUB4DOS不是一個選擇。這完全可以做到嗎?

我知道這個問題之前已經被問過:Grub - 從 ntfs 分割區啟動 debian iso 檔案並安裝它,但那裡沒有批准的答案 - 這就是我再次詢問的原因。另外,我想使用我自己的內核,而不是一些固定和預編譯的內核。

從其他答案來看,我似乎需要包含某種自訂的核心檔案(我假設將其放置到 EFI 分區),然後該檔案能夠從 NTFS 本身載入 ISO(?) 的其餘部分。

這已經可以在 FAT 分割區上完成,只需執行 GRUB 條目即可

menuentry "Boot LINUX FROM ISO FILE" {
  set iso_path=/path_to/image_on_FAT_filesystem.iso
  loopback loop (hdX,msdosY)$iso_path
  linux (loop)/path_to/vmlinuz nomagic base_only norootcopy from=$iso_path
}

答案1

所以,作為解決方案;

背景:我正在使用 Arch Linux。它用mkinitcpio產生它的 initramfs (和早期的使用者空間(!))。因為我們從 NTFS 開機檔案系統映像,所以需要調整 initramfs。我們可以使用 GRUB 及其 ntfs 模組從 NTFS 分割區讀取(GRUB ntfs 模組是 ro afaik。)核心和 initramfs。此後,我們仍然需要從 initramfs 掛載 NTFS 分割區以進行完全讀取/寫入存取。

解決方案的操作原理:我將ntfs-3g和fusefs套件新增至initramfs中,這樣就可以掛載NTFS分割區了。我還創建了一個新的mkinitcpio 鉤子需要在實際安裝掛鉤之前加載。該鉤子是一個簡單的 shell 腳本,用於獲取參數(這些參數作為來自 GRUB 的內核參數給出),例如

menuentry "Boot LINUX FROM ISO FILE" {
  insmod ntfs
  set root='(hdX,Y)'
  linux /in_ntfs/vmlinuz-linux root=UUID=*GPT_UUID_OF_ROOTFS_ON_DISK_IMAGE* image_path=*path_to_disk_image_on_NTFS* image_hd=*GPT_UUID_OF_NTFS_DISK*
  initrd /in_ntfs/initrd.img
}
  1. NTFS 分割區內的磁碟映像位置 (image_path)
  2. NTFS 分割區 GPT GUID (image_hd)
  3. 如果磁碟映像包含多個分割區,則 rootfs UUID(根)

關於磁碟掛載的啟動過程:

  1. initcpio鉤掛載NTFS分割區
  2. initcpio 掛鉤將 NTFS 分割區中的磁碟映像安裝為循環設備
  3. 現在,正常的掛鉤鉤子已運行,它被賦予了 ext4 或在步驟 2 中掛載的磁碟映像中包含 linux rootfs 的任何分割區
  4. 系統退出早期用戶空間; newroot 設定為 NTFS 循環掛載映像檔的 rootfs 分割區。
  5. 嗯,我們得到了一個正在運行的 Linux 系統,該系統具有從 NTFS 分割區內的磁碟映像/iso 映像運行的讀寫權限。

相關內容