无忧启动论坛

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

[求助] grub4dos能否判断某一分区是NTFS还是FAT32格式

[复制链接]
跳转到指定楼层
1#
发表于 2012-4-10 20:13:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
grub4dos能否判断某一分区是NTFS还是FAT32格式

如题,请各位网友指点,谢谢!
2#
发表于 2012-4-10 22:00:54 | 只看该作者
parttype  应该满足要求
回复

使用道具 举报

3#
发表于 2012-4-11 14:36:21 | 只看该作者
checkrange 0x7 parttype && echo current is ntfs ! checkrange 0xb,0xc parttype && echo current is fat32
回复

使用道具 举报

4#
发表于 2012-4-11 15:54:13 | 只看该作者
exFAT分区也是0x7,还有UDF和HPFS也是0x07,所以0x07尚不足以判断NTFS
回复

使用道具 举报

5#
发表于 2012-4-11 16:17:19 | 只看该作者

回复 #4 fujianabc 的帖子

简单的可以这样  除了parttype就是geometry或者root命令  那样处理起来就麻烦很多了
回复

使用道具 举报

6#
 楼主| 发表于 2012-4-11 17:43:43 | 只看该作者
还有,当FAT32及NTFS分区设为EISA隐藏分区,其分区类型编号均为0x12,所以,好象也不能判断。
回复

使用道具 举报

7#
发表于 2012-4-11 18:16:50 | 只看该作者
G4D是可以直接看到那个$MFT的!所以可以直接判断NTFS了
回复

使用道具 举报

8#
发表于 2012-4-11 18:24:07 | 只看该作者

回复 #7 2011czmxbb52 的帖子

这个答复很牛B。佩服一下。
回复

使用道具 举报

9#
发表于 2012-4-11 19:20:42 | 只看该作者
原帖由 不点 于 2012-4-11 18:24 发表
这个答复很牛B。佩服一下。

if exist (x,x)/$MFT echo This is NTFS!
有图为证
x为硬盘号和分区号

[ 本帖最后由 2011czmxbb52 于 2012-4-11 19:22 编辑 ]

未命名.jpg (58.17 KB, 下载次数: 99)

未命名.jpg
回复

使用道具 举报

10#
 楼主| 发表于 2012-4-11 20:13:26 | 只看该作者

回复 #9 2011czmxbb52 的帖子

这倒是个简单而实用的方法,但如果有用户在FAT32分区建立了$mft等特殊目录,该法就失效了,不知还有其他方法没有?
回复

使用道具 举报

11#
发表于 2012-4-11 21:00:09 | 只看该作者
内部有个变量 fsys_type 可以确定当前的文件系统类型。不过这个变量没有放在用户可以访问的固定变量区域。

将来统一整理 fsys_table 数组以后,就可以 “一个萝卜一个坑” 地把 fsys_type 和 对应的文件系统都固定下来,并且放在用户可访问的固定变量区域。
回复

使用道具 举报

12#
发表于 2012-4-11 22:10:14 | 只看该作者
内部有个变量 fsys_type 可以确定当前的文件系统类型。不过这个变量没有放在用户可以访问的固定变量区域。

将来统一整理 fsys_table 数组以后,就可以 “一个萝卜一个坑” 地把 fsys_type 和 对应的文件系统都固定下来,并且放在用户可访问的固定变量区域。

好消息。。
回复

使用道具 举报

13#
 楼主| 发表于 2012-4-11 22:22:46 | 只看该作者

回复 #11 不点 的帖子

确定是个好消息,很期待。
回复

使用道具 举报

14#
发表于 2012-7-29 11:28:10 | 只看该作者
原帖由 qj_tzy 于 2012-4-11 20:13 发表
这倒是个简单而实用的方法,但如果有用户在FAT32分区建立了$mft等特殊目录,该法就失效了,不知还有其他方法没有?

还想起一个方法:检查PBR。
首先检查分区开头的第4-7个字节,如果是NTFS这个字串就检查是否存在$MFT,同时成立就判定为NTFS
然后不成立就检查偏移(相对于分区开头)0x52-0x56是否为FAT32(FAT16和FAT12的签名在偏移0x36,如果遇到直接跳过JMP指令检查),如果成立再检查开头3个字节是否为EB 58 90,如果同时成立就判定为FAT32
exFAT跟NTFS一样,只不过只要分区开头的第4-7个字节是EXFAT就行了
代码:(以当前分区为例)

  1. !BAT
  2. set fssign=
  3. dd if=()+1 of=(md)0x20000+1
  4. cat --skip=3 --length=4 (md)0x20000+1 | set fssign=
  5. if /i "%fssign%"=="NTFS" goto :ntfschk
  6. if /i "%fssign%"=="EXFAT" && echo %@root%'s Filesystem is exFAT! && exit
  7. goto :fatchk

  8. :fatchk
  9. cat --skip=0x52 --length=5 (md)0x20000+1 | set fssign=
  10. if /i "%fssign%"=="FAT32" && goto :fat32chk
  11. cat --skip=0x36 --length=5 (md)0x20000+1 | set fssign=
  12. if /i "%fssign%"=="FAT16" && echo %@root%'s Filesystem is FAT16! && exit
  13. if /i "%fssign%"=="FAT12" && echo %@root%'s Filesystem is FAT12! && exit

  14. :fat32chk
  15. cat --length=3 --hex (md)0x20000+1 | set /A fssign=
  16. if /i "%fssign%"=="0xEB5890" && echo %@root%'s Filesystem is FAT32! && exit
  17. exit 1

  18. :ntfschk
  19. if exist ()\$MFT echo echo %@root%'s Filesystem is NTFS! && exit
  20. exit 1
复制代码

请多多指点!谢谢!

[ 本帖最后由 2011czmxbb52 于 2012-7-29 17:56 编辑 ]
回复

使用道具 举报

15#
发表于 2012-8-2 12:54:10 | 只看该作者
帖一个S版主的检测代码

root %syspart% > (md)0x210+1
cat --locate=\x20 --replace=\n (md)0x210+1
cat --locatei="type\nis" (md)0x210+1 > nul
calc %?% + 8 > nul
cat --skip=%@retval% (md)0x210+1 | set systype=
set systype=%systype:~,-1%
set syspart=
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-12-1 11:38

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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