无忧启动论坛

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

,,0000,0000,0000,

[复制链接]
跳转到指定楼层
1#
发表于 2008-7-2 16:41:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
,,0000,0000,0000,

[ 本帖最后由 kangyi 于 2010-7-18 11:34 编辑 ]
2#
发表于 2008-7-2 16:48:27 | 只看该作者
哦、原来是这样。收下了。
回复

使用道具 举报

3#
发表于 2008-7-2 17:53:00 | 只看该作者
好象太深了..接触不到...
回复

使用道具 举报

4#
发表于 2008-7-2 20:12:12 | 只看该作者
呵呵,一直没在意这个,还是楼主细心啊
回复

使用道具 举报

5#
发表于 2008-7-2 20:56:25 | 只看该作者
它里面的讲的是NTFS的Dirty Bit,那么FAT/FAT32的Dirty Bit在DPB的哪个具体位置呢?这个很关键。
回复

使用道具 举报

6#
发表于 2008-7-3 13:16:25 | 只看该作者
我来转帖一下,.免得二次链

走近文件系统系列二:探索Dirty Bit的奥秘
在微软知识库文章KB322275上看到如下的一段话:

The "dirty" bit is a bit in the boot sector (for FAT or FAT32 volumes), or in the MFT (for NTFS volumes), that is checked when Windows starts.

这说明,在FAT文件系统里,Dirty Bit在分区的引导扇区(Boot Sector)中指定;而在NTFS文件系统里,则是在MFT中指定(实际上是$Volume元数据文件)。

作为一名IT Pro,自然不仅仅满足于知道以上的结论。本着“绝知此事要躬行”的精神,本文介绍如何通过工具,找出在$Volume元数据文件中的哪个地方定义了这个Dirty Bit。

名词解释

什么是Dirty Bit?它实际上是文件系统的一个错误状态位,Windows启动时会根据这个状态位来判断文件系统是否出了故障,以确定是否要运行Chkdsk /F来进行磁盘修复。

行为差别

很多用户发现,同样是非法关机,重启时有些系统会自动进行磁盘检测(通常是FAT文件系统),而有些系统则照常启动(通常是NTFS文件系统)。

为什么?

原来不同的文件系统,对于Dirty Bit的设置方法有所区别,这种区别可以套用法律术语来类比:

(1) FAT相当于XXX方法体系,实行的是“有罪推定”。在写入数据前,首先假设文件系统是“有罪”的──设置Dirty Bit为1。只有确认数据操作完成以后,才将Dirty Bit设置为0,如果非法关机时,Dirty Bit可能还保留为1,则下次开机会自动进行磁盘扫描。

(2) NTFS相当于YYY法体系,实现的是“无罪推定”。只有出现严重的数据不一致,同时无法根据日志功能进行修复,这时候才会将Dirty Bit设置为1。

实验过程

1.工具箱

(1) Winhex:本文将用该工具查看、修改$Volume元数据文件。
      下载地址:
http://www.x-ways.net/winhex/index-m.html

(2) Fsutil:该命令行工具可以对文件系统进行全方位的管理,本文将用该工具管理NTFS文件系统的Dirty Bit设置,然后借助WinHex来获知磁盘数据的底层信息。
      Windows XP/2003自带,对于Windows 2000,可以直接借用XP下的工具。

2.实验步骤

由于Windows对NTFS的元数据文件进行保护,所以我们无法直接在Windows系统里访问$Volume,但是我们可以借助第三方磁盘工具Winhex绕开这个系统限制,来达到目的。

在这个实验里,我们借助Winhex访问NTFS卷的$Volume文件,以确认Dirty Bit到底对应$Volume文件的哪个地方。

(1) 用Winhex打开任意一个卷,例如D盘,即可看到D盘里的所有元数据文件,例如$MFT、$MFTMirr、$Volume等文件。双击其中的$Volume即可打开该文件。

(2) 大家知道,每个NTFS文件都是由若干属性所组成。$Volume 文件具有两个独有的属性,$VOLUME_NAME和$VOLUME_INFORMATION。其中卷标是由$VOLUME_NAME定义,而Dirty bit则是由$VOLUME_INFORMATION属性所定义的。$VOLUME_INFORMATION属性如下图所示,开头的值70H表示该属性的类别,offset 4的值28H定义该属性的长度,相当于十进制的40。


(3) 为了清楚的标识$VOLUME_INFORMATION属性,现将该属性单独截图如下。第三方最左侧的两个字节(offset为32-33)定义了NTFS文件系统的版本号,本例中的值为03 01,代表NTFS 3.1版(Windows XP是3.1版本,而Windows 2000则是3.0)。




(4) 为了找出Dirty Bit到底在哪里,我们可以借助Fsutil命令人为地制造一个Dirty Bit。在命令提示符下运行以下命令:

Fsutil dirty set D:

刷新Winhex的视图,可以看到$VOLUME_INFORMATION属性的值出现了变化,如下图所示

可以得出这样的猜想:offset 34的字节定义了NTFS文件系统的Dirty Bit设置情况,当该值为01时,代表NTFS文件系统设置了Dirty Bit。

3.逆向验证

为了证实这个结果,需要进行逆向验证。可以将$VOLUME_INFORMATION属性中Offset 34字节的值直接修改为01,看看是否相当于设置Dirty Bit的状态位。

(1) 直接在Winhex里修改Offset 34字节的值,将其设置为01,同时保存所做的设置。

(2) 然后在命令提示符下运行以下命令,查看Dirty Bit的设置状态:

Fsutil dirty query D:

出乎意料的是,命令查询的结果是“卷 - D: 没有损坏”,也就是说Fsutil命令并不认为文件系统设置了Dirty Bit。

(3) 单击开始→关闭计算机→重新启动,发现系统开始自动扫描。看来尽管Fsutil命令并没有认可我们的手动设置,但是实际还是生效的。

4.疑难解答

(1) 为什么Fsutil命令无法查询手动设置Dirty Bit?

可能的答案是,在系统Mount分区的时候,先将重要的元数据文件(包括$Volume)读到内存里,而Fsutil命令会从内存里(而不是磁盘里)读取Dirty Bit的设置情况。手动修改$Volume后,系统并没有重新将新的$Volume读入内存,所以Fsutil命令无法查询Dirty Bit的设置情况。

(2) 如何才能迫使系统重新读入元数据文件?

可以尝试在“磁盘管理”管理单元里删除该卷的盘符(本例为D:),然后重新恢复盘符。设置以后,Fsutil命令果然可以正确读取Dirty Bit的状态了。

(3) 手动设置Dirty Bit,重启系统后会自动运行Chkdsk /F,为什么会提示元数据文件$MFTMirr错误?

$MFTMirr保存着$MFT中前面四个文件记录,其中包括$Volume。前面的实验过程并没有同步修改$MFTMirr中的$Volume,导致两者记录不一致。

实用价值

当然,本文提到手动设置Dirty Bit的方法只是为了实验验证,并没有真正的应用价值,我们没有必要采用这种方法进行手动设置。

明明是正常关机,但是每次开机时会自动询问是否扫描磁盘。遇到这种问题,可以按照以下步骤进行处理(参考KB160963):

(1) 运行Fsutil dirty query DriveLetter命令,检查该磁盘是否设置了Dirty Bit。如果是的话,可能是硬盘本身的问题,请联系硬盘厂商或者计算机经销商进行检测。

如果需要防止系统自动检测标记Dirty Bit的卷,可以运行以下命令进行排除:

chkntfs /x DriveLetter

(2) 检查任务计划、启动项里有没有相应的加载项,有的话删除即可。

(3) 打开注册表编辑器,进入以下注册表项:

HKEY_LOCAL_MACHINE\SYSTEM\CURRENTCONTROLSET\CONTROL\Session Manager

检查其下的多字符串键值BootExecute,是否为类似以下的数值数据:

autocheck autochk /r \??\D:

如果是的话,删除其中/r \??\D:即可。

提示

在NTFS文件系统里,有一句很著名的话“everything on the disk is a file”,所有的文件系统数据,都是文件,包括MFT、引导扇区、甚至还有安全描述符等。

关于NTFS文件系统的元数据文件的描述,可以参考以下的微软官方文档:

http://www.microsoft.com/technet ... d-dac5418c5948.mspx

[ 本帖最后由 haiou327 于 2008-7-4 12:44 PM 编辑 ]
回复

使用道具 举报

7#
 楼主| 发表于 2008-7-3 20:41:24 | 只看该作者
原帖由 netwinxp 于 2008-7-2 08:56 PM 发表
它里面的讲的是NTFS的Dirty Bit,那么FAT/FAT32的Dirty Bit在DPB的哪个具体位置呢?这个很关键。

那篇文章开头就讲了fat的"dirty bit"在引导扇区里啊^^

有一次发现,fat32的分区,即使ghost恢复了,它还是要进行磁盘检查的,非常顽固^^,但ntfs分区就不会有这个现象(ntfs是在mft文件中指定,这个文件位于磁盘分区中,ghost恢复这个文件改变)
回复

使用道具 举报

8#
发表于 2008-7-4 00:33:18 | 只看该作者
有个问题,我的本本是惠普的V3169AU,系统使用惠普OEM的XP PRO,硬盘是东芝的,每次非正常关机,都不会出现CHECK disk。为什么会这样呢?是惠普的XP做了更改嘛?硬盘使用NTFS文件格式

[ 本帖最后由 miano 于 2008-7-4 12:35 AM 编辑 ]
回复

使用道具 举报

9#
发表于 2008-7-4 00:36:08 | 只看该作者
明白了:原来在这里有解释:
原来不同的文件系统,对于Dirty Bit的设置方法有所区别,这种区别可以套用法律术语来类比:

(1) FAT(删去若干字)实行的是“有罪推定”。在写入数据前,首先假设文件系统是“有罪”的──设置Dirty Bit为1。只有确认数据操作完成以后,才将Dirty Bit设置为0,如果非法关机时,Dirty Bit可能还保留为1,则下次开机会自动进行磁盘扫描。

(2) NTFS(删去若干字)实现的是“无罪推定”。只有出现严重的数据不一致,同时无法根据日志功能进行修复,这时候才会将Dirty Bit设置为1。

[为了不被拉掉服务器的网络线,对不住了]

[ 本帖最后由 netwinxp 于 2008-7-4 08:35 AM 编辑 ]
回复

使用道具 举报

10#
发表于 2008-7-4 00:49:39 | 只看该作者
请楼上修改帖子,使之不涉及政治,谢谢配合。
回复

使用道具 举报

11#
发表于 2008-8-4 13:25:06 | 只看该作者
原帖由 miano 于 2008-7-4 00:33 发表
有个问题,我的本本是惠普的V3169AU,系统使用惠普OEM的XP PRO,硬盘是东芝的,每次非正常关机,都不会出现CHECK disk。为什么会这样呢?是惠普的XP做了更改嘛?硬盘使用NTFS文件格式



查看一下你的注册表HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\BootExecute 值 是不是清空了.

如果值为空请改为如下
autocheck autochk *
bsmain



[ 本帖最后由 haiou327 于 2008-8-4 13:31 编辑 ]

check.jpg (102.83 KB, 下载次数: 32)

check.jpg
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2026-3-3 10:53

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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