可以把硬盘坏扇区修复工具扇区改的大一些么

VC开发(4)
Windows系统提供了文件系统,通常应用程序读写文件都是调用CreateFile函数来实现,不会直接读写磁盘数据,但某些特殊目的中,我们需要读取磁盘扇区数据,查看是否包含某些关键字,并且有可能擦除这些关键字(类似于Winhex和diskgenius),在编写一个磁盘扇区修改的程序时,应注意以下几点:
1、获取磁盘句柄
获取磁盘句柄依然用CreateFile函数,例子如下:
HANDLE hDev=CreateFile("\\\\.\\C:",GENERIC_READ,FILE_SHARE_READ || FILE_SHARE_WRITE,0,OPEN_EXISTING,0,0);//打开逻辑磁盘
HANDLE hDev=CreateFile("\\\\.\\PHYSICALDRIVE0",GENERIC_READ,FILE_SHARE_READ || FILE_SHARE_WRITE,0,OPEN_EXISTING,0,0);//打开物理磁盘
注意,对于系统盘(C盘)来说,即使我们在CreateFile的第二个参数传入GENERIC_READ,第三个参数要设置为FILE_SHARE_READ || FILE_SHARE_WRITE,由于系统在运行时要不停的读写系统盘(因为页文件保存在系统盘),如果第三个参数不这样设置,很可能获取句柄失败。
2、在Win7及以上版本中,应用层只能通过CreateFile获取读磁盘扇区的权限,是无法直接修改磁盘扇区的。在调用WriteFile之前需调用DeviceIOControl传入FSCTL_LOCK_VOLUME将卷锁定,然后可以写扇区。但MSDN上对FSCTL_LOCK_VOLUME的介绍有这么一句话:“Locks a volume if it is not in use. If the specified volume is a system volume or contains a page file, the operation fails.”所以,在Win7以上,想要读写系统磁盘的扇区,恐怕只能在内核层去实现了。
当然,如果想在应用层修改系统盘扇区,可以在程序实现后,运行winPE系统,在winPE环境下运行程序,这样就可以修改原来系统盘的扇区。这样做调试程序非常麻烦,winPE下没有开发环境,只能打印出足够多的信息判断问题出在哪,然后切换回原来的开发环境进行修改。
3、在各个版本中,应用层都可以调用CreateFile获取读磁盘扇区的权限,只要第三个参数设置正确都能成功。但在读扇区的时候要注意,通常磁盘扇区的大小都是512个字节,每次读取的数量必须是512的整数倍。
写磁盘扇区也是这样,必须读取一个或几个扇区的值,修改其中某几个字节,然后把数据重新写回去。
4、调用ReadFile读取扇区之后,文件位置会往后移,如果直接调用WriteFile修改数据,修改的已不是刚刚读取的数据。举个例子,比如调用ReadFile从0x1000处读取512个字节,那么文件句柄指向的文件位置已经移到了0x1200处,如果此时调用WriteFile把读取的512个字节写回去,从0x1200起的512字节就会被覆盖,这一点千万要注意!
为了解决这个问题,就需要用到SetFilePointer函数。
SetFilePointer(hDev,-512,NULL,FILE_CURRENT);
5、注意SetFilePointer函数的用法
SetFilePointer函数的第二个参数和第三个参数是有符号数,负数表示向文件开始的位置移动,正数表示向文件结尾的位置移动
文件的大小用字节表示,一个32位数最多只能表示4GB的文件位置,因此SetFilePointer函数的第二个参数和第三个参数合起来表示一个64位有符号数
如果已知扇区索引,如何根据扇区索引定位到对应的文件位置呢?
DWORD dwI//表示扇区索引
LARGE_INTEGER
distance.LowPart =dwIndex*512;
distance.HighPart =(dwIndex*512)&&32;
SetFilePointer(hDev,distance.LowPart,&distance.HighPart,FILE_BEGIN);
这样写就不需要考虑第三个参数是否传入NULL了。
6、磁盘扇区扫描的细节
现在电脑硬盘的容量都很大,动辄1TB、2TB,折算成扇区就更多了。在进行磁盘扇区的扫描时,如果一个一个扇区读取的话,效率很低,全盘扫描需要几小时甚至几十个小时,提高扫描效率很有必要。方法有以下两个:
每次调用ReadFile读取多个扇区,比如64个或者128个
采用多线程的方法,每个线程中都调用ReadFile,但需要注意线程同步的问题
扇区扫描时,还可能出现关键字跨扇区的问题。比如搜索”hello”这个关键字,可能出现”he”在一个扇区的最后两个字节,”llo”在下一个扇区的前三个字节,解决这个问题,笔者想到的方法有两种:
每次调用ReadFile读取64个扇区,然后调用SetFilePointer往文件开始方向移动一个扇区
用两个循环队列,其中一个每次调用ReadFile读取64个扇区,另一个每次调用ReadFile读取63个扇区,这样可能会有疏漏
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:5398次
排名:千里之外
原创:26篇
(1)(8)(5)(2)(4)(3)(9)网上一些个人觉得好的文章链接(1)
硬盘性能调优,说道:Outer tracks contain more linear storage area.
&&&&看到哦这我就纳闷了,为啥呢?我的概念里面每个磁道的扇区数都是相等的啊,因为硬盘要控制角速度相等,单位时间里面磁臂掠过的扇区数应该是相等的。以前课本都是这么讲的啊,说是外圈的存储密度要低于内圈的,但是外圈磁道包含的磁介质要明显多于内圈的,难道废弃不用?书上是这么解释的,说是空闲的空间填充了控制信号,不用的空间填写了gap,算空白区域。这就更纳闷了,第一点调优的书上说外圈的存储密度要高于内圈的,另一点是:For
a given rotational speed, read more data per second on outer tracks.转速相同,外圈怎么可能多读东西呢?扇区数一样,每扇区512字节,数据大小也是一样。支持这个的有效证明是fdisk -l,一看,明明有一个“每磁道扇区数”的数值在概要说明的部分摆着呢。
&&&&包括百度百科和网上搜到的信息来看,都跟老板教科书观点相同,每磁道扇区数相同。那调优的书上教导我们“外圈的读取速度快,要将频繁访问的分区部署在磁盘的外侧柱面上”,这不见鬼了么?再翻IBM的调优的书,明明白白写着“当今大多数硬盘驱动器的盘片在外侧磁道上封装的扇区数要多于内侧磁道”,又找了找,原来磁盘的寻址技术改变了,为了减少浪费,真的是外侧磁道的扇区数多而内测磁道的扇区数少,现在每磁道扇区数自是一个换算平均值。这也是为什么机械硬盘在测试处理大量数据的吞吐率不断下降的原因,因为处理到内圈的数据时要多次移动移动机械臂,产生更多的延时。
&&&&其实想想也是,磁盘的存储密度不断增加,外圈的长度要大大长于内圈的长度,如果每磁道扇区数相等,那么整个磁盘上有大量面积的存储单元会被浪费。就像一个扇子的表面,我们只用了以内周长为边的一个矩形面积,剩下的都浪费,这是不可能的,工业界也是绝对不会允许这种事情存在的。
&&&&那道理就明白了,我们看到的fdisk里面的柱面的显示结果也是经过换算的结果,不是真正写道分区表里面的结果!
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:4734次
排名:千里之外硬盘分区您了解多少?编辑手把手教你
1硬盘分区时遇到的烦心事  【PConline 评测】硬盘分区,看似简单的一个操作,却蕴含着大学问。每款新硬盘在出厂后均默认处于未分区状态,用户装系统、存储数据前必须要分区。那对于&硬盘分区&您了解多少呢?分区方式带来哪一些弊病呢?SSD固态硬盘分区又需要注意什么呢?今天我们就来探讨一下,&硬盘分区&那点事!硬盘分区您了解多少?编辑手把手教你&硬盘分区常见疑问1:C盘分30-40G就行了,没必要分太多?  相信一些网友都有这样的记忆,装新电脑时,把C盘分配容量尽量少,D盘或者后面的E、F尽量多。在XP时代,几乎无人都这么干,以至于Win7、Win8时代也延续了这种传统。为C盘装系统时,分个30或40GB就认为足够了。使用到一段时间后,C盘就告急,经常得花时间去清理C盘的垃圾,搞到最后不得不重装系统,麻烦事一堆。硬盘分区常见疑问2:硬盘分区,分得越多越好,方便数据管理?  有一些网友将&管理学&的思维运用到分区里,硬盘各个区职位、职责要明确,比如1TB的硬盘,要分100G存照片,100G存电影,100G存工作资料,100G存苍老师,100G存陈老湿&&虽然这个例子有点极端,但代表着一部分为硬盘分区的思维,分得越多越好,更方便于数据管理,事实真是如此吗?硬盘分区常见疑问3:SSD分好区,装好系统,性能为什么损失了?  新买回来的SSD,分好各个区,也已经装好系统了,顺利开机,但一开机后发现,原本SSD的读写性能损失严重啊,这是神马情况?我以前使用的机械硬盘也是用同样的方法分区啊,性能不见损失啊?为什么SSD就不行呢?  下面,带着上面的疑问,小编结合实例,再结合自身竟然探讨什么样的分区配置较好。2编辑手把手教你分区实例教程,装系统前,如何分区:  分区其实有很多软件和很多方法可选,这次介绍的是小编比较常用的分区方法,用WindowsPE分区。小编选择的下面未必是最好,但是个人觉得非常实用的。&加载WinPE  小编之所以用这种分区方法是因为简单明了,操作/提示不复杂,分区完成后可以直接在PE里装系统。&  进入PE界面后,对着计算机点右键,选择管理。  进入计算机管理界面后,点击左边一列菜单的&磁盘管理&。如果是新硬盘,这时会弹出一个对话框,让你选择&MBR&或者&GPT&,绝大部分情况下选择&MBR&即可,除非你要创建一个超过2TB的分,这个会在文章最后特别介绍。分配C盘容量&  关于C盘究竟多大才合适,小编在下一页会结合自身经验谈谈。&  格式化时分配单元大小建议手动选择4096,这样无论你的WINPE是什么版本都可以让磁盘4kb对齐了。标记活动分区&  分区完成后一定要记得将分区标为活动分区,既激活分区。不然装好系统后开始都会提示boot failure。&  一切完成后,磁盘会标注状态良好。&  接着就可以装系统了,为了兼容性小编建议无论是WIN7还是WIN8都是用纯净安装版安装。另外,若激活分区+安装完系统后开机仍显示boot failure,可以再进入WINPE使用PE自带的第三方磁盘工具和引导区修复工具修复。第三方软件:DiskGenius进行分区  用PE装系统时,可用使用自带的分区工具&DiskGenius&进行分区,分区的方法跟上面系统自带的分区基本一样,选择分区时一定记得勾选&对齐到下列扇区数的整数倍&,也就是我们常说的SSD 4K分区对齐。那什么是4K对齐?后面提及。3机械硬盘与SSD分区时应注意的事硬盘分区的注意事项:1、C盘要分大一些  相信一些老网友都有这样的记忆,装新电脑时,把C盘分配容量尽量少,D盘或者后面的E、F尽量多。在XP时代,几乎无人不这么干,一方面因为XP占用空间的确很小(只有4-5G),另一方面,在XP时代硬盘容量都不大,160G-320G。500G,1TB或以上容量成为主流,也只是近几年的事。C盘分个20-30G,E/F盘分大,在XP时代的确可以这么干。可现在微软都放弃XP了,大部分机器都逐渐开始升级到win7及Win8,显然这种分区配置已经不合时宜。  现在装个WIN7 32位都得占用约10多G的空间,如果算上系统休眠,系统还原临时文件存放和其他常用软件,显然20-30G是不够用的。除了上述空间占用之外,日常应用多多少少都会占用C盘,导致C盘空间越来越小。而且,每到装软件的时候都得改目录,实在烦人,更有一些应用例如office,改了目录也无用,照样会把一些程序装进C盘。因此在大容量的背景下,为何还要把C盘分小呢?机械硬盘如何分配C盘容量:  关于C盘究竟多大才合适,办公室用台式机1T机械硬盘做主硬盘,小编结合自身经验谈谈机械硬盘如何分配C盘容量:  小编台式机装的是WIN7 64位系统,1T西数蓝盘做主硬盘,C盘(系统盘)分配131G,D盘(程序盘)300G,E盘(仓库盘)500G(强迫症,为了让除C盘外的分区为整数)。平时办公,经常用到各种软件和专业应用软件,桌面文件比较多,占用容量也多,长时间都懒得整理&&此时C盘使用了65.3G。所以131G 的C盘也是有压力的,更别说是30-40G 容量的C盘。  当然,每个人的情况不一样,对于机械硬盘而言,C盘建议在60-80G以上,如果像小编这种经常性装一些软件在C盘,工作时摆在桌面文件又多,又懒得整理,那C盘的分区直接上100G以上吧。超大容量硬盘分区时(如3TB/4TB),注意GPT与MBR格式&MBR or GPT?&  前面提到的,当新硬盘接入计算机,打开磁盘管理时会提示让你选择MBR或者GPT,这两个到底有什么区别呢?复杂的大家不需要记,注意以下这几点就行了:1、装XP必须MBR2、MBR不支持2TB以上的分区3、如果你买了个容量在3TB以上的硬盘,并把它们分配一个独立分区,必须选择GPT。如果选错了怎么办?可以看以下教程:固态硬盘的分区:1、SSD分区要少分 如120G就分一个区到两个区即可,60G就直接分一个区  小编笔记本装的是WIN7 64位系统,128G SSD做主硬盘,C盘分配69.1G,D盘分区50G。所有常用软件(各种浏览器,各种视频播放器客户端,office2013,迅雷,iphone助手,360等等),专业应用软件(MyEclipse 10,PhotoShop,LightRoom,VMware 10,WinXP Mode等)全部安装在C盘,桌面还有一大堆各种各样的文件,结果C盘还能剩下8G多。  SSD容性价比贵,没能像机械硬盘分区时这么&豪爽&,对于60/120G SSD选择一到两个分区即可。2、分区时,一定要保证4K对齐  一般情况下,新硬盘分区时,记得把分配单元大小选成4096即可(WIN7版本以上的PE默认值是4096,其他系统不是,因此小编再次提醒大家,为免出错手动选择4096)。为什么4K对齐如此重要:  我们知道机械硬盘的读写操作一直是以扇区为单位,以前每个扇区的尺寸都是512字节,直到近年来,大容量的机械硬盘的扇区尺寸提高至4096字节(我们所说的4KB),而电脑文件系统(FAT、NTFS等),一直都习惯以512字节的扇区单位来操作硬盘。  而SSD的读写操作不同机械硬盘,SSD读写的最小单位叫&页&(常见尺寸为4KB,实际视具体颗粒而定),闪存颗粒不允许像机械硬盘一样覆盖写入。因此在有数据的地方要写入新数据,就需要先进行擦除操作,而擦除的最小单位是块(每个块都由很多个页组成)。  传统的分区偏移尺寸一直是从磁盘的第63个扇区(63X512B=31.5KB)开始,因此第一个用户数据的前4KB,都肯定是存放在系统&逻辑扇区&的31.5KB~35.5KB之间,在SSD上,这样就会导致所有数据都横跨在2个页之间,从上面SSD的特性可以知道,这种情况必然导致SSD的性能受严重影响(特别是随机性能),因为每次的写入操作在SSD上都变成了读-擦-写操作。如果装完系统才想起来,可以先看看磁盘有没有4k对齐,方法有很多种,最直接简单的方法是下载一个AS SSD Benchmark软件来检测。  第二行绿色显示ok,说明4kb已对齐。如果显示红色bad,说明没有齐。如果不想下软件,直接开始运行misinfo32看分区偏移量也行,不过要开多一个计算机除以4096始终有点麻烦。  4K对齐对于SSD来说非常重要,我们测试证明,4K对齐与非4K对齐下,SSD的性能差距百分比在53%左右。也就是说,如果您的SSD不进行4K对齐,性能损失近一半。4K不对齐的情况下,AS SSD Benchmark软件的左上角同样会提示&BAD&的警示字眼。用了一段时间后,发现4K不对齐如何补救呢?&  如果不幸显示bad,不要紧有补救方法。如果是刚装系统,小编建议大家,重新进PE把分区重新格式化(有损对齐)再装系统,省心省事又快捷。如果用了一段时间才发现没对齐,这时就要用专用软件进行无损对齐了。小编比较喜欢用Paragon.Alignment.Tool,通用性比较强。&  软件装好后打开,点next会检测硬盘是否4kb。&&  第一个框选&Do not protect&,最下面把勾打上。&&  绿色表示4kb已对齐,黄色表示可操作。勾上需要对齐的磁盘,再点Align Partition就可以撒手不管了。系统会自动操作,中间会重启进入对其界面。所需时间视磁盘里文件多少而定。东西多,时间相应得长。&&  无论是机械硬盘还是固态硬盘,4kb对其都很有必要,对磁盘性能提升有巨大帮助。特别是SSD,4kb对齐与否更关乎固态硬盘的使用寿命。&&  总结:其实小编想和大家分享的是,C盘既不能像以前那样小,也没必要超出70G(除非有特殊用途),60-70G的C盘目前是比较合适的。其他分区就因人而异了,不少高清/动漫发烧友4TB一个分区,小编一邪恶的宅男同学就收藏了近20TB的X漫&&好吧,各位网友如果有更好更直接的分区方法或经验不妨及时提出,小编会及时更新。
DIY硬件图赏
DIY论坛帖子排行
最新资讯离线随时看
聊天吐槽赢奖品}

我要回帖

更多关于 硬盘扇区损坏 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信