2T限制的理论分析

以前,RAID控制器和文件系统都有2TB的限制。控制器上的限制,主要是指每个LUN不能大于2TB,而磁盘组一般则没有这个限制;文件系统的限制主要是指每个分区(partition)不能大于2TB,不过32位Windows要求物理盘也不能大于2TB。
现在,控制器还有这个限制的已经越来越少了,不过常用的文件系统上倒还是经常会有这个问题。
NTFS(Windows):支持最大分区2TB,最大文件2TB
FAT16(Windows):支持最大分区2GB,最大文件2GB
FAT32(Windows):支持最大分区128GB,最大文件4GB
HPFS(OS/2):支持最大分区2TB,最大文件2GB
EXT2和EXT3(Linux):支持最大分区4TB,最大文件2GB
JFS(AIX):支持最大分区4P(block size=4k),最大文件4P
XFS(IRIX):这是个正经的64位的文件系统,可以支持9E(2的63次方)的分区

从技术上讲,突破2TB限制并不一定就是64位文件系统。有以下两种技术手段可以在32位的环境中突破2TB限制:
1、block size大于512字节
2、多字段表示block寻址(就像当年的16位DOS能用24位表示内存地址一样)

根据dell的一份白皮书描述,当前的2tb限制,有两个方面原因:
1、由于当前scsi协议规范的局限导致主机不能识别超过2tb的lun
    具体是因为当前采用的sbc(scsi block command)标准采用4-byte的lba寻址,由此限制了可寻址的最大lun为2^32*512=2tb,今后若采用sbc-2标准,即可扩展为8-byte寻址,可大大突破2tb
2、当前主流的x86磁盘分区架构限制一个分区不能大于2tb
    目前x86平台下的分区格式多是mbr(master boot record)类型,其分区表定义了一个4个字节的chs寻址,同样为2^32*512=2tb。如果采用gpt(global unique identifier partition table)类型的分区格式,其分区表定义了8个字节的lba寻址,可大大突破2tb。目前2.6.x的linux可支持gpt,itanium下的 windows也支持gpt,处于某些考虑,微软没有提供其32位os下的分区转换解决方案。

可见,scsi协议和os是造成2tb限制的原因,某些文件系统来说,是没有限制的,比如ntfs,分区上限的理论值是16eb(e=10^9*t),而且没有文件大小限制。


--------------------------------------------------------------------------------------------------------------

SCSI BLOCK COMMAND第二版:
对于READ(6),READ(10),READ(12),WRITE(10),WRITE(12),其LBA的地址长度为4字节,这也就是说LBA的长度空间为2^32,在加上LBA的地址为块地址,而块的大小为512BYTE,从而其寻址空间为:
    2^32 * 512BYTE = 2^32 * 2^9BYTE = 2^41BYTE = 2TB,
以前的大部分OS都是采用这种命令,所以存在2T的限制;

而对于READ(16)、READ(32)、WRITE(16)、WRITE(32),其LBA的地址空间为8字节,就是64位(可能和64位OS相关),因此按照上述计算方法,其寻址空间有:
    2^64 * 2^9 B = 2^ 73 BYTE。

   因此采用新SCSI命令的OS完全可以克服2TB的限制!
   不过对于目前的硬盘来说,大都是支持48bit的LBA寻址,因为对于发下来的64BIT的LBA地址,目前来说是用不完的。但是48bit的LBA对于目前的应用来说已经完全足够啦!

对于存储的各种限制,现在做一个分析!欢迎大家讨论和更正。

对于应用数据到存储系统,通常遵循如下的流程,:
        应用
         |
         OS
         |
        文件系统
         |
        卷管理器
         |
        存储设备驱动程序
         |
        存储设备

因此,整个流程都可能存在一些限制:
a, 如OS,就有32位OS和64位OS的一些限制;
b, 文件系统,如FAT16,就有2G分区的限制。这是和它定义的簇号变量相关,其簇号最大为0XFFFF(就是16位),同时每簇的大小通常为32KB,所以分区的最大值为2^16 * 2^15B = 2^31B= 2GB。不过这一限制早就突破了!
c,对于卷管理器,一般是将对磁盘的访问,设置为对应的命令,对于ATA设备驱动,就发送ATA的命令(就是处理IDE硬盘);对于SCSI驱动,OS会 发送一个包含SCSI BLOCK COMMAND的命令(可以参考SPEC),而这些SCSI BLOCK COMMAND命令(特别是READ、WRITE命令)里面的LBA地址变量的长度,将决定一个TARGET上LUN能够访问的存储空间,像 READ(6),READ(10),READ(12),WRITE(10),WRITE(12)命令,其LBA为32位长度,而对于硬盘来说每个块大小位 512B,进而存在2TB的限制。在SCSI BLOCK COMMAND第二版中,扩展了该命令,LBA可以有64位,突破了该限制。
d,对于IDE硬盘设备,以前采用的CHS模式,还有512MB的容量限制,这也是因为CHS的空间为20BIT,从而只能寻址2^20 *512B=512MB,
后来采用了28BIT的LBA寻址以及48BIT的LBA寻址,这些限制已经被突破。

    值得注意的是,有些数据库应用可以跨越文件系统,直接操作块设备来完成其操作,因此数据库供应商也可能存在限制。同时对于网络存储来说,各个设备和软件都可能存在限制,因此大家都会尊崇统一的SPEC,从而消除这些限制。

    总的来说,对于存储设备的限制,如果遵守SCSI协议,那么其存储空间的限制,最重要的部分应该是和实现的SCSI命令相关联的!而且这些限制可能都是早 期的设计中,没有考虑全后面的应用而产生的,扩展这些限制在技术上并不是不可跨越,而是在于一些向后兼容性的问题。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值