无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
12
返回列表 发新帖
楼主: qj_tzy
打印 上一主题 下一主题

[已解决] 非常希望grub4dos的开发者增加对bios方式启动gpt分区系统的支持

  [复制链接]
31#
发表于 2014-8-28 17:53:08 | 只看该作者
不点 发表于 2014-8-23 09:37
我已经不适合再去学新知识了。我会在别的方面去学新知识,比如,数学啊,物理啊,历史啊,哲学啊,政治啊, ...

尝试编译了一个支持 GPT 分区的WEE,
修改了list_partitions的代码.尽量使用我自己了解的语句去写的.

测试发现可以正常访问GPT分区,但是有时候却不行,不知是什么原因.

测试,我是使用QEMU测试的,进入wee之后立即按C进入命令行,用find查找分区,可以正常使用.

然后直接输入一个root命令,不带任何参数,然后就会出现问题具体表现为最后一个分区不可用,使用hexdump查看了一下,发现这个分区的分区号变成了0XFFFF.

麻烦不点有空看看,是不是我写的代码哪里有问题.只修改了asm.s里面list_partition函数里面的标号9后面的代码.增加了对GPT分区的简单识别.

wee-2014-08-28.zip

223.49 KB, 下载次数: 5, 下载积分: 无忧币 -2

点评

看到您发布的支持gpt分区的WEE测试版,及您与 不点 大师 的对话,感觉安装在gpt分区中的wee 或 grldr,经您们的努力,将会在不久的将来推出。 因我的办公电脑使用的小于2TG的单硬盘,已经被我转换为GPT分区,我是  详情 回复 发表于 2014-8-28 23:51
回复

使用道具 举报

32#
发表于 2014-8-28 22:35:11 | 只看该作者
我只看到修改了的 asm.S 文件,看不到 diff 文件,所以也不能进行分析。我这里访问 google code 很难,似乎无法访问。

我觉得,不一定需要 WEE。

Wee 的硬件兼容性比 grub4dos 差很远。这些年,我们一直在更新 grub4dos,但没有更新 wee。原因是,有很多更新是以 C 语言的方式来更新的,而 wee 的大部分已经变成汇编了,所以,没有同步更新。

如果可用空间比较富裕,你最好直接改造 grldr,把它放在 GPT 的保留空间里(就像 MBR 磁道的 63 扇区那样的保留空间)。grldr 里面有很多 Linux 的文件系统驱动,其实都没什么用,可以删除,节约空间。PXE、ud 等,都可以删除。如果可用空间很多,那就不必精简了,直接将改造后的 grldr 嵌入 GPT 的保留空间里。

点评

diff文件 Index: asm.S =================================================================== --- asm.S (revision 115) +++ asm.S (working copy) @@ -10135,7 +10135,61 @@ movl %edi, %ebx 9:  详情 回复 发表于 2014-8-29 08:17
回复

使用道具 举报

33#
 楼主| 发表于 2014-8-28 23:51:10 | 只看该作者
chenall 发表于 2014-8-28 17:53
尝试编译了一个支持 GPT 分区的WEE,
修改了list_partitions的代码.尽量使用我自己了解的语句去写的.


看到您发布的支持gpt分区的WEE测试版,及您与 不点 大师 的对话,感觉安装在gpt分区中的wee 或 grldr,经您们的努力,将会在不久的将来推出。

我的办公电脑使用的小于2TG的单硬盘,已经被我转换为GPT分区,我是用xorboot+grub4dos启动安装的各个windows系统的。所以,以上新东西的推出,我感到由衷的高兴!
回复

使用道具 举报

34#
发表于 2014-8-29 08:17:52 | 只看该作者
不点 发表于 2014-8-28 22:35
我只看到修改了的 asm.S 文件,看不到 diff 文件,所以也不能进行分析。我这里访问 google code 很难,似乎 ...

diff文件

Index: asm.S
===================================================================
--- asm.S        (revision 115)
+++ asm.S        (working copy)
@@ -10135,7 +10135,61 @@
        movl        %edi, %ebx
9:

-        /* Read the MBR, or the boot sector of the extended partition.  */
+        movl        -16(%ebx), %eax
+        addl        -4(%ebx), %eax
+        call        101f
+        testl        %eax, %eax
+        jz        9f                        # return with failure
+
+        /* Check if it is valid.  */
+        movl        $(PART_TABLE_TMPBUF+446), %esi
+        cmpw        $0xAA55, 64(%esi)
+        jne        9f
+
+        cmpl        $0xff, ABS(EXT_C(current_slice))
+        je        100f
+        movl        $0xFF, ABS(EXT_C(current_slice))
+        cmpb        $0xee, 4(%esi)
+        jne        100f
+        movl        $1,%eax
+        call        101f
+        testl        %eax, %eax
+        jz        9f
+        movl        $PART_TABLE_TMPBUF,%esi
+        cmpl        $0x20494645,(%esi)
+        jne        9f
+        movl        72(%esi),%eax
+        movl        %eax,PART_TABLE_BUF + 0xC
+110:
+        movl        PART_TABLE_BUF + 0xC,%eax
+        incl        PART_TABLE_BUF + 0xC
+        call        101f
+        testl        %eax, %eax
+        jz        9f
+        movl        $PART_TABLE_TMPBUF,%esi
+        movl        $4,%ecx
+111:
+        movl        32(%esi),%eax
+        testl        %eax,%eax
+        jz 9f
+        stosl
+        subl        %eax,40(%esi)
+        movl        40(%esi),%eax
+        stosl
+        xorb        %al,%al
+        stosb
+        movb        $0xee,%al
+        stosb
+        incb        -4(%ebp)
+        movl        -4(%ebp), %eax
+        stosw
+        xorl        %eax,%eax
+        stosl
+        addl        $0x80,%esi
+        loop 111b
+        jmp 110b
+
+101:
        pushl        $0xedde0d90                # read
        pushl        $0                        # buf_hi
        pushl        $(PART_TABLE_TMPBUF)
@@ -10143,20 +10197,12 @@
        pushl        $(SECTOR_SIZE)
        pushl        $0                                # byte_offset
        pushl        $0                                # sector_hi
-        /* calculate the start sector number for read */
-        movl        -16(%ebx), %eax
-        addl        -4(%ebx), %eax
        pushl        %eax                                # sector
        pushl        ABS(EXT_C(current_drive))
        call        EXT_C(rawread)
        addl        $36, %esp
-        testl        %eax, %eax
-        jz        9f                        # return with failure
-
-        /* Check if it is valid.  */
-        movl        $(PART_TABLE_TMPBUF+446), %esi
-        cmpw        $0xAA55, 64(%esi)
-        jne        9f
+        ret
+100:
        pushl        %esi
        call        98f
        popl        %esi


首先尝试WEE,是因为我对比了一下,感觉WEE修改会简单一些,另外,GPT硬盘总是以LBA方式访问的,刚好WEE也符合这一条件.

还有GRLDR如果修改的话,不知道前16扇区还有没有空间加GPT分区代码.

wee_diff.zip

842 Bytes, 下载次数: 0, 下载积分: 无忧币 -2

回复

使用道具 举报

35#
发表于 2014-8-29 09:06:46 | 只看该作者
我也刚刚搜到一点 GPT 知识,发现 GPT 没有保留空间用于 BIOS 引导代码。因此,原则上讲,这个办法是行不通的,不具有一般性。

假如你能确定在微软的分区格式里面总是能够找到某个足够大的空闲空间可以利用,那你就有办法了。直接把 grldr 嵌入里面,然后在 MBR 第一扇区写一段汇编语言代码(可参照 wee 的第一扇区代码来写),加载这个 grldr 的扇区序列便可。grldr 本身不需要做任何改动。

因此,关键的关键是找到某个空闲的扇区序列,用来嵌入 grldr。如果有就容易、就小菜一碟;如果没有就没门、就不可能实现。

点评

实在不行的话只能考虑本贴#25的方案. http://bbs.wuyou.com/forum.php?mod=redirect&goto=findpost&ptid=337322&pid=2961266&fromuid=1025 其实GPT可用空是还是很多的, 1.分区间隙(一般情况下每个分区之前会有1  详情 回复 发表于 2014-8-29 10:32
对将grub4dos写入gpt的空闲空间,我不懂,是外行。但我想,能否把grldr的头(512b)写入gpt分区硬盘的0扇区,其余部分存放在esp分区的根目录或某指定目录下,启动时,由其在0扇区的头部来读取存放在esp分区中的其余部  详情 回复 发表于 2014-8-29 09:25
回复

使用道具 举报

36#
 楼主| 发表于 2014-8-29 09:25:32 | 只看该作者
不点 发表于 2014-8-29 09:06
我也刚刚搜到一点 GPT 知识,发现 GPT 没有保留空间用于 BIOS 引导代码。因此,原则上讲,这个办法是行不通 ...


对将grub4dos写入gpt的空闲空间,我不懂,是外行。但我想,能否把grldr的头(512b)写入gpt分区硬盘的0扇区,其余部分存放在esp分区的根目录或某指定目录下,启动时,由其在0扇区的头部来读取存放在esp分区中的其余部分来实现启动。我只是在想象,对此提个建议,不知可否。
回复

使用道具 举报

37#
发表于 2014-8-29 10:32:36 | 只看该作者
不点 发表于 2014-8-29 09:06
我也刚刚搜到一点 GPT 知识,发现 GPT 没有保留空间用于 BIOS 引导代码。因此,原则上讲,这个办法是行不通 ...

实在不行的话只能考虑本贴#25的方案.
http://bbs.wuyou.net/forum.php?m ... 66&fromuid=1025

其实GPT可用空是还是很多的,
1.分区间隙(一般情况下每个分区之前会有1MB左右的无用空间)
2.MS保留分区.

当然了以上空间的位置都是不固定的,所以目前也只能考虑#25的方案

写一个通用型的MBR引导代码,让它来引导指定扇区指定长度的代码.

另外如果不对GRLDR进行修改的话,虽然目前GRUB4DOS内部可以支持GPT分区,但是如果用NTLDR/BOOTMGR方式启动的话就会找不到GRLDR了.

点评

我给你发的短消息,收到了吗?  详情 回复 发表于 2014-8-29 13:36
回复

使用道具 举报

38#
发表于 2014-8-29 13:36:52 | 只看该作者
chenall 发表于 2014-8-29 10:32
实在不行的话只能考虑本贴#25的方案.
http://bbs.wuyou.net/forum.php?mod=redirect&goto=findpost&ptid ...

我给你发的短消息,收到了吗?

点评

已收到, 现在如果用WEE的MBR进行修改的话倒是很简单,只需要修改一两个地方就可以用这个MBR来加载GRLDR(在QEMU中测试通过) 只是WEE的MBR是只能使用LBA模式的,完美一点需要修改一下让它可以自动检测使用CHS/LBA  详情 回复 发表于 2014-8-29 14:09
回复

使用道具 举报

39#
发表于 2014-8-29 14:09:13 | 只看该作者
不点 发表于 2014-8-29 13:36
我给你发的短消息,收到了吗?

已收到,

现在如果用WEE的MBR进行修改的话倒是很简单,只需要修改一两个地方就可以用这个MBR来加载GRLDR(在QEMU中测试通过)

只是WEE的MBR是只能使用LBA模式的,完美一点需要修改一下让它可以自动检测使用CHS/LBA模式.

剩下的就是安装程序要考虑的问题了..

安装程序需要获取可用空间位置,并且GRLDR整个嵌入.

我的打算是写一个MBR代码..用来加载指定位置,长度的代码.

为了保险起见,
1.该MBR需要可以使用CHS或LBA模式访问以上位置.
2.允许指定两个或以上的代码位置,在MBR程序中通过简单的校验判断该位置的代码是否正常,正常的请就直接引导,否则换一个.



回复

使用道具 举报

40#
发表于 2014-8-29 14:46:31 | 只看该作者
如果运行于硬盘,并且是 GPT,那就不需要 CHS 了,因为 LBA 是肯定要支持的。

以后如果遇到封杀 LBA 的情况,再研究 CHS 模式也不迟。那时可以另外编译一个 CHS 模式的版本。

你首先研究一下空闲空间的特征,看看它的起始扇区有没有什么规律,以便 MBR 代码可以加载它。

比如说,假如起始扇区都是以 MB 来对齐的,那么挨个搜索就可以很快找到 GRLDR 了。总之,你需要找规律。

回复

使用道具 举报

41#
发表于 2014-8-29 23:53:12 来自手机 | 只看该作者
Gpt比mbr的可利用扇区多很多吧 现在分区都4k对齐  论坛上有对gpt结构非常了解的朋友
回复

使用道具 举报

42#
 楼主| 发表于 2014-8-30 13:08:36 | 只看该作者
chenall 发表于 2014-8-22 10:54
再次完善了一下,新的隐藏会顺便加上OEM属性,也就是不能手动分配盘符.

另外parttype作用在GPT分区上时, ...

若您能在百忙之中对 grub4dos-0.4.6a-2014-08-19版 支持gpt分区 的隐藏 等功能完善后发布,就非常感谢了,因我非常需要 同时支持gpt分区功能和含碎片文件仿真功能的grub4dos。
回复

使用道具 举报

43#
发表于 2014-8-31 15:37:04 | 只看该作者
grub4dos 0.4.6a分支代码已经同步更新


另外写了一段MBR代码,用于将来的GPT磁盘MBR引导GRLDR.

注: 这个代码直接写入到硬盘MBR上目前并不能直接启动,会显示错误提示.

MBR 的0x10-0x4F 是给安装程序使用的,用于写入要引导的代码位置(偷懒直接使用INT13扩展的DAP包),可以写入4个记录.一个不行可以跳到下一个.

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

DAP的前两个字节是对应的引导程序校验码(只检验第一个扇区)

一个例子:
C763 2B02 0000E007 22000000 00000000

C763 是 GRLDR第一个扇区的校验码(具体校验方法在参考源码), 2B02 就是0X22B 代表GRLDR文件占用的扇区数,,0000E007,,加载启动位置07E0:0000,22000000 00000000,GRLDR文件在磁盘中的起始扇区

对汇编比较熟的朋友,麻烦看一下代码有没有什么问题,没有问题的话需要再写一个安装程序(我只会写GRUB4DOS环境下的安装程序)

weembr.zip

3.19 KB, 下载次数: 4, 下载积分: 无忧币 -2

点评

我没看代码。但从你描述的设计思路,我觉得有毛病。 以下是我的思路。 上上之策,是设计一个不变的 MBR,它能搜索到满足一定条件的扇区序列,然后加载执行它。 这需要了解要加载的扇区序列的特点,比如说,  详情 回复 发表于 2014-8-31 17:14
grub4dos 0.4.6a分支代码同步更新-2014-8-31已下载,谢谢!  详情 回复 发表于 2014-8-31 16:45
谢谢,您说的grub4dos 0.4.6a更新在哪下载,在http://grub4dos.chenall.net/上没有。  详情 回复 发表于 2014-8-31 16:15
回复

使用道具 举报

44#
 楼主| 发表于 2014-8-31 16:15:26 | 只看该作者
chenall 发表于 2014-8-31 15:37
grub4dos 0.4.6a分支代码已经同步更新

谢谢,您说的grub4dos 0.4.6a更新在哪下载,在http://grub4dos.chenall.net/上没有。
回复

使用道具 举报

45#
 楼主| 发表于 2014-8-31 16:45:57 | 只看该作者
chenall 发表于 2014-8-31 15:37
grub4dos 0.4.6a分支代码已经同步更新

grub4dos 0.4.6a分支代码同步更新-2014-8-31已下载,谢谢!

回复

使用道具 举报

46#
发表于 2014-8-31 17:14:53 | 只看该作者
chenall 发表于 2014-8-31 15:37
grub4dos 0.4.6a分支代码已经同步更新

我没看代码。但从你描述的设计思路,我觉得有毛病。

以下是我的思路。

上上之策,是设计一个不变的 MBR,它能搜索到满足一定条件的扇区序列,然后加载执行它。

这需要了解要加载的扇区序列的特点,比如说,起始扇区号都为 2 的 n 次方,并且限定扇区序列符合 grldr 格式,这样,只要挨个搜索起始扇区序号为 2 的 n 次方的扇区序列,便可找到 GRLDR 了。

再比如说,虽然安装时不能保证一定安装到 2 的 n 次方处,但能够保证安装到磁盘开头的 2M 以内,这样,搜索的时候,可以逐个搜索所有位于 2M 以内的扇区(从而找到 grldr 的扇区序列)。搜索 2M 的速度是很快的。

如果实在没有什么规律,那就只好记录安装位置了。此时只需要一个位置便可,不需要 4 个。

所以,首要的是研究可用空闲空间的特点。只要发现了规律,那么写代码是很简单的一件事。

因此我的看法是,你先不要忙着写代码。先看看可用的空间都位于何处?有没有规律可循?

点评

不同的分区软件有不同的结果,除非是人为控制,否则看起来没有什么规律. 另外要说相对安全一点儿空间就是MSR和ESP分区空间了.可以放在空间尾部, 但是这两个分区也是不一定会存在的. 固定位置的唯一的缺点就是  详情 回复 发表于 2014-8-31 17:42
回复

使用道具 举报

47#
发表于 2014-8-31 17:42:15 | 只看该作者
不点 发表于 2014-8-31 17:14
我没看代码。但从你描述的设计思路,我觉得有毛病。

以下是我的思路。

不同的分区软件有不同的结果,除非是人为控制,否则看起来没有什么规律.

另外要说相对安全一点儿空间就是MSR和ESP分区空间了.可以放在空间尾部,

但是这两个分区也是不一定会存在的.

固定位置的唯一的缺点就是文件不能移动或修改,改了就不能用了.
所以我上面预留了4个位置,基本上可以保证启动起来.

点评

再前进一步,深入思考一下:假如不存在 MSR 和 ESP 分区,你有什么办法吗? 你这 4 个位置究竟在哪里?就是说,哪里有这些空闲的空间可以被你利用? 还有一个问题:你怎么保证,“起始扇区校验通过,但后续扇  详情 回复 发表于 2014-8-31 18:42
回复

使用道具 举报

48#
发表于 2014-8-31 18:42:21 | 只看该作者
chenall 发表于 2014-8-31 17:42
不同的分区软件有不同的结果,除非是人为控制,否则看起来没有什么规律.

另外要说相对安全一点儿空间就 ...

再前进一步,深入思考一下:假如不存在 MSR 和 ESP 分区,你有什么办法吗?

你这 4 个位置究竟在哪里?就是说,哪里有这些空闲的空间可以被你利用?

还有一个问题:你怎么保证,“起始扇区校验通过,但后续扇区被破坏” 的情况永不发生?一旦发生,必然死机。

我认为,最好是赖上微软,就是,死皮赖脸地赖上微软,假定它总是有 MSR 和 ESP 分区,这样就可以找到空闲的空间了。如果没有这样的分区,就拒绝安装。


还有一个方案,就是干脆写个 .efi,取代微软的 .efi。这个 .efi 会搜索 grldr,如果找到,就启动 grldr,如果找不到,就启动微软原来的 .efi。

点评

用.efi就不是BIOS模式了就不能用GRUB4DOS了. 找空间的话其实让安装程序来完成,应该不难,首先上用户指定一个或多个启动文件,首先把这些文件的位置信息记录下来,再顺便找一下看看有没有没有用到的空间,有的话就复制  详情 回复 发表于 2014-9-1 08:33
请问, 用efi格式的程序的话, 目前有可靠办法可以转回BIOS模式吗? 我觉得假定有esp分区比较方便, 黑苹果就不用考虑便捷性了, 手动折腾黑苹果的人也不会嫌固定一个文件多麻烦  发表于 2014-8-31 18:56
回复

使用道具 举报

49#
发表于 2014-8-31 20:53:19 | 只看该作者
我准备在 grldr 头部(也就是 grldr.mbr)增加自举代码,启动 gpt 分区。 这样可由 ntldr 或 bootmgr 加载 grldr。

我看到目前 grldr 只支持 4 字节的 gpt 分区起始逻辑扇区,是否应当支持 8 字节?

点评

我觉得暂时可以不用考虑8字节支持,这个如果改了,大部份外部命令都会出现问题.  发表于 2014-9-1 08:24
支持考虑8字节  发表于 2014-8-31 23:08
回复

使用道具 举报

50#
发表于 2014-8-31 22:17:01 来自手机 | 只看该作者
整个.efi就前途无量    绝大多数分区都会有2m空间 , 这是主流

点评

g4d不是不兼容efi吗? 是要从efi跳回去bios模式?  发表于 2014-8-31 23:08
回复

使用道具 举报

51#
发表于 2014-9-1 08:33:08 | 只看该作者
不点 发表于 2014-8-31 18:42
再前进一步,深入思考一下:假如不存在 MSR 和 ESP 分区,你有什么办法吗?

你这 4 个位置究竟在哪里 ...

用.efi就不是BIOS模式了就不能用GRUB4DOS了.

找空间的话其实让安装程序来完成,应该不难,首先上用户指定一个或多个启动文件,首先把这些文件的位置信息记录下来,再顺便找一下看看有没有没有用到的空间,有的话就复制一份过去并在MBR上记录相应位置作为备用.

至于"起始扇区校验通过,但后续扇区被破坏”,是有这个可能,但是除非是病毒或人为的,一般情况下很少碰到.但是碰到这个情况也不是没有办法启动,

有4个位置,如果4个位置都有记录的话,第一个坏了,下次启动时可以使用其它记录来启动
回复

使用道具 举报

52#
发表于 2014-9-1 15:55:32 | 只看该作者
是否可以由 MBR 的引导代码查找 grldr.mbr ,然后由它加载 grldr,进而从菜单启动程序。grldr.mbr 只有 8Kb,看看放在哪里合适,grldr 则可放在任意分区。

点评

GPT的MBR只有一个扇区的 用GRLDR.MBR的话放不下,即然放下了,还是一样要通过MBR来定位这个GRLDR.MBR.再让GRLDR.MBR定位GRLDR.这样一来反而更麻烦.  详情 回复 发表于 2014-9-1 16:25
回复

使用道具 举报

53#
发表于 2014-9-1 16:25:07 | 只看该作者
本帖最后由 chenall 于 2014-9-1 16:27 编辑
2011yaya2007777 发表于 2014-9-1 15:55
是否可以由 MBR 的引导代码查找 grldr.mbr ,然后由它加载 grldr,进而从菜单启动程序。grldr.mbr 只有 8Kb ...


GPT的MBR只有一个扇区的

用GRLDR.MBR的话放不下,即然放下了,还是一样要通过MBR来定位这个GRLDR.MBR.再让GRLDR.MBR定位GRLDR.这样一来反而更麻烦.


我目前使用前面的那个MBR代码引导GRLDR成功,并且由于有设定了多个位置,测试的时候我使用了3个GRLDR位置,首先第一个是在分区里面可见的,另一个是放在分区间隙,还有一个放在其它分区.

第一次启动正常,删除第一个分区里面的GRLDR,启动时会有提示,按键后自动引导第二个GRLDR.

点评

你做的这个工作同样也很棒。我也很赞成。一步一步前进吧。我帮不上大忙了,但我会继续支持和关注。  详情 回复 发表于 2014-9-1 18:15
回复

使用道具 举报

54#
发表于 2014-9-1 16:57:22 | 只看该作者
如果 grldr 不连续会有问题。
是否可以由 MBR 启动 ESP,在 ESP 安装 grldr 启动代码?

点评

这是一个新思路,值得尝试。从 MBR 引导 ESP 的引导扇区,而由 ESP 的引导扇区继续引导 GRLDR,这样也不错。赞一个。  详情 回复 发表于 2014-9-1 18:10
回复

使用道具 举报

55#
发表于 2014-9-1 18:10:24 | 只看该作者
2011yaya2007777 发表于 2014-9-1 16:57
如果 grldr 不连续会有问题。
是否可以由 MBR 启动 ESP,在 ESP 安装 grldr 启动代码?

这是一个新思路,值得尝试。从 MBR 引导 ESP 的引导扇区,而由 ESP 的引导扇区继续引导 GRLDR,这样也不错。赞一个。
回复

使用道具 举报

56#
发表于 2014-9-1 18:15:05 | 只看该作者
chenall 发表于 2014-9-1 16:25
GPT的MBR只有一个扇区的

用GRLDR.MBR的话放不下,即然放下了,还是一样要通过MBR来定位这个GRLDR.MBR. ...

你做的这个工作同样也很棒。我也很赞成。一步一步前进吧。我帮不上大忙了,但我会继续支持和关注。
回复

使用道具 举报

57#
发表于 2014-9-8 21:07:52 | 只看该作者
由于gpt的分区表安全性比较高,所以修改的话会比较麻烦,并且需要读取所有分区表重新计算对应CRC(需要读取至少66个扇区太概32KB数据),还要计算4个CRC值,
DAP的前两个字节是对应的引导程序校验码(只检验第一个扇区)

请教chenall,我只知道 gpt 分区表头有 2 个 CRC,应当与备份里的 CRC 是相同的吧?
在 MBR 里增加引导代码,需要 CRC 吗?在哪个字节体现?
在某处放置 grldr.mbr,是否也需要 CRC?

点评

2个CRC,第一个CRC与备份的是不一样的. 第二个CRC是分区表的CRC,所以和备份的是一样的 只要没有改动到分区表的内容不需要重新计算CRC(分区表内容一般是第2个扇区开始总共32个扇区)这些扇区里面不可以放其它东西  详情 回复 发表于 2014-9-9 12:13
gpt硬盘的备份分区表和开头的分区表内容不全一样, 2个gpt header扇区的Backup LBA和Primary LBA交换了. 0扇区的mbr引导代码没有CRC吧, 也就个510字节偏移的55AA  发表于 2014-9-8 22:56
回复

使用道具 举报

58#
发表于 2014-9-9 12:13:30 | 只看该作者
2011yaya2007777 发表于 2014-9-8 21:07
请教chenall,我只知道 gpt 分区表头有 2 个 CRC,应当与备份里的 CRC 是相同的吧?
在 MBR 里增加引 ...

2个CRC,第一个CRC与备份的是不一样的.

第二个CRC是分区表的CRC,所以和备份的是一样的

只要没有改动到分区表的内容不需要重新计算CRC(分区表内容一般是第2个扇区开始总共32个扇区)这些扇区里面不可以放其它东西.

回复

使用道具 举报

59#
发表于 2014-10-10 22:20:20 | 只看该作者
进来学习了,谢谢提供!
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-9-22 06:58

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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