无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
楼主: 朱玛12345678
打印 上一主题 下一主题

[原创] 全球首发!【技术实战】在exFAT分区中安装并启动Windows系统

    [复制链接]
871#
 楼主| 发表于 2024-4-24 18:43:42 | 只看该作者
ko20010214 发表于 2024-4-24 07:04
我的安装环境:
1. Windows版本选择的22H2 V19045,实验版本19041.vb_release.191206-1406 (不忘初心 精简 ...

你理解错了,替换已签名的exFAT驱动是用来解决老版本系统启动时间过长的问题,跟能否支持VHD(X)启动没有任何关系,这是两码事。
另外正常情况下Legacy和UEFI都是可以启动系统的,如果只有其中一个能启动那你就得去检查一下自己的分区和引导设置是否有问题了。

点评

GTP格式的硬盘(前面一个EXFAT分区,后面一个EFI分区(FAT32)),EFI分区里有boot 目录及BCD文件,根目录下有 bootmgr , 能用Legacy启动系统吗? 我用winntsetup 查看 EFI分区时,只显示 EFI PART 是绿色的。  详情 回复 发表于 2024-4-25 07:33
回复

使用道具 举报

872#
发表于 2024-4-25 07:33:47 | 只看该作者
本帖最后由 ko20010214 于 2024-4-26 23:35 编辑
朱玛12345678 发表于 2024-4-24 18:43
你理解错了,替换已签名的exFAT驱动是用来解决老版本系统启动时间过长的问题,跟能否支持VHD(X)启动没有 ...

GPT格式的硬盘(前面一个EXFAT分区,后面一个EFI分区(FAT32)),EFI分区里有boot 目录及BCD文件,根目录下有 bootmgr  ,  能用Legacy启动系统吗?
我用winntsetup 查看 EFI分区时,只显示 EFI PART 是绿色的。
用bootice查看硬盘时,主引导分区是空白的,没装任何引导程序…… 两个分区的引导记录都是BOOTMGR。

请问一下如何才能 用Legacy方式启动这块硬盘。 是要重建MBR吗? GPT格式硬盘有这玩意吗?

点评

http://bbs.wuyou.net/forum.php?mod=viewthread&tid=415995&mobile=no  详情 回复 发表于 2024-4-25 14:14
回复

使用道具 举报

873#
 楼主| 发表于 2024-4-25 14:14:33 | 只看该作者
ko20010214 发表于 2024-4-25 07:33
GTP格式的硬盘(前面一个EXFAT分区,后面一个EFI分区(FAT32)),EFI分区里有boot 目录及BCD文件,根目 ...

http://bbs.wuyou.net/forum.php?m ... 15995&mobile=no

点评

文章已拜读。方法很巧妙,不过得要两块硬盘…… 有没有可以直接搞定的?通过编辑扇区的方法?  详情 回复 发表于 2024-4-25 22:01
回复

使用道具 举报

874#
发表于 2024-4-25 22:01:14 | 只看该作者
朱玛12345678 发表于 2024-4-25 14:14
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=415995&mobile=no

文章已拜读。方法很巧妙,不过得要两块硬盘……
有没有可以直接搞定的?通过编辑扇区的方法?

点评

http://chenall.net/post/grub4dos_umbr  详情 回复 发表于 2024-4-25 22:22
回复

使用道具 举报

875#
 楼主| 发表于 2024-4-25 22:22:03 | 只看该作者
ko20010214 发表于 2024-4-25 22:01
文章已拜读。方法很巧妙,不过得要两块硬盘……
有没有可以直接搞定的?通过编辑扇区的方法?

http://chenall.net/post/grub4dos_umbr

点评

chenall真是个天才。  发表于 2024-4-28 00:37
回复

使用道具 举报

876#
发表于 2024-4-26 01:34:39 | 只看该作者
磁盘地址数据包 Disk Address Packet (DAP)
    DAP 是基于绝对扇区地址的, 因此利用 DAP, Int13H 可以轻松地逾
越 1024 柱面的限制, 因为它根本就不需要 CHS 的概念.
    DAP 的结构如下:

    struct DiskAddressPacket
    {
        BYTE PacketSize;     // 数据包尺寸(16字节)
        BYTE Reserved;       // ==0
        WORD BlockCount;     // 要传输的数据块个数(以扇区为单位)
        DWORD BufferAddr;    // 传输缓冲地址(segment:offset)
        QWORD BlockNum;      // 磁盘起始绝对块地址
    };

    PacketSize 保存了 DAP 结构的尺寸, 以便将来对其进行扩充. 在
目前使用的扩展 Int13H 版本中 PacketSize 恒等于 16. 如果它小于
16, 扩展 Int13H 将返回错误码( AH=01, CF=1 ).
    BlockCount 对于输入来说是需要传输的数据块总数, 对于输出来说
是实际传输的数据块个数. BlockCount = 0 表示不传输任何数据块.
    BufferAddr 是传输数据缓冲区的 32 位地址 (段地址:偏移量). 数据
缓冲区必须位于常规内存以内(1M).
    BlockNum 表示的是从磁盘开始算起的绝对块地址(以扇区为单位),
与分区无关. 第一个块地址为 0. 一般来说, BlockNum 与 CHS 地址的关系
是:
    BlockNum = cylinder * NumberOfHeads +
               head * SectorsPerTrack +
               sector - 1;

    其中 cylinder, head, sector 是 CHS 地址, NumberOfHeads 是磁盘
的磁头数, SectorsPerTrack 是磁盘每磁道的扇区数.
    也就是说 BlockNum 是沿着 扇区->磁道->柱面 的顺序记数的. 这一顺
序是由磁盘控制器虚拟的, 磁盘表面数据块的实际排列顺序可能与此不同
(如为了提高磁盘速度而设置的间隔因子将会打乱扇区的排列顺序).
回复

使用道具 举报

877#
发表于 2024-4-26 01:36:51 | 只看该作者
UMBR 相关说明

0x8            4个字节        UMBR标志
0xC            1个字节        UMBR版本号
0x10-0X3F    48个字节    用户定义的启动区
0x40-0X4F    16个字节    保留的启动区(当用户定义的启动都失败时启动的分区)
0x40-0x1B7                启动代码.
启动区说明,目前0x10-0x4F,每一个启动项占用16个字节,为了编程方便使用的是和DiskAddressPacket一样的格式.

    WORD CRC;            //启动项校验
  WORD BlockCount;  // 启动代码块数(以扇区为单位)
  DWORD BufferAddr;  // 传输缓冲地址(segment:offset),也就是启动地址
  QWORD BlockNum;   // 启动代码在磁盘上的位置(LBA)
BufferAddr 的值为0x07c00000(07c0:0000)时固定为PBR引导,启动时会自动修改0x7c1c处的值.其它值直接从该位置启动.

校验方法: 使用的是简单的XOR校验,最多校验127个扇区,按4个字节依次XOR得到的最后结果,再把低16位和高16位进行一次XOR得到最后的结果作为检验值.

具体的校验代码可以参考源码有ASM/C语言两个版本.
回复

使用道具 举报

878#
发表于 2024-4-26 08:19:32 | 只看该作者
用户定义的启动区 , 这个要手动去定义的话有什么方法吗?
照作者的意思是,在grub4dos环境下,运行umbr,会自动将UMBR启动扇区写入原MBR的位置,然后这四个启动文件的DAP会自动计算出来并写入启动区。
可我没这个环境,要手动计算出我要启动的文件所在的DAP,有公式吗? 源码我看不懂,本来看源码应该能知道怎么算这个DAP的。
回复

使用道具 举报

879#
发表于 2024-4-26 12:39:09 | 只看该作者
本帖最后由 ko20010214 于 2024-4-26 15:47 编辑

LBA(相对扇区号)方式:以磁盘第一个扇区(0柱面、0磁头、1扇区)作为LBA的0扇区,后面的扇区依次编号


其实这个LBA, 就是傻傻地向后数...
可以在diskgenius里查看.
回复

使用道具 举报

880#
发表于 2024-4-26 21:24:14 | 只看该作者
如果可以支持Xp的启动就无敌了
回复

使用道具 举报

881#
发表于 2024-4-27 03:59:42 来自手机 | 只看该作者
学习到了
回复

使用道具 举报

882#
发表于 2024-4-28 00:14:12 | 只看该作者
本帖最后由 ko20010214 于 2024-4-28 00:36 编辑

成功从Legacy启动EXFAT分区里的VHD(EXFAT格式)。
不从UEFI启动,这个选项就没用,提示“此功能仅在UEFI环境下可用”

C盘为虚拟盘,VHD, EXFAT格式。
D盘为GPT格式的 EXFAT分区。
H盘本来是GPT格式的EFI分区(FAT32格式),因为用分区助手改小了一点容量,变成普通的FAT32盘了。


windows10.vhd , 位于EXFAT分区的D盘。


这就是神奇的UMBR。
是它,创造了这个奇迹。
在一块GPT硬盘上从Legacy方式启动了一个位于EXFAT分区的VHD(Exfat格式)的64位windows10.
这就是朱玛说的双EXFAT。
VHD(X)模式与传统模式的安装过程大致相同,但要注意选择的系统必须使用Win10 v1809以上版本。
VHD(X)启动目前仅支持双NTFS或双exFAT组合,不支持外NTFS+里exFAT或外exFAT+里NTFS组合

回复

使用道具 举报

883#
发表于 2024-4-28 00:40:02 | 只看该作者
本帖最后由 ko20010214 于 2024-4-28 00:46 编辑


就是这样实现的。
话说grub 的命令行真难用……不熟悉的人找命令都找不到。
我都不知道试了多少次,想知道你加载了几块硬盘吗?用find命令。而不是ls命令。
想知道怎么进目录吗? 好像没这个功能。
想知道怎么获取find这个命令的帮助信息吗?  find --help?  find /?  find --?  help --find  都不是。
就是find help.

点评

UMBR相关问题建议问开发者@chenall GRUB的话还可以找@2011yaya2007777  详情 回复 发表于 2024-4-28 08:08
回复

使用道具 举报

884#
 楼主| 发表于 2024-4-28 08:08:08 | 只看该作者
ko20010214 发表于 2024-4-28 00:40
就是这样实现的。
话说grub 的命令行真难用……不熟悉的人找命令都找不到。
我都不知道试了多少次,想 ...

UMBR相关问题建议问开发者@chenall
GRUB的话还可以找@2011yaya2007777

点评

不敢去问。完全是门外汉,搭不上话。自己摸索就是了。只不过吐嘈一下摸黑时的感觉罢了。  发表于 2024-4-28 15:37
回复

使用道具 举报

885#
发表于 2024-4-28 15:39:31 | 只看该作者
本帖最后由 ko20010214 于 2024-4-29 00:03 编辑

UMBR(Universal Master Boot Record),是一个简单的通用型的MBR引导程序,只支持LBA模式(BIOS不支持LBA的无法使用,目前除了很老的机子大部份都有支持).

使用创新的方案,和磁盘分区格式无关所以可以安装到MBR或GPT分区格式下,目前GPT磁盘一般都是配合EFI来启动,有了它就可以在BIOS模式下直接启动GPT磁盘上的系统(需要系统有支持)了.

[使用方法]
目前该程序只能在GRUB4DOS环境下运行,请在最新版本GRUB4DOS环境下使用.

参数介绍:

umbr [-d=D] [-p=P] [--test] [file1] [file2] [file3]
    -d=D            指定要安装的磁盘默认是当前ROOT的磁盘
    -p=D            启动失败后要启动的分区默认是第一个分区.
    --test            测试模式,不写入磁盘,加这个参数会进入安装效果测试.
    file1-3            可以指定三个启动文件位置以防止启动失败.

注: 这个filex    可以是任意GRUB4DOS可以识别的文件格式(必须连续存放).比如(hdx,y)/path/file或(hdx)xxxx+yyyy/(hdx,y)xxx+yyy之类的.
    file1-file3 必须在同一磁盘上并且和-d指定的磁盘一致.
    file1-2    也可以是一是一个PBR比如(hd0,3)+1
file1是主启动文件,如果检验失败了会再尝试file2...
说明:

由于是直接使用绝对扇区位置来启动的,所以和文件系统无关.
使用指定文件也会被转换为绝对扇区位置,正常情况下改名不影响启动,删除了如果文件内容没有被覆盖之前也是可以启动的.
启动失败时会暂停并等待按键,这时按任意键可以尝试下一个.
一个实用的例子:

磁盘使用的是GPT格式,GRLDR有两个备份分别是ESP分区(hd0,0)/grldr和普通分区(hd0,3)/boot/grub/grldr,并且在分区间隙(hd0)6554433+63处有一个WEE63

装有系统的分区是(hd0,1)

这时就可以通过UMBR默认加载ESP分区的GRLDR或普通分区上的GRLDR,失败了再尝试WEE63,还是失败就直接启动(hd0,1)分区.

进入GRUB4DOS执行以下命令就可以了

umbr -d=0 -p=1 (hd0,3)/boot/grub/grldr (hd0,0)/grldr (hd0)6554433+63
也可以默认wee63,通过wee63来控制启动过程,因为本例wee63是写到分区间隙的,出问题的几率比较小

umbr -d=0 -p=1 (hd0)6554433+63 (hd0,3)/boot/grub/grldr (hd0,0)/grldr
当然了也可以直接启动指定分区而不通过其它引导程序,如下默认直接启动(hd0,1)上的系统,如果该分区被分区软件调整过启动失败了,会尝试启动wee,最后尝试启动grldr

umbr -d=0 -p=1 (hd0,1)+1 (hd0)6554433+63 (hd0,0)/grldr
[其它参考]
UMBR 相关说明

0x8            4个字节        UMBR标志
0xC            1个字节        UMBR版本号
0x10-0X3F    48个字节    用户定义的启动区
0x40-0X4F    16个字节    保留的启动区(当用户定义的启动都失败时启动的分区)
0x40-0x1B7                启动代码.
启动区说明,目前0x10-0x4F,每一个启动项占用16个字节,为了编程方便使用的是和DiskAddressPacket一样的格式.

    WORD CRC;            //启动项校验
  WORD BlockCount;  // 启动代码块数(以扇区为单位)
  DWORD BufferAddr;  // 传输缓冲地址(segment:offset),也就是启动地址
  QWORD BlockNum;   // 启动代码在磁盘上的位置(LBA)
BufferAddr 的值为0x07c00000(07c0:0000)时固定为PBR引导,启动时会自动修改0x7c1c处的值.其它值直接从该位置启动.

校验方法: 使用的是简单的XOR校验,最多校验127个扇区,按4个字节依次XOR得到的最后结果,再把低16位和高16位进行一次XOR得到最后的结果作为检验值.

具体的校验代码可以参考源码有ASM/C语言两个版本.
WIN下安装UMBR
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=427013
umbr 测试(适用于BIOS+GPT磁盘的MBR程序)
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=374547&extra=&page=1
[求助] umbr的安装使用
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=423508


其中:在第三篇里找到一个回复贴,里面跳到另一个帖子里
http://bbs.wuyou.net/forum.php?m ... &fromuid=586362

再定睛一看,那个帖子是我发的。 2020-9-1 就在问这个事了,怎么在GTP硬盘装G4D,当时应该是只是想装G4D就完事了,没想说从Legacy方式启动GTP硬盘里的系统吧。

兜兜转转又回来了!


在Umbr 测试这个帖子里, 有一个附件可下载。
http://bbs.wuyou.net/forum.php?mod=attachment&aid=NTAwOTM4fGIxOTM1YTdjfDE3MTQzMTk5MzJ8MTgxMHwzNzQ1NDc%3D
这个有详细的说明。
包括怎么在window下手工添加UMBR到0扇区,怎么计算引导区的那一行的各种参数。
我当时第一时间想到的问题这里都有答案的。


回复

使用道具 举报

886#
发表于 7 天前 | 只看该作者
现在就是不知道这个出错的原因是什么,然后这个信息(129)又是代表什么
回复

使用道具 举报

887#
发表于 7 天前 来自手机 | 只看该作者
本帖最后由 ko20010214 于 2024-4-29 00:15 编辑

为啥出错了? 解释一下,
第一个引导文件,我是选择的原版的bootx64.efi, (因为我装的G4E把原版的bootx64的名字占用了)我才特意改名为boot64.efi,不是我少写了X。
就这个出错了! 而且重启后无法引导也无法试着加载第二个引导文件。

是不是这个文件不是连续存放的?我去哪保证它一定是连续存放的啊。
还是因为无法直接启动原版的bootx64.efi? 好像我想启动bootmgfw2.efi 也是同样的错误。

然后这个129又是啥啊。 129>=1590656 是啥意思, 第三行的129又是啥?

IMG_20240428_221348.jpg (37.61 KB, 下载次数: 0)

IMG_20240428_221348.jpg
回复

使用道具 举报

888#
发表于 7 天前 | 只看该作者
学习长姿势了
回复

使用道具 举报

889#
发表于 6 天前 | 只看该作者
居然实现了,奇迹啊
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-5-6 07:22

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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