无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 235572|回复: 617
打印 上一主题 下一主题

[原创] NTloader: BIOS/UEFI 下用 GRUB 启动 VHD/WIM

    [复制链接]
跳转到指定楼层
#
发表于 2021-1-31 16:08:47 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式
本帖最后由 wintoflash 于 2025-4-8 21:58 编辑

适用范围:
BIOS, x64 UEFI, ia32 UEFI, arm64 UEFI 均可使用。
支持 FAT, NTFS, exFAT 文件系统 (VHD 不能位于 FAT 分区,老版本 Windows VHD 只能位于 NTFS 分区)
文件路径最好是不带空格的英文字母/数字。带空格的话传递参数时用冒号":"代替空格。
命令行长度不得超过 4096。
使用方法:
GNU GRUB 2 (>=2.12)
  1. menuentry "Boot Windows NT6+ WIM" {
  2.     search -s -f /path/to/ntloader
  3.     search -s dev -f /path/to/winpe.wim
  4.     probe -s dev_uuid -u $dev
  5.     if [ "${grub_platform}" = "efi" ]; then
  6.         linux /path/to/ntloader uuid=${dev_uuid} wim=/path/to/winpe.wim
  7.         initrd /path/to/initrd.cpio
  8.     else
  9.         linux16 /path/to/ntloader uuid=${dev_uuid} wim=/path/to/winpe.wim
  10.         initrd16 /path/to/initrd.cpio
  11.    fi;
  12. }

  13. menuentry "Boot Windows NT6+ VHD/VHDx" {
  14.     search -s -f /path/to/ntloader
  15.     search -s dev -f /path/to/windows.vhd
  16.     probe -s dev_uuid -u $dev
  17.     if [ "${grub_platform}" = "efi" ]; then
  18.         linux /path/to/ntloader uuid=${dev_uuid} vhd=/path/to/windows.vhd
  19.         initrd /path/to/initrd.cpio
  20.     else
  21.         linux16 /path/to/ntloader uuid=${dev_uuid} vhd=/path/to/windows.vhd
  22.         initrd16 /path/to/initrd.cpio
  23.    fi;
  24. }

  25. menuentry "Boot Windows NT6+ on (hdx,y)" {
  26.     search -s -f /path/to/ntloader
  27.     probe -s dev_uuid -u (hdx,y)
  28.     if [ "${grub_platform}" = "efi" ]; then
  29.         linux /path/to/ntloader uuid=${dev_uuid}
  30.         initrd /path/to/initrd.cpio
  31.     else
  32.         linux16 /path/to/ntloader uuid=${dev_uuid}
  33.         initrd16 /path/to/initrd.cpio
  34.    fi;
  35. }
复制代码

GRUB4DOS / GRUB4EFI
  1. title Boot Windows NT6+ WIM
  2. find --set-root /path/to/winpe.wim
  3. uuid ()
  4. find --set-root /path/to/ntloader
  5. kernel /path/to/ntloader uuid=%?_UUID% wim=/path/to/winpe.wim
  6. initrd /path/to/initrd.cpio

  7. title Boot Windows NT6+ VHD
  8. find --set-root /path/to/windows.vhd
  9. uuid ()
  10. find --set-root /path/to/ntloader
  11. kernel /path/to/ntloader uuid=%?_UUID% vhd=/path/to/windows.vhd
  12. initrd /path/to/initrd.cpio
复制代码

下载:
https://github.com/grub4dos/ntloader/releases/latest
源码:
https://github.com/grub4dos/ntloader

点评

辛苦了  发表于 2024-5-11 18:36

评分

参与人数 20无忧币 +105 收起 理由
ksafei + 5 赞一个!
smartcowboy + 5 很给力!
yyz2191958 + 2 赞一个!
diskmans + 2 很给力!
有阴也有阳 + 5 很给力!
cuicongyuan + 5 很给力!
gutaiping2006 + 5 很给力!
2012chenyuwen + 5 很给力!
f111 + 5 很给力!
zhczf + 5 很给力!
lookerJ + 5
蓝星明月 + 10 赞一个!
2011yaya2007777 + 5 赞一个!
2011cwj6958 + 5 很给力!
amita + 5
liuzhaoyzz + 10 很给力!
piazini + 1 很给力!
sunsea + 10 很给力!
hilsonma + 5 很给力!
freesoft00 + 5

查看全部评分

551#
发表于 2025-10-18 10:59:02 | 只看该作者
感谢分享,学习一下!
回复

使用道具 举报

550#
发表于 2025-10-17 17:08:36 来自手机 | 只看该作者
能引导动态存储的vhd吗
回复

使用道具 举报

549#
发表于 2025-10-17 16:28:32 | 只看该作者
能配合iPXE使用不?
回复

使用道具 举报

548#
发表于 2025-10-17 14:10:02 | 只看该作者
本帖最后由 2011masm 于 2025-10-17 21:54 编辑

一、因为我已对ntoskrnl.exe添加了数字签名,经测试不加f8参数,只加testmode=yes参数即可跳过禁用数字签名的下面如图那个选择屏幕。
二、在linux环境下,已用find * | cpio -o -H newc > ../initrd.cpio命令对替代过boot.sdi重新打包,已成功启动。谢谢指点。
有一个新的问题:
我用的笔记本,在光驱位加装了一块硬盘,不加装此硬盘前启动正常,加装此硬盘后无法启动,显示如下:
因无法上传图片,将文字贴上
booting 'ramoswin7.wim'

(hd0,3)
(hd0,3) UUID  is "00068**************"
         filesystem type is ntfs,partition type 0x07
(hd0,1)
    [liux-bzo,age,setup=0x800,size=0x13400]
loading :/ntloader/initrd.cpio
    [linux-initrd @ 0xba33d000,0x939e40 bytes]

ntloader v3.0.7

command line: "uuid=00068********** wim=ram/ramoswin7.wim testmode=yes"
scratch addr 0x30000
停在此画面死机。
而后将加装的硬盘拆下后启动又可以正常启动。有一块硬盘时启动正常,有两块硬盘时无法启动。补充一下新发现,并非两块就一定不能启动,而是其中一块硬盘装了个fydeos19.0,上面分了12个区,是这块硬盘挂上后无法启动。

回复

使用道具 举报

547#
 楼主| 发表于 2025-10-16 22:29:18 | 只看该作者
2011masm 发表于 2025-10-16 21:42
因为我是用wimramos1.3制作的ramos,制作时对ntoskrnl.exe进行了修改,又重新用Windows 64Signer V1.2加了数 ...
一、能否再加个参数让跳过系统启动时禁用数字签名的下面如图那个选择屏幕

无法实现。只能命令行使用f8参数自动进入这个界面,但是必须要用户手动选择才行。
二、initrd.CPIO名件解压后里面有个3M的boot.sdi,我替换成朱玛制作的28KB的精简版(用此版本启动后系统盘为exfat格式),如何用7z再压缩回去?
是压成initrd.zip.gz,再重命名为initrd.cpio吗?还是只能由你重新制作一个版本?

你下载的压缩包里面有文档已经说明了。
也可以看github上的说明:https://github.com/grub4dos/ntloader/blob/main/docs/utils.md
回复

使用道具 举报

546#
发表于 2025-10-16 21:42:23 | 只看该作者
因为我是用wimramos1.3制作的ramos,制作时对ntoskrnl.exe进行了修改,又重新用Windows 64Signer V1.2加了数字签名,现在是用ntloader直接引导ramoswin7.wim
有两个问题提一下:
一、能否再加个参数让跳过系统启动时禁用数字签名的下面如图那个选择屏幕




二、initrd.CPIO名件解压后里面有个3M的boot.sdi,我替换成朱玛制作的28KB的精简版(用此版本启动后系统盘为exfat格式),如何用7z再压缩回去?
是压成initrd.zip.gz,再重命名为initrd.cpio吗?还是只能由你重新制作一个版本?



点评

无法实现。只能命令行使用f8参数自动进入这个界面,但是必须要用户手动选择才行。 你下载的压缩包里面有文档已经说明了。 也可以看github上的说明:https://github.com/grub4dos/ntloader/blob/main/docs/util  详情 回复 发表于 2025-10-16 22:29
回复

使用道具 举报

545#
发表于 2025-10-13 21:51:02 | 只看该作者
wintoflash 发表于 2025-10-13 19:09
你这个VHD是动态的吧,syslinux的memdisk不支持动态VHD的。

感谢指导
的却是动态格式启动不了
回复

使用道具 举报

544#
 楼主| 发表于 2025-10-13 19:09:28 | 只看该作者
xuesfh007 发表于 2025-10-13 17:56
明白了,感谢大佬回复
再请教下:
使用memdisk来启动vhd文件,vhd文件里只安装了ventoy(MBR格式),vh ...

你这个VHD是动态的吧,syslinux的memdisk不支持动态VHD的。
回复

使用道具 举报

543#
发表于 2025-10-13 18:09:21 | 只看该作者
xuesfh007 发表于 2025-10-13 18:05
grub2按道理也能启动吧

应该能吧,但是我没用过grub2,我用grub4dos启动ventoy.vhd是没有问题的
回复

使用道具 举报

542#
发表于 2025-10-13 18:05:40 | 只看该作者
fh123456 发表于 2025-10-13 18:04
我用grub4dos0.46a来启动ventoy.vhd

grub2按道理也能启动吧

点评

应该能吧,但是我没用过grub2,我用grub4dos启动ventoy.vhd是没有问题的  详情 回复 发表于 2025-10-13 18:09
回复

使用道具 举报

541#
发表于 2025-10-13 18:04:05 | 只看该作者
xuesfh007 发表于 2025-10-13 17:56
明白了,感谢大佬回复
再请教下:
使用memdisk来启动vhd文件,vhd文件里只安装了ventoy(MBR格式),vh ...

我用grub4dos0.46a来启动ventoy.vhd
回复

使用道具 举报

540#
发表于 2025-10-13 17:56:58 | 只看该作者
本帖最后由 xuesfh007 于 2025-10-13 18:00 编辑
wintoflash 发表于 2025-10-13 13:51
NTloader当然只支持Windows的vhd,帖子里面的菜单也写明了都是Windows的vhd。
你希望在Legacy BIOS下启 ...

明白了,感谢大佬回复
再请教下:
使用memdisk来启动vhd文件,vhd文件里只安装了ventoy(MBR格式),vhd文件大概30多兆(vhd内的虚拟盘容量256兆)
grub2采用Legecy BIOS模式启动系统时,一直卡在了这个界面,不知道错在哪里?
(上面一大串英文和数字提示)
Loading boot sector... booting...


grub2菜单如下:
menuentry "ventoy" {
        linux16 /EFI/grub/memdisk
        initrd16 /ventoyMBR.vhd
}


试过如下格式,都是卡在上面这个界面
menuentry "ventoy" {
        linux16 /EFI/grub/memdisk raw
        initrd16 /ventoyMBR.vhd
}


menuentry "ventoy" {
        linux16 /EFI/grub/memdisk harddisk raw
        initrd16 /ventoyMBR.vhd
}


menuentry "ventoy" {
        linux16 /EFI/grub/memdisk harddisk
        initrd16 /ventoyMBR.vhd
}




点评

你这个VHD是动态的吧,syslinux的memdisk不支持动态VHD的。  详情 回复 发表于 2025-10-13 19:09
我用grub4dos0.46a来启动ventoy.vhd  详情 回复 发表于 2025-10-13 18:04
回复

使用道具 举报

539#
 楼主| 发表于 2025-10-13 13:51:12 | 只看该作者
xuesfh007 发表于 2025-10-13 13:29
请问下,用NTloader来启动vhd文件,其中vhd文件里只安装了ventoy(MBR格式)
采用Legecy BIOS模式启动系统 ...

NTloader当然只支持Windows的vhd,帖子里面的菜单也写明了都是Windows的vhd。
你希望在Legacy BIOS下启动Ventoy的vhd,应使用memdisk :https://wiki.syslinux.org/wiki/index.php?title=MEMDISK
回复

使用道具 举报

538#
发表于 2025-10-13 13:29:46 | 只看该作者
本帖最后由 xuesfh007 于 2025-10-13 13:34 编辑

请问下,用NTloader来启动vhd文件,其中vhd文件里只安装了ventoy(MBR格式)
采用Legecy BIOS模式启动系统
系统文件目录为:
├─grub
└─ntloader
根目录下放置ventoyMBR.vhd文件
启动出错,怎么办
出错内容:
    windows failed to start. A recent hardware or software change might be thecause. To fix the problem:
    1. Insert your windows installation disc and restart your computer.2. choose your language settings, and then click "Next."
    3. click "Repair your computer."
    If you do not have this disc, contact your system administrator or computer manufacturer for assistance.
    File: \windows\system32\winload.exe
    status: 0xc0oo0oof
    Info: The application or operating system couldn't be loaded because a
    required file is missing or contains errors.



D:\MyUserData\MyDocuments\Desktop\PixPin_2025-10-13_13-26-06.png
看提示,意思只能启动安装windows系统的vhd文件?如果是安装了ventoy系统的vhd有办法启动么?

grub2菜单如下:
menuentry "Boot  VHD/VHDx" {
    set vhd_path="/ventoyMBR.vhd"
    set ntloader_path="/EFI/ntloader"

    search -s -f $ntloader_path/ntloader
    search -s dev -f $vhd_path
    probe -s dev_uuid -u $dev
    if [ "${grub_platform}" = "efi" ]; then
        linux $ntloader_path/ntloader uuid=${dev_uuid} vhd=$vhd_path
        initrd $ntloader_path/initrd.cpio
    else
        linux16 $ntloader_path/ntloader uuid=${dev_uuid} vhd=$vhd_path
        initrd16 $ntloader_path/initrd.cpio
   fi;
}

点评

NTloader当然只支持Windows的vhd,帖子里面的菜单也写明了都是Windows的vhd。 你想在Legacy BIOS下启动Ventoy的vhd,使用memdisk :https://wiki.syslinux.org/wiki/index.php?title=MEMDISK  详情 回复 发表于 2025-10-13 13:51
回复

使用道具 举报

537#
发表于 2025-10-10 22:18:50 | 只看该作者
试着用了一下,不能启动
回复

使用道具 举报

536#
发表于 2025-9-14 20:53:55 | 只看该作者
学习了,谢谢。
回复

使用道具 举报

535#
发表于 2025-9-12 20:03:17 | 只看该作者
感谢分享。
回复

使用道具 举报

534#
发表于 2025-9-12 13:10:21 | 只看该作者
wintoflash 发表于 2025-9-12 09:45
那些是调试信息。

多谢!
回复

使用道具 举报

533#
 楼主| 发表于 2025-9-12 09:45:19 | 只看该作者
yanxsh 发表于 2025-9-11 23:06
在efi分区新建了ntload文件夹,把ntloader 和 initrd.cpio放了进来,win10vhd在/dev/sda5的ntfs分区,grub2 ...

那些是调试信息。
回复

使用道具 举报

532#
发表于 2025-9-11 23:06:33 | 只看该作者
在efi分区新建了ntload文件夹,把ntloader 和 initrd.cpio放了进来,win10vhd在/dev/sda5的ntfs分区,grub2.06 menuentry 如下:
menuentry "VHDwin10" {
search -s -f /efi/ntload/ntloader
if [ "${grub_platform}" = "efi" ]; then
chainloader /efi/ntload/ntloader initrd=/efi/ntload/initrd.cpio uuid=45A3C5FC05B9F081 vhd=/Win10-22H2-25G-20250501.vhdx
else
linux16 /efi/ntload/ntloader uuid=45A3C5FC05B9F081 vhd=/Win10-22H2-25G-20250501.vhdx
initrd16 /efi/ntload/initrd.cpio
fi;
}
可以启动vhd,但启动前一大堆输出,滚动太快,没截图,请问那里有错误?还需要完善。
多谢!

点评

那些是调试信息。  详情 回复 发表于 2025-9-12 09:45
回复

使用道具 举报

531#
发表于 2025-8-21 22:19:42 | 只看该作者
精华软件啊,非常不错呢
回复

使用道具 举报

530#
发表于 2025-8-21 19:27:34 来自手机 | 只看该作者
谢谢分享
回复

使用道具 举报

529#
发表于 2025-6-25 08:56:27 来自手机 | 只看该作者
感谢分享经验
回复

使用道具 举报

528#
 楼主| 发表于 2025-6-10 16:02:39 | 只看该作者
xiaoy 发表于 2025-6-10 15:13
感谢回复,不知道能不能解决这个问题,学校有国产机房想不破坏原统信系统上增加win10双系统启动,又要何 ...

ext4支持无损缩小分区。把ext4缩小,留出空间分个ntfs分区。
回复

使用道具 举报

527#
发表于 2025-6-10 15:13:06 | 只看该作者
wintoflash 发表于 2025-6-9 19:42
请仔细看帖子内容:

感谢回复,不知道能不能解决这个问题,学校有国产机房想不破坏原统信系统上增加win10双系统启动,又要何保持正版检查,又想上课用win10,想到用vhdwin10 g4e 双引导切换,老大能不能帮忙助力实现。

点评

ext4支持无损缩小分区。把ext4缩小,留出空间分个ntfs分区。  详情 回复 发表于 2025-6-10 16:02
回复

使用道具 举报

526#
 楼主| 发表于 2025-6-9 19:42:32 | 只看该作者
xiaoy 发表于 2025-6-9 17:19
有国产统信系统ext4的分区 若把win10.vhd放到这样的分区里,再用grub4dos for uefi 加ntloader 不知能不 ...

请仔细看帖子内容:
支持 FAT, NTFS, exFAT 文件系统 (VHD 不能位于 FAT 分区,老版本 Windows VHD 只能位于 NTFS 分区)

点评

感谢回复,不知道能不能解决这个问题,学校有国产机房想不破坏原统信系统上增加win10双系统启动,又要何保持正版检查,又想上课用win10,想到用vhdwin10 g4e 双引导切换,老大能不能帮忙助力实现。  详情 回复 发表于 2025-6-10 15:13
回复

使用道具 举报

525#
发表于 2025-6-9 17:19:53 | 只看该作者
有国产统信系统ext4的分区 若把win10.vhd放到这样的分区里,再用grub4dos for uefi 加ntloader 不知能不能正常引导进win10.vhd

点评

请仔细看帖子内容:  详情 回复 发表于 2025-6-9 19:42
回复

使用道具 举报

524#
发表于 2025-5-25 16:08:12 来自手机 | 只看该作者
做个记号
回复

使用道具 举报

523#
发表于 2025-4-16 16:09:38 | 只看该作者
非常好,支持
回复

使用道具 举报

522#
发表于 2025-4-11 15:48:28 来自手机 | 只看该作者
wintoflash 发表于 2025-4-11 09:28
pecmd可以用disp命令设置分辨率吧。你可以看看pecmd自带的文档。

pecmd disp w1366 h768 已解决,感谢指点!谢谢您!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2025-11-1 17:30

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表