物理损坏扇区产生原因扇区和逻辑扇区(相对扇区)的关系

文件系统中的逻辑块、物理块和扇区之间的关系
原文链接:
block由一个或多个sector组成,文件系统中最小的操作单位;OS的虚拟文件系统从硬件设备上读取一个block,实际为从硬件设备读取一个或多个sector。对于文件管理来说,每个文件对应的多个block可能是不连续的;block最终要映射到sector上,所以block的大小一般是sector的整数倍。不同的文件系统block可使用不同的大小,操作系统会在内存中开辟内存,存放block到所谓的block buffer中。在Ext2中,物理块的大小是可变化的,这取决于在创建文件系统时的选择,之所以不限制大小,也正体现了Ext2的灵活性和可扩充性。通常,Ext2的物理块占一个或几个连续的扇区,显然,物理块的数目是由磁盘容量等硬件因素决定的。
具体文件系统所操作的基本单位是逻辑块,只在需要进行I/O操作时才进行逻辑块到物理块的映射,这显然避免了大量的I/O操作,因而文件系统能够变得高效。逻辑块作为一个抽象的概念,它必然要映射到具体的物理块上去,因此,逻辑块的大小必须是物理块大小的整数倍,一般说来,两者是一样大的。
通常,一个文件占用的多个物理块在磁盘上是不连续存储的,因为如果连续存储,则经过频繁的删除、建立、移动文件等操作,最后磁盘上将形成大量的空洞,很快磁盘上将无空间可供使用。因此,必须提供一种方法将一个文件占用的多个逻辑块映射到对应的非连续存储的物理块上去,Ext2等类文件系统是用索引节点解决这个问题的。
一组请求的字节到物理块的映射过程示意图。
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!什么是硬盘的第0号扇区?
[问题点数:40分,结帖人eclipse_2]
本版专家分:129
2010年10月 C/C++大版内专家分月排行榜第一
CSDN今日推荐
本版专家分:37064
2008年 总版技术专家分年内排行榜第一
2009年 总版技术专家分年内排行榜第四
2009年2月 总版技术专家分月排行榜第一2009年1月 总版技术专家分月排行榜第一2008年11月 总版技术专家分月排行榜第一2008年10月 总版技术专家分月排行榜第一2008年9月 总版技术专家分月排行榜第一2008年8月 总版技术专家分月排行榜第一2008年7月 总版技术专家分月排行榜第一2008年6月 总版技术专家分月排行榜第一2008年5月 总版技术专家分月排行榜第一2008年4月 总版技术专家分月排行榜第一
2008年12月 总版技术专家分月排行榜第二2008年3月 总版技术专家分月排行榜第二2008年2月 总版技术专家分月排行榜第二
本版专家分:37064
2008年 总版技术专家分年内排行榜第一
2009年 总版技术专家分年内排行榜第四
2009年2月 总版技术专家分月排行榜第一2009年1月 总版技术专家分月排行榜第一2008年11月 总版技术专家分月排行榜第一2008年10月 总版技术专家分月排行榜第一2008年9月 总版技术专家分月排行榜第一2008年8月 总版技术专家分月排行榜第一2008年7月 总版技术专家分月排行榜第一2008年6月 总版技术专家分月排行榜第一2008年5月 总版技术专家分月排行榜第一2008年4月 总版技术专家分月排行榜第一
2008年12月 总版技术专家分月排行榜第二2008年3月 总版技术专家分月排行榜第二2008年2月 总版技术专家分月排行榜第二
本版专家分:129
2010年10月 C/C++大版内专家分月排行榜第一
本版专家分:363
2012年5月 专题开发/技术/项目大版内专家分月排行榜第三
本版专家分:37064
2008年 总版技术专家分年内排行榜第一
2009年 总版技术专家分年内排行榜第四
2009年2月 总版技术专家分月排行榜第一2009年1月 总版技术专家分月排行榜第一2008年11月 总版技术专家分月排行榜第一2008年10月 总版技术专家分月排行榜第一2008年9月 总版技术专家分月排行榜第一2008年8月 总版技术专家分月排行榜第一2008年7月 总版技术专家分月排行榜第一2008年6月 总版技术专家分月排行榜第一2008年5月 总版技术专家分月排行榜第一2008年4月 总版技术专家分月排行榜第一
2008年12月 总版技术专家分月排行榜第二2008年3月 总版技术专家分月排行榜第二2008年2月 总版技术专家分月排行榜第二
匿名用户不能发表回复!|
CSDN今日推荐VC、Linux、vxWorks读写物理扇区小结
直接上程序:
1. Windows下的VC:
HANDLE hDevice = CreateFile("\\\\.\\I:", GENERIC_READ|GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL, OPEN_EXISTING, 0, NULL
if (hDevice == INVALID_HANDLE_VALUE)
printf("打开磁盘错误\n");
DWORD bytesread = 0;
unsigned char Buffer[1000] = {0};
int SectorNumber=0;
//for (int SectorNumber=0; SectorNumber&100; SectorNumber++)
SetFilePointer (hDevice, SectorNumber*512, 0, FILE_BEGIN);
ReadFile (hDevice, Buffer, 512, &bytesread, NULL);
memset(Buffer, 0x35, 512);
SetFilePointer (hDevice, SectorNumber*512, 0, FILE_BEGIN);
WriteFile (hDevice, Buffer, 512, &bytesread, NULL);
上面的CreateFile函数的第一个参数,是C: ,D:类似的盘符
2. vxWorks读扇区:参考mkboot.c源程序得到
char lbaSectorZero[1024] = {0};
ATA_RAW ataRaw = {0};
ataRaw.cylinder
ataRaw.head
ataRaw.sector
ataRaw.pBuf
= (char *)lbaSectorZ
ataRaw.nSecs
ataRaw.direction
= O_RDONLY;
ataRawio (0, 0, &ataRaw);
for(line=0; line&32; line++)
for(j=0; j&16; j++)
printf("%02x ", (unsigned char)lbaSectorZero[line*16+j]);
printf("\n");
ataRawio.direction为0时是读,为1时是写,其他参考 target/h/drv/hdisk/ataDrv.h的ATA_RAW定义。
3. Linux:下面的/dev/sde,是U盘插上去后显示的设备符合:
#include &stdio.h&
#include &stdlib.h&
#include &stdio.h&
#include &errno.h&
#include &unistd.h&
#include &sys/types.h&
#include &sys/stat.h&
#include &fcntl.h&
#include &linux/fs.h&
#include &sys/ioctl.h&
int main(int argc, char** argv)
int sizes = 0;
char buf[1000] = {0};
fd = open("/dev/sde", O_RDONLY);
if(fd !=-1)
ioctl(fd, BLKSSZGET, &sizes);
printf("sector size=%d\n", sizes);
lseek(fd, 0, SEEK_SET);
read(fd, buf, sizes);
for(line=0; line&32; line++)
for(j=0; j&16; j++)
printf("%02x ", (unsigned char)buf[line*16+j]);
printf("\n");
return (EXIT_SUCCESS);
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!影响性能的是逻辑扇区大小还是物理扇区大小? - 知乎有问题,上知乎。知乎作为中文互联网最大的知识分享平台,以「知识连接一切」为愿景,致力于构建一个人人都可以便捷接入的知识分享网络,让人们便捷地与世界分享知识、经验和见解,发现更大的世界。7被浏览<strong class="NumberBoard-itemValue" title="分享邀请回答3添加评论分享收藏感谢收起31 条评论分享收藏感谢收起写回答用心感受生活乐趣。
关于硬盘扇区的基本知识
概述:本文介绍硬盘的扇区基本知识,
同时对逻辑扇区和物理扇区的概念做出说明
盘片上涉及的基本概念
整个硬盘上一般有很多的盘片组成,每个盘片如同切西瓜一样被“切”成一块一块的扇面,同时沿着半径的方向被划分成了很多同心圆,就是传说中的磁道,每条磁道被扇面切成很多的扇形区域叫做扇区(扇区是从磁盘读出和写入信息的最小单位,通常大小为512字节),不同盘片上的同半径磁道组成了柱面,这些都是磁盘物理上的概念,知道便可。有了这些概念,便可以计算磁盘的容量:
磁头数 × 磁道(柱面)数 × 每道扇区数 × 每扇区字节数
磁头(head)数:每个盘片一般有上下两面,分别对应1个磁头,共2个磁头;
磁道(track)数:磁道是从盘片外圈往内圈编号0磁道,1磁道…,靠近主轴的同心圆用于停靠磁头,不存储数据;
柱面(cylinder)数:同磁道数量;
扇区(sector)数:每个磁道都别切分成很多扇形区域,每道的扇区数量相同;
圆盘(platter)数:就是盘片的数量。
硬盘上的数据定位
每个扇区可存储128×2的N次方(N=0.1.2.3)字节的数据(一般为512B),扇区为数据存储的最小单元,从上图可知,外圈的扇区面积比内圈大,为何存储的数据量相同,这是因为内外圈使用的磁物质密度不同,但现在的硬盘已经采用内外圈同密度物质来存储数据了,以减少类似“大面积小数据”的浪费情况。(此时的内外磁道的扇区数量将不同,具体细节省略)
有了扇区(sector),有了柱面(cylinder),有了磁头(head),显然可以定位数据了,这就是数据定位(寻址)方式之一,CHS(也称3D),对早期的磁盘(上图所示)非常有效,知道用哪个磁头,读取哪个柱面上的第几扇区就OK了。CHS模式支持的硬盘容量有限,用8bit来存储磁头地址,用10bit来存储柱面地址,用6bit来存储扇区地址,而一个扇区共有512Byte,这样使用CHS寻址一块硬盘最大容量为256 * 1024 * 63 * 512B = 8064 MB(1MB = 1048576B)(若按1MB=1000000B来算就是8.4GB)
但现在很多硬盘采用同密度盘片,意味着内外磁道上的扇区数量不同,扇区数量增加,容量增加,3D很难定位寻址,新的寻址模式:LBA(Logical Block Addressing)。在LBA地址中,地址不再表示实际硬盘的实际物理地址(柱面、磁头和扇区)。LBA编址方式将CHS这种三维寻址方式转变为一维的线性寻址,它把硬盘所有的物理扇区的C/H/S编号通过一定的规则转变为一线性的编号,系统效率得到大大提高,避免了烦琐的磁头/柱面/扇区的寻址方式。在访问硬盘时,由硬盘控制器再将这种逻辑地址转换为实际硬盘的物理地址。
LBA下的编号,扇区编号是从0开始。
逻辑扇区号LBA的公式:
LBA(逻辑扇区号)=磁头数 × 每磁道扇区数 × 当前所在柱面号 + 每磁道扇区数 × 当前所在磁头号 + 当前所在扇区号 – 1
例如:CHS=0/0/1,则根据公式LBA=255 × 63 × 0 + 63 × 0 + 1 – 1= 0
也就是说物理0柱面0磁头1扇区,是逻辑0扇区。
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!

我要回帖

更多关于 物理扇区和逻辑扇区 的文章

 

随机推荐