Chinaunix首页 | 论坛 | 博客
  • 博客访问: 10197958
  • 博文数量: 1669
  • 博客积分: 16831
  • 博客等级: 上将
  • 技术积分: 12594
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-25 07:23
个人简介

柔中带刚,刚中带柔,淫荡中富含柔和,刚猛中荡漾风骚,无坚不摧,无孔不入!

文章分类

全部博文(1669)

文章存档

2023年(4)

2022年(1)

2021年(10)

2020年(24)

2019年(4)

2018年(19)

2017年(66)

2016年(60)

2015年(49)

2014年(201)

2013年(221)

2012年(638)

2011年(372)

分类: 服务器与存储

2012-08-27 15:05:22

硬盘、文件系统和存储 block、sector、 Stripe size区别
1941人阅读 评论(0) 举报

  扇区(block)是驱动可以操作的最小单位,是磁盘级别的。一个磁盘扇区(sector)512个字节(现在有4K的了),扇区(sector)是磁盘的最小存储单位,
  块(block)是文件系统层的,mkfs时可以设置块的大小.
磁盘块(block)应该是类似FAT的簇大小的概念,是操作系统中分配磁盘容量的最小单位. 块(block)是数据存储的最小单位!

 

    我的理解,512字节和520字节(针对EMC)所指的不是block,而是硬盘扇区的大小。在EMC存储中,每个硬盘在出厂前就被格式化成每扇区520 字节(其中512字节可存放数据,另外8字节是存储FLARE的元数据。其他存储设备的硬盘一般默认都是每扇区512字节的。
至于block的大小,在一般情况下,我觉得应该等同于strip大小。只有在创建了RAID之后才会有block的概念。stripe 和 strip之间的区别的确容易混淆,我是这么理解的,一个RAID中所有磁盘的strip合起来就是stripe。

在创建RAID的时候,会让你选择Stripe size 以及Block size,

 

 

Cylinder, Tracks(磁道) and Sector(扇区)

 

 

      Cylinder ,有人给翻译成柱面,这个中文意思得好好想想才明白:一根木头棍,用刀横向一切,形成的这个平面就是柱面。硬盘的一个中心轴上,平行放置了好几块碟片,每个碟片就是一个柱面。

    Track ,每个碟片逻辑上有好多个同心圆形成的轨道,这些轨道就是 Track 。数据分布在这些 Track 上。

Sector ,为了更有效地利用空间,每个 Track 都会化成相同大小的小块,每个小块 512Byte ,就是一个 Sector

 

    硬盘写数据时,都是从外圈的 Track 忘里写。角速度相同的情况下,相同时间内外圈的 track 能读取更多的数据,即 transfer rate MB/s )更大,一般最外圈的 transfer rate 可以比最内圈的大 1 倍以上。

 

    磁盘阵列的一个重要功能是虚拟出 LUN ,一个 LUN 对主机来讲就是一个硬盘,也有 C Cylinder H Heads S Sector )参数。同样的每个 LUN Sector 大小仍然是 512 Byte(有点厂商是 520B

 

    操作系统读写文件时,不是按照 512Byte Sector 大小来进行的,而是按照文件系统定义的 Cluster 大小读写数据。

 

   文件系统一般按照 Cluster 大小,有时候也称为 Block 大小来读写数据,这个 Cluster 一般最小的 4K ,大的定为 32K 64K 等都可以,主要根据应用的不同。比如 Oracle 的应用一般就用 4K 8K Block 大小,大文件读写就用 128K 甚至 256K 都可以。

 

那主机文件系统定义的 Block 块和后端存储的哪个参数相关呢?

 

    Stripe Size :存储阵列在做 RAID 的时候,比如 RAID5 ,一般都要指定 Stripe Size ,就是在硬盘上读写数据的条带化单位。这个单位设得太小,比文件系统的 Block Size 还小的话,存储就需要在多个条带单位上写一个 Block 数据,对读写性能显然有影响;这个单位如果设得太大,对文件系统的读写应该影响不大,因为文件系统读写数据是按照模拟出来的 LUN Geometry 读写的,只要这个 LUN 平均分配到了多个硬盘上,即使是远小于 Stripe Size 的多个 Block ,也应该能平均分到多个硬盘上。(这点不太确定,但对数据库应用还是很重要的,直觉上对这类应用,应该设比较小的 Stripe Size )―――这是不是说 Array 上的 Stripe Size 尽量设大一点呢?

 

    Cache Block Size :有些存储能调整 Cache Block Size 。如果 cache block size 正好等于文件系统的 block size ,那么 cache 就能够被充分利用。假设一种情况: cache block size 等于 128k ,而文件系统 block size 等于 8k ,那么 cache 的利用率就大大降低了。而如果 cache block size 等于 8k ,但文件系统的 block size 等于 128k ,那存储就需要把一个读写数据块拆成 16 个缓存数据块,这样会造成 CPU 的负载加重。(如果我是存储的设计者,我会选择比较小的 cache block size ,因为 Cache 主要给 Oracle 这样的小数据块频繁读写的应用使用。对大流量的文件读写应用, cache 用处不大,这个更考验系统的总线和通道吞吐能力)

来源http://blogold.chinaunix.net/u2/73762/showart_1085536.html

阅读(1841) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~