
我正在嘗試從 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
}
- NTFS 分割區內的磁碟映像位置 (image_path)
- NTFS 分割區 GPT GUID (image_hd)
- 如果磁碟映像包含多個分割區,則 rootfs UUID(根)
關於磁碟掛載的啟動過程:
- initcpio鉤掛載NTFS分割區
- initcpio 掛鉤將 NTFS 分割區中的磁碟映像安裝為循環設備
- 現在,正常的掛鉤鉤子已運行,它被賦予了 ext4 或在步驟 2 中掛載的磁碟映像中包含 linux rootfs 的任何分割區
- 系統退出早期用戶空間; newroot 設定為 NTFS 循環掛載映像檔的 rootfs 分割區。
- 嗯,我們得到了一個正在運行的 Linux 系統,該系統具有從 NTFS 分割區內的磁碟映像/iso 映像運行的讀寫權限。