首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >来自NTFS分区的GRUB引导ISO/磁盘映像

问来自NTFS分区的GRUB引导ISO/磁盘映像
EN

Unix & Linux用户
提问于 2019-03-25 23:24:36
回答 1查看 6.5K关注 0票数 2

我试图从PC上现有的NTFS分区启动包含Linux实时系统的ISO。PC有UEFI,硬盘使用GPT进行分区,因此GRUB4DOS不是一种选择。这能办到吗?

我知道以前有人问过这个问题:Grub -从ntfs分区引导debian iso文件并安装,但那里没有经过批准的答案--这就是为什么我要再问一遍。另外,我想使用我自己的内核,而不是一些固定的和预编译的内核。

从其他答案来看,我似乎需要包含某种自定义的内核文件(我假设将其放置到EFI分区),这样就能够加载ISO(?)来自NTFS本身。

这可以通过简单地执行GRUB条目在FAT分区上完成。

代码语言:javascript
复制
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
}
EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2019-03-25 23:24:36

因此,作为一种解决办法;

背景:我正在使用Arch。它使用米基尼特皮奥生成其initramfs (和早期的userspace(!))。因为我们要从NTFS启动文件系统映像,所以需要调整initramfs。我们可以使用GRUB及其ntfs模块来读取(GRUB ntfs模块是ro afaik)。来自NTFS分区的内核和initramfs。在此之后,我们仍然需要从initramfs挂载NTFS分区,以便进行完全的读/写访问。

解决方案的操作原理:我在initramfs中添加了ntfs-3g并对包进行了模糊处理,这样就可以安装NTFS分区。我还创建了一个新的mkinitcpio钩,需要在实际安装挂钩之前加载。钩子是一个简单的shell脚本,它获取参数(这些参数作为GRUB的内核参数提供)如下

代码语言:javascript
复制
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分区GUID (image_hd)
  3. 如果磁盘映像包含多个分区,则rootfs UUID (根)

有关磁盘安装的引导过程:

  1. initcpio钩子安装NTFS分区。
  2. initcpio钩子将NTFS分区中的磁盘映像作为循环设备挂载。
  3. 现在运行正常的挂载钩子,在步骤2中挂载的磁盘映像中给出包含linux rootfs的ext4或任何分区。
  4. 系统退出早期的用户空间;newroot被设置为NTFS-循环挂载的映像文件的rootfs分区。
  5. Ta-dah,我们得到了一个运行中的Linux系统,它的读写权限来自NTFS分区内的磁盘映像/iso映像。
票数 4
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/508617

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档