无忧启动论坛

标题: grub4dos能否判断某一分区是NTFS还是FAT32格式 [打印本页]

作者: qj_tzy    时间: 2012-4-10 20:13
标题: grub4dos能否判断某一分区是NTFS还是FAT32格式
grub4dos能否判断某一分区是NTFS还是FAT32格式

如题,请各位网友指点,谢谢!
作者: xiaoy    时间: 2012-4-10 22:00
parttype  应该满足要求
作者: sratlf    时间: 2012-4-11 14:36
checkrange 0x7 parttype && echo current is ntfs ! checkrange 0xb,0xc parttype && echo current is fat32
作者: fujianabc    时间: 2012-4-11 15:54
exFAT分区也是0x7,还有UDF和HPFS也是0x07,所以0x07尚不足以判断NTFS
作者: sratlf    时间: 2012-4-11 16:17
标题: 回复 #4 fujianabc 的帖子
简单的可以这样  除了parttype就是geometry或者root命令  那样处理起来就麻烦很多了
作者: qj_tzy    时间: 2012-4-11 17:43
还有,当FAT32及NTFS分区设为EISA隐藏分区,其分区类型编号均为0x12,所以,好象也不能判断。
作者: sunsea    时间: 2012-4-11 18:16
G4D是可以直接看到那个$MFT的!所以可以直接判断NTFS了
作者: 不点    时间: 2012-4-11 18:24
标题: 回复 #7 2011czmxbb52 的帖子
这个答复很牛B。佩服一下。
作者: sunsea    时间: 2012-4-11 19:20
原帖由 不点 于 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, 下载次数: 98)

未命名.jpg

作者: qj_tzy    时间: 2012-4-11 20:13
标题: 回复 #9 2011czmxbb52 的帖子
这倒是个简单而实用的方法,但如果有用户在FAT32分区建立了$mft等特殊目录,该法就失效了,不知还有其他方法没有?
作者: 不点    时间: 2012-4-11 21:00
内部有个变量 fsys_type 可以确定当前的文件系统类型。不过这个变量没有放在用户可以访问的固定变量区域。

将来统一整理 fsys_table 数组以后,就可以 “一个萝卜一个坑” 地把 fsys_type 和 对应的文件系统都固定下来,并且放在用户可访问的固定变量区域。
作者: yjd    时间: 2012-4-11 22:10
内部有个变量 fsys_type 可以确定当前的文件系统类型。不过这个变量没有放在用户可以访问的固定变量区域。

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

好消息。。
作者: qj_tzy    时间: 2012-4-11 22:22
标题: 回复 #11 不点 的帖子
确定是个好消息,很期待。
作者: sunsea    时间: 2012-7-29 11:28
原帖由 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 编辑 ]
作者: xiaoy    时间: 2012-8-2 12:54
帖一个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=




欢迎光临 无忧启动论坛 (http://bbs.wuyou.net/) Powered by Discuz! X3.3