
Я пытаюсь загрузить ISO, содержащий Linux live system, с существующего раздела NTFS на ПК. ПК имеет UEFI, а жесткий диск разбит на разделы GPT, поэтому GRUB4DOS не вариант. Это вообще возможно сделать?
Я знаю, что этот вопрос уже задавался:Grub — загрузите iso-файл Debian с раздела ntfs и установите его, но там нет утвержденных ответов - поэтому я спрашиваю снова. Также я хотел бы использовать свое собственное ядро вместо какого-то фиксированного и предварительно скомпилированного.
Из других ответов следует, что мне нужно будет включить какой-то настроенный файл ядра (я предполагаю, поместить его в раздел EFI), который затем сможет загрузить остальную часть ISO(?) из самой NTFS.
Это можно сделать уже на разделе 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 — ro afaik.) ядра и initramfs из раздела NTFS. После этого нам все еще нужно смонтировать раздел NTFS из initramfs для полного доступа на чтение/запись.
Теория работы решения: Я добавил пакеты ntfs-3g и fusefs в initramfs, чтобы можно было смонтировать раздел NTFS. Я также создал новыйхук mkinitcpioкоторый должен быть загружен до фактического монтирующего хука. Хук — это простой скрипт оболочки, который получает параметры (они задаются как аргументы ядра из 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)
- Если образ диска содержит несколько разделов, то UUID rootfs (корень)
Процедура загрузки с учетом монтирования дисков:
- Хук initcpio монтирует раздел NTFS
- Хук initcpio монтирует образ диска из раздела NTFS как петлевое устройство
- Теперь запускается обычный хук монтирования, ему назначается ext4 или любой другой раздел, содержащий Linux rootfs внутри образа диска, смонтированного на шаге 2.
- Система выходит из раннего пользовательского пространства; newroot устанавливается на раздел rootfs файла образа, смонтированного в NTFS-loop.
- Та-дам, мы получили работающую систему Linux с правами на чтение и запись, запущенную с образа диска/iso-образа внутри раздела NTFS.