大扇区硬盘的出现与分析
原创文章,转载请注明出处,谢谢!
作者:清林,博客名:飞空静渡
扇区大小为4K的硬盘在09年末已经开始上市了,TOSHIBA已经的640G的2.5英寸的硬盘采用了4k大小的扇区。
当今有三种基本的方法来增加硬盘的容量:
1、增加比特位的密度;
2、增加每英寸上的磁道数;
3、增加盘片数。
在上面的三种基本的方法中,第一种即增加比特位的密度是最好的。我们知道,硬盘的磁道是由一序列的扇区组成的,并且扇区与扇区之间是有空隙、引子(lead-in)和错误校验信息的。那么采用大扇区的最直接的结果就是减少扇区之间的空隙,这样可以让出更多的空间来存放数据;而且也可以让高级格式化提供更有效率的数据完整性的错误校验机制。
我们知道,硬盘的扇区可分区逻辑扇区和物理扇区,但对现在的硬盘来说,逻辑扇区的大小等于物理扇区的大小,其实也并没有严格区分物理扇区和逻辑扇区了。但是现在大扇区的硬盘的出现,就使得我们检测硬盘扇区大小时,应该考虑逻辑扇区大小和物理扇区大小的关系。
现在的许多硬盘都已提供增加扇区的大小的接口技术。然而,512字节的扇区的大小已经使用超过30年了。其结果就是现在的许多计算机系统都不想变更,并一直都使用512字节大小的扇区。
随着现在的硬盘的容量越来越大,使用512字节扇区大小的硬盘,其效率问题也慢慢凸显出来。在2009年,许多硬盘厂商开始配置使用4096字节(4K)大小的扇区来存储数据,但也有可能在未来5年,这个扇区的大小还会要增加。
ATA8-ACS和SBC-3标准已经为大扇区的硬盘提供了一些性能优化的信息报告,这些标准使用了基于SATA,SAS,USB和IEEE1394的接口技术。
根据西部数据的官方文档,采用了4K大小的扇区的硬盘有一些需要注意的是,如果我们在向硬盘写入数据时没有使用4K对齐,并且我们的分区也不是4K对齐的话,那么我们向硬盘写入数据时就会耗费更多的时间。
因此,我们在做数据备份和恢复时,在写硬盘数据时就应该检测硬盘的扇区大小,这样我们就可以按照4K对其来恢复数据,不然,我们恢复完的数据虽然没有错,但速度会大打折扣的。
操作系统的支持
目前只有Windows Vista SP1和Window 7在创建分区和文件系统时会取用硬盘设备提供的信息进行高级格式化。
而Windows XP, Windows Vista RTM, Linux, Apple Tiger, Apple Leopard和Apple Snow Leopard对SATA设备和USB设备并没有使用设备提供的信息进行高级格式化。
检测大扇区硬盘
下面我将以Linux为例(windows也同理)说一下怎么检测硬盘的扇区大小,我的系统是ubuntu9.10,内核是linux-2.6.31.17。
以往,我们检测硬盘扇区的大小是通过ioctl中的BLKSSZGET来获得磁盘扇区的大小的,在linux中的主要分区软件fdisk和parted也是这么做,我们看下典型的获取磁盘扇区大小的代码(这里以fdisk的源代码为例)。
/* get size in bytes */ int blkdev_get_size(int fd, unsigned long long *bytes) { unsigned long size; int ver = get_linux_version(); /* kernels 2.4.15-2.4.17, had a broken BLKGETSIZE64 */ if (ver >= KERNEL_VERSION (2,6,0) || (ver >= KERNEL_VERSION (2,4,18) && ver < KERNEL_VERSION (2,5,0))) { if (ioctl(fd, BLKGETSIZE64, bytes) >= 0) return 0; } if (ioctl(fd, BLKGETSIZE, &size) >= 0) { *bytes = ((unsigned long long)size << 9); return 0; } return -1; }
在这里,如果我们对大扇区磁盘也采用这样的获取方式的话,我们将得到512字节大小的扇区。因此,我们有必要另外读取磁盘的设备信息来检测磁盘扇区的大小。
根据ATA8-ACS文档规范,我们的操作系统都会有一个ATA IDENTIFY DEVICE的数据结构来说明一个磁盘设备的,无论linux还是windows都会有一个,在这里我以linux为例说明,windows也一样可用API获取。
在linux下,典型的获取这个数据结构的代码如下(这里为了简便,忽略了错误的检查):
unsigned short word106 = 0; struct hd_driveid id; int fd = open(diskname, O_RDONLY); ioctl(fd, HDIO_GET_IDENTITY, &id); word106 = id.words104_125[2];
这样,我们就可以获取这个结构的第106个字(注意是字,不是字节)。而这个字就定义了磁盘扇区的大小,我们来看下这个字是怎么定义扇区大小的。
bit 15 固定为0。
bit 14 固定为1。
bit 13 如果为1就说明一个逻辑扇区有多个物理扇区组成。
bit 12 如果为1就说明设备被格式化成一个逻辑扇区的大小超过256个字。
bit 11-4 为保留。
bit 3-0 如果bit 13为1的话,这三个比特位就用来表示逻辑扇区的大小。
我们重点看下这前4个比特位是怎么表示扇区大小的。我用个公式来表示,sector_size = 2^x * 物理扇区大小(即512b)。
即是说逻辑扇区大小是2的x次方个物理扇区的大小,即是:扇区大小 = 2^x * 512。x就是这个字的前4位的值。
举个例来说,如果是个大扇区,扇区大小为4K即是4096个字节,那么在这个字中的表示为:
bit 13 = 1
bit 3-0 = 0011
二进制数0011 = 十进制数3,那么2的三次方为8,那么扇区大小是8*512,即4096 bytes。
这样我们就可应用这个方法检测出是否是大扇区硬盘,那么在我们给硬盘分区的时候就可以让硬盘以4K大小来对齐,以让硬盘的读写速度达到最优。
据一些资料显示,大扇区还会对一些有原数据的文件系统有性能上的影响。例如对我们最常用的ntfs文件系统,如果我们要使大扇区的硬盘中的ntfs文件系统性能最优化,除了这个分区以4K对齐的话,还需要ntfs文件系统中的原数据(就是MFT里的个原文件)、目录和簇的开始位置也要4K对齐。
我们知道fdisk的分区默认是按照柱面对齐的,一般一个柱面的大小是: 255个磁头 * 63个扇区/磁道 = 16065 个扇区。因此为了优化大扇区硬盘,fdisk的源代码应该可以修改一下了 :)
大扇区硬盘的出现与分析相关推荐
- 进入U盘PE系统无法识别硬盘分区的原因分析和解决方法
进入U盘PE系统无法识别硬盘分区的原因分析和解决方法 时间:2015-07-15 来源:http://www.xitongtiandi.com/ 复制网址 进入U盘PE系统 ...
- RTSP安防网络摄像头/海康大华硬盘录像机/NVR网页无插件低延时播放流媒体服务器EasyNVR页面显示网络请求失败问题
进入移动互联网时代以来,企业微信公众号已成为除官网以外非常重要的宣传渠道,当3.2亿直播用户与9亿微信用户的势能累加,在微信上开启直播已成为越来越多企业的必然选择. 青犀团队研发的EasyNVR核心在 ...
- 大华nvr服务器返回消息错误,GB/T28181协议EasyGBS问题解决对接大华硬盘录像机NVR时查询录像失败...
EasyGBS问题解决:对接大华硬盘录像机NVR查询录像失败 我们在对接大华硬盘录像机NVR的时候查询录像失败,在EasyGBS的系统中提示query recordinfo return 400 Ba ...
- 国标GB/T28181EasyGBS对接大华硬盘录像机NVR查询录像失败解决方案
背景分析 互联网的更新换代过程不断加快,将摄像头进行网络直播的应用程序和场景也越来越广泛,此过程需要将普通的安防摄像头的视频转到公网流媒体服务器,公网流媒体服务器再提供流格式转换,转成RTSP.RTM ...
- 大华硬盘录像机通过大华SDK接入EasyCVR,为何出现无法在线的情况?
EasyCVR视频融合云平台开放度高.兼容性强.可支持灵活拓展与第三方集成,目前已经成为安防市场主流的视频能力层服务平台.平台可支持多协议.多类型的设备接入,包括国标GB28181.RTSP/Onvi ...
- Sqlserver 错误日志太大导致硬盘空间不足
Sqlserver 数据库因长时间使用,错误日志过大导致硬盘空间不足. 解决办法:清除Sqlserver错误日志 1.新建查询 2.选择master 3.执行 sp_cycle_errorlog 六次 ...
- 处理大并发之四 libevent demo详细分析(对比epoll)
处理大并发之四 libevent demo详细分析(对比epoll) libevent默认情况下是单线程,每个线程有且仅有一个event_base,对应一个struct event_base结构体,以 ...
- 大数据陷阱:谁有权享有大数据,谁有权分析大数据
既要保持数据的自由流动性,又要维护每个主体在数据上的权益,这是个空前的法律难题.而创制和维护这样的数据利用秩序却是大数据应用的前提,是大数据战略得以实施的根本保证 中国信息通信研究院在第十六届中国互联 ...
- 球球大作战为什么显示服务器神游,球球大作战不能玩怎么解决_球球大作战不能玩解决方案详细分析_好特教程...
球球大作战不能玩怎么办?下面就是小编为大家带来的关于球球大作战不能玩的问题分析和就解决方法,希望能够帮助到小伙伴们. 1.网络问题 由于球球大作战是需要进行联网游戏,如果网络信号不好或者使用信号较强的 ...
最新文章
- 新手谈谈网站交互设计
- 服务器负载均衡的部署方式
- python数组随机分组_Python实用黑科技——以某个字段进行分组
- Laravel5.2目录结构及composer.json文件解析
- doc无法编译java文件_java编译成jar文件.doc
- [css] 为什么说css的选择器一般不要超过三级?
- I.MX6 隐藏电池图标
- java 内存分配实例_java内存管理实例讲解
- HCIE-Security Day19:防火墙用户认证(一)
- windows 7 等 公文包 功能 作用 使用说明
- IDEA导入一个项目
- 9点EXCEL计算公式
- ubuntu 好用的桌面小工具
- Exif文件格式描述(转载)
- Python中对列表中的字典元素进行排序
- vc语言c1083错误,关于VC编译错误fatal error C1083的解决办法
- 【快代理API】获取隧道代理IP
- 2017年中兴算法大赛 迪杰特斯拉派
- GC日志中sys时间比user时间长该如何处理?
- 参加珠海苹果售后维修体验