无忧启动论坛

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

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

    [复制链接]
871#
 楼主| 发表于 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
回复

使用道具 举报

872#
发表于 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
回复

使用道具 举报

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

http://chenall.net/post/grub4dos_umbr

点评

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

使用道具 举报

874#
发表于 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 是沿着 扇区->磁道->柱面 的顺序记数的. 这一顺
序是由磁盘控制器虚拟的, 磁盘表面数据块的实际排列顺序可能与此不同
(如为了提高磁盘速度而设置的间隔因子将会打乱扇区的排列顺序).
回复

使用道具 举报

875#
发表于 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语言两个版本.
回复

使用道具 举报

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

使用道具 举报

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

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


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

使用道具 举报

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

使用道具 举报

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

使用道具 举报

880#
发表于 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组合

回复

使用道具 举报

881#
发表于 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
回复

使用道具 举报

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

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

点评

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

使用道具 举报

883#
发表于 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扇区,怎么计算引导区的那一行的各种参数。
我当时第一时间想到的问题这里都有答案的。


回复

使用道具 举报

884#
发表于 2024-4-29 00:04:28 | 只看该作者
现在就是不知道这个出错的原因是什么,然后这个信息(129)又是代表什么
回复

使用道具 举报

885#
发表于 2024-4-29 00:06:49 来自手机 | 只看该作者
本帖最后由 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, 下载次数: 168)

IMG_20240428_221348.jpg
回复

使用道具 举报

886#
发表于 2024-4-29 23:07:33 | 只看该作者
学习长姿势了
回复

使用道具 举报

887#
发表于 2024-4-30 13:33:11 | 只看该作者
居然实现了,奇迹啊
回复

使用道具 举报

888#
发表于 2024-5-6 22:36:19 | 只看该作者

谢谢分享
回复

使用道具 举报

889#
发表于 2024-5-7 07:20:32 来自手机 | 只看该作者
牛啊牛啊
回复

使用道具 举报

890#
发表于 2024-5-7 08:12:40 | 只看该作者
感谢分享,学习了!
回复

使用道具 举报

891#
发表于 2024-5-7 09:33:27 | 只看该作者
谢谢分享
回复

使用道具 举报

892#
发表于 2024-5-15 08:11:38 来自手机 | 只看该作者
感谢分享!
回复

使用道具 举报

893#
发表于 2024-5-15 10:48:19 | 只看该作者
感谢!辛苦了!
回复

使用道具 举报

894#
发表于 2024-5-16 15:52:39 | 只看该作者

作为技术探讨,很不错!
回复

使用道具 举报

895#
发表于 2024-5-17 13:56:58 | 只看该作者
能力的体现范围,即是创新和多种解决方案。
回复

使用道具 举报

896#
发表于 2024-5-26 08:39:52 来自手机 | 只看该作者
学习一下
回复

使用道具 举报

897#
发表于 2024-6-3 11:29:14 | 只看该作者
感谢分享
回复

使用道具 举报

898#
发表于 2024-6-14 08:23:29 | 只看该作者
回复

使用道具 举报

899#
发表于 2024-6-15 12:55:04 来自手机 | 只看该作者
感谢分享
回复

使用道具 举报

900#
发表于 2024-6-16 11:02:54 来自手机 | 只看该作者
谢谢分享
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-22 22:51

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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