存储基础知识2
---------------------------------------------------------------------------------------------------
1.网络存储主要技术
2.主要协议和相关技术
3.文件系统
4.RAID技术
5.数据复制与容灾
6.备份技术
7.windows相关
8.linux相关
9.存储网络知识
10.存储I/O
11.云存储
12.其他存储
13.资料
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
3. 文件系统相关
3.1 文件系统
文件系统定义了把文件存储于磁盘时所必须的数据结构及磁盘数据的管理方式。我们知道,磁盘是由很多个扇区(Sector)组成的,如果扇区之间不建立任何的关系,写入其中的文件就无法访问,因为无法知道文件从哪个扇区开始,文件占多少个扇区,文件有什么属性。为了访问磁盘中的数据,就必需在扇区之间建立联系,也就是需要一种逻辑上的数据存储结构。建立这种逻辑结构就是文件系统要做的事情,在磁盘上建立文件系统的过程通常称为“格式化”。
以Windows平台下最常见的FAT文件系统为例。FAT文件系统有两个重要的组成部分:FAT表(File Allocation Table)和数据存储区。FAT表是FAT文件系统的名称来源,它定义了存储数据的簇(Cluster,由2的n次方个Sector组成,n值根据分区大小而定,需综合考虑数据存取效率和存储空间的利用率)之间的链接关系,这种链接关系是一个单向链表,指向0xFF表示结束。依据一个簇编号所用bit数的不同,可分为FAT12、FAT16和FAT32文件系统。数据区存储的数据包含文件目录项(Directory Entries)和文件数据。文件目录项存储的是一个文件或目录的属性信息,包括文件名称(把目录也看成是文件)、读写属性、文件大小、创建时间、起始簇编号等,一个目录下的每个子目录和文件都对应一个表项记录。文件目录项以固定32字节的长度存储,以树型结构管理,其中根目录的位置是确定的。也就是说,根据分区根目录可以找到下级子目录和文件的起始簇编号,根据下级子目录又可以找到更下级目录或文件的起始簇编号。可见,FAT表和文件目录项是为了文件的访问和管理而建立的。应用程序要访问一个文件时,根据文件路径(逻辑分区号+目录,如F:\software)和文件名称(如setup.exe)可从文件目录项中获得存储文件数据的起始簇号,之后从FAT表查询这个簇号对应的链表,就可以获得该文件对应的全部簇编号。从这些簇中读出全部数据,就得到一个完整的文件。
一般来说,文件系统是和操作系统紧密结合在一起的,不同的操作系统使用不同的文件系统,但有时为了兼容,不同操作系统也使用相同的文件系统。
3.2 CIFS 和NFS
3.2.1 CIFS
通用网际文件系统(CIFS)是微软服务器消息块协议(SMB)的增强版本,是计算机用户在企业内部网和因特网上共享文件的标准方法。CIFS 通过定义一种与应用程序在本地磁盘和网络文件服务器上共享数据的方式相兼容的远程文件访问协议使之能够在因特网上进行协作。CIFS 在 TCP/IP 上运行,利用因特网上的全球域名服务系统(DNS)增强其可扩展性,同时为因特网上普遍存在的慢速拨号连接优化。CIFS 利用重定向包可以通过网络发送至远端设备,而重定向器也利用 CIFS 向本地计算机的协议栈发出请求。
关键特点:
- 文件访问的完整性:CIFS 支持一套通用的文件操作:打开、关闭、读,写以及搜索。CIFS 也支持文件和记录的锁定和解锁。CIFS 允许多个客户端访问和更新同一个文件,它通过提供文件共享和文件锁定功能来避免发生冲突。
- 为慢速链接优化:CIFS 已被优化过,使之能在慢速拨号线路上良好运行,结果就是为使用调制解调器访问因特网的用户提供了改善的性能。
- 安全性:CIFS 服务器既支持匿名传输,也支持对于指定文件的安全的、需要验证的访问。同时,也易于管理文件和目录的安全策略。
- 高性能和可扩展性:CIFS 服务器和操作系统高度集成,为最大化系统性能而优化。CIFS 支持 Windows 95 之后的所有微软平台。它也支持其它流行的操作系统,如 UNIX、VMS、Macintosh 、IBM LAN server等。
- 使用统一码(Unicode)文件名:文件名可以使用任何字符集,而不局限于为英语或西欧语言设计的字符集。
- 全局文件名:用户不必挂载远程文件系统也能直接查阅到全局有效名称,而不是只有本地意义的那些名称。
协议结构
CIFS 和 SMB 定义了许多客户端和服务器端的命令和消息。这些命令和消息大致可分为如下几类:
- 连接建立消息:包括开始或结束一个到服务器上共享资源的重定向连接的命令。
- 命名空间和文件处理消息:重定向器利用这个消息获得对服务器上文件的访问并对其进行读写操作。
- 打印消息:重定向器利用此消息向服务器上的打印队列发送数据和获得打印队列的状态信息
- 其它消息:重定向器利用这些消息向邮槽和命名管道写入信息。
CIFS 消息流的典型处理过程和结构如下图所示:
微软CIFS流程图
3.2.2 NFS
按照Operating System (下面简称OS), 大概可以分Windows派,类Unix派,还有苹果派。共享一个文件系统,Windows派喜欢用CIFS访问,类Unix派习惯用NFS访问,近年来如日中天的苹果派们则用AFP。为了伺候好这些门派,NAS就需要支持多种共享协议。本文要介绍的,就是类Unix习惯使用的NFS。
NFS的全称是Network File System,即网络文件系统。它使一台电脑可以通过网络访问另外一台电脑上的共享,使用起来就如同本地文件系统一样方便。我在大学里就共享过一整个文件系统,过几天就有校友在上面放了很多小电影,还经常更新。可见共享不仅是奉献,有时候还有收获,感谢共享协议的开发者们!
NFS的开发者就是曾经名震江湖的SUN公司,它已经被甲骨文收入门下。SUN把NFS的第一个版本NFSv1藏在深闺,就像古墓里的小龙女,从不露面。等到在江湖上开始流行NFS,已经是第二版NFSv2了。NFSv2很好用,但是问题也不少,比如它不支持大于2GB的文件,但这在90年代之前还不是大问题。令人费解的是,虽然NFSv3在1995年就面世了,但到今天还有人坚持用NFSv2。
其实NFS可以工作在任何OS上。只不过因为门派之别,一般只在类Unix环境中使用。目前广泛应用的版本还是NFSv3,我们有机会再另文讨论NFSv4。下图展示了多台客户端通过NFS对NAS的访问。
NAS在这里充当了NFS服务器的角色,而Linux,Solaris和AIX则是NFS客户机。NFS的功能很多,不同的功能对应着不同的daemon。比如一定要有的nfsd和mountd,还有可选的lockd和statd。
NAS在这里充当了NFS服务器的角色,而Linux,Solaris和AIX则是NFS客户机。NFS的功能很多,不同的功能对应着不同的daemon。比如一定要有的nfsd和mountd,还有可选的lockd和statd。
3.2.3 CIFS vs NFS
1、CIFS
Microsoft推出SMB(server message block)后,进一步发展,使其扩展到Internet上,成为common internet file system。
CIFS采用C/S模式,基本网络协议:TCP/IP和IPX/SPX;
两种资源访问模式:
(1) share level security:所有用户的共享资源访问口令是相同的,主要在win9x中使用;
(2) user level security:win NT以后的OS只提供ULS,用于必须提供正确的U/P,并且每个用户权限可以是不同的。
C/S的交互模式:类似于三次握手;三个交互:
(1) 协议选择;双方选择合适的协议进行交互;
(2) 身份验证;按选定的协议登录server,由server对client进行身份验证;
(3) 资源获取;认证通过后,server和client进行交互,进行文件读写等操作。
注意:相同win OS 中,所有机器都是对等的,扮演双重角色,可以作sever,也可以是client;CIFS是一种协议,和具体的OS关系不大,Unix在安装samba后可以使用CIFS;
2、CIFS和NFS的对比
(1)CIFS面向网络连接的共享协议,对网络传输的可靠性要求高,常使用TCP/IP;NFS是独立于传输的,可使用TCP或UDP;
(2)NFS缺点之一,是要求client必须安装专用软件;而CIFS集成在OS 内部,无需额外添加软件;
(3)NFS属无状态协议,而CIFS属有状态协议;NFS受故障影响小,可以自恢复交互过程,CIFS不行;从传输效率上看,CIFS优于NFS,没用太多冗余信息传送;
(4)两协议都需要文件格式转换,NFS保留了unix的文件格式特性,如所有人、组等等;CIFS则完全按照win的风格来作。
3.3 存储系统和文件系统
提到NAS,通常会想到传统的NAS设备,它具有自己的文件系统,具有较大的存储容量,具有一定的文件管理和服务功能。NAS设备和客户端之间通过IP网络连接,基于NFS/CIFS协议在不同平台之间共享文件,数据的传输以文件为组织单位。
虽然NAS设备常被认为是一种存储架构,但NAS设备最核心的东西实际上在存储之外,那就是文件管理服务。从功能上来看,传统NAS设备就是一个带有DAS存储的文件服务器。从数据的IO路径来看,它的数据IO发生在NAS设备内部,这种架构与DAS毫无分别。而事实上,很多NAS设备内部的文件服务模块与磁盘之间是通过SCSI总线连接的。至于通过NFS/CIFS共享文件,完全属于高层协议通信,根本就不在数据IO路径上,所以数据的传输不可能以块来组织。正是由于这种功能上的重叠,在SAN出现以后,NAS头设备(或NAS网关)逐渐发展起来,NAS over SAN的方案越来越多,NAS回归了其文件服务的本质。
由此可知,NAS与一般的应用主机在网络层次上的位置是相同的,为了在磁盘中存储数据,就必须要建立文件系统。有的NAS设备采用专有文件系统,而有的NAS设备则直接借用其操作系统支持的文件系统。由于不同的OS平台之间文件系统不兼容,所以NAS设备和客户端之间就采用通用的NFS/CIFS来共享文件。
至于SAN,它提供给应用主机的就是一块未建立文件系统的“虚拟磁盘”。在上面建立什么样的文件系统,完全由主机操作系统确定。
采用SAN+主机的方式,文件系统是建立在主机上的,每一个主机都要建立一个文件系统,需要耗费大量的主机CPU、内存、系统I/O资源。
如果采用NAS的方式,只需要在NAS设备上建立一个文件系统,各种类型的主机直接通过文件共享协议去访问这个文件系统就ok了,主机就可以从这种负荷中解脱出来。
3.4 分布式文件系统
*nix平台下分布式文件系统的发展历史:
1、单机文件系统
用于操作系统和应用程序的本地存储。
缺点:数据无法在服务器之间共享。
典型代表:Ext2、Ext3、Ex4、NTFS、FAT、FAT32、XFS、JFS...
IO模型:
2、网络文件系统(简称:NAS)
基于现有以太网架构,实现不同服务器之间传统文件系统数据共享。
缺点:两台服务器不能同时访问修改,性能有限。
典型代表:NFS、CIFS
IO模型:
3、集群文件系统
在共享存储基础上,通过集群锁,实现不同服务器能够共用一个传统文件系统。
缺点:性能一般,扩展性很有限(小于16台服务器)。
典型代表:GFS(Redhat)、GFS2(Redhat)、OCFS(Oracle)
IO模型:
GFS、GFS2模型如下:
默认上面三种文件系统模块都位于内核里面,NFS over Inifiband可以使用kernel bypass绕开内核。
4、分布式文件系统
在传统文件系统上,通过额外模块实现数据跨服务器分布,并且自身集成raid保护功能,保证多台服务器同时访问、修改同一个文件系统。性能优越,扩展性很好,成本低廉。
缺点:适用场景单一,部分类型存在单点故障风险。
典型代表:lustre(Oracle)、HDFS(ASF)、gluster(Redhat)
IO模型:
主要分两大类型:一种是元数据集中管理模型;另一种是元数据分散管理模型
lustre(Oracle)
HDFS(ASF)
lustre和HDFS是元数据集中管理典型代表。实际数据分布存放在数据服务器上,元数据服务器负责IO请求调配,空间分配;非常适用于大文件存储。元数据服务器可能成为系统扩展的瓶颈。
gluster(Redhat)
gluster是元数据分散管理模型典型代表,元数据被分散放置到所有服务器上,不存在元数据单点故障。非常适用于小文件存储。
4. RAID技术
4.1 RAID介绍
RAID是英文Redundant Array of Independent Disks的缩写,翻译成中文意思是“独立磁盘冗余阵列”,有时也简称磁盘阵列(Disk Array)。
简单的说,RAID是一种把多块独立的硬盘(物理硬盘)按不同的方式组合起来形成一个硬盘组(逻辑硬盘),从而提供比单个硬盘更高的存储性能和提供数据备份技术。组成磁盘阵列的不同方式成为RAID级别(RAID Levels)。数据备份的功能是在用户数据一旦发生损坏后,利用备份信息可以使损坏数据得以恢复,从而保障了用户数据的安全性。在用户看起来,组成的磁盘组就像是一个硬盘,用户可以对它进行分区,格式化等等。总之,对磁盘阵列的操作与单个硬盘一模一样。不同的是,磁盘阵列的存储速度要比单个硬盘高很多,而且可以提供自动数据备份。
RAID技术的两大特点:一是速度、二是安全,由于这两项优点,RAID技术早期被应用于高级服务器中的SCSI接口的硬盘系统中,随着近年计算机技术的发展,PC机的CPU的速度已进入GHz 时代。IDE接口的硬盘也不甘落后,相继推出了ATA66和ATA100硬盘。这就使得RAID技术被应用于中低档甚至个人PC机上成为可能。RAID通常是由在硬盘阵列塔中的RAID控制器或电脑中的RAID卡来实现的。
RAID技术经过不断的发展,现在已拥有了从 RAID 0 到 6 七种基本的RAID 级别。另外,还有一些基本RAID级别的组合形式,如RAID 10(RAID 0与RAID 1的组合),RAID 50(RAID 0与RAID 5的组合)等。不同RAID 级别代表着不同的存储性能、数据安全性和存储成本。但我们最为常用的是下面的几种RAID形式。
RAID级别的选择有三个主要因素:可用性(数据冗余)、性能和成本。如果不要求可用性,选择RAID0以获得最佳性能。如果可用性和性能是重要的而成本不是一个主要因素,则根据硬盘数量选择RAID 1。如果可用性、成本和性能都同样重要,则根据一般的数据传输和硬盘的数量选择RAID3、RAID5。
RAID 0
RAID 0又称为Stripe(条带化)或Striping,它代表了所有RAID级别中最高的存储性能。RAID 0提高存储性能的原理是把连续的数据分散到多个磁盘上存取,这样,系统有数据请求就可以被多个磁盘并行的执行,每个磁盘执行属于它自己的那部分数据请求。这种数据上的并行操作可以充分利用总线的带宽,显著提高磁盘整体存取性能。
如图所示:系统向三个磁盘组成的逻辑硬盘(RADI 0 磁盘组)发出的I/O数据请求被转化为3项操作,其中的每一项操作都对应于一块物理硬盘。我们从图中可以清楚的看到通过建立RAID 0,原先顺序的数据请求被分散到所有的三块硬盘中同时执行。从理论上讲,三块硬盘的并行操作使同一时间内磁盘读写速度提升了3倍。 但由于总线带宽等多种因素的影响,实际的提升速率肯定会低于理论值,但是,大量数据并行传输与串行传输比较,提速效果显著显然毋庸置疑。
RAID 0的缺点是不提供数据冗余,因此一旦用户数据损坏,损坏的数据将无法得到恢复。
RAID 0具有的特点,使其特别适用于对性能要求较高,而对数据安全不太在乎的领域,如图形工作站等。对于个人用户,RAID 0也是提高硬盘存储性能的绝佳选择。
RAID 1
RAID 1又称为Mirror或Mirroring(镜像),它的宗旨是最大限度的保证用户数据的可用性和可修复性。RAID 1的操作方式是把用户写入硬盘的数据百分之百地自动复制到另外一个硬盘上。
如图所示:当读取数据时,系统先从RAID 0的源盘读取数据,如果读取数据成功,则系统不去管备份盘上的数据;如果读取源盘数据失败,则系统自动转而读取备份盘上的数据,不会造成用户工作任务的中断。当然,我们应当及时地更换损坏的硬盘并利用备份数据重新建立Mirror,避免备份盘在发生损坏时,造成不可挽回的数据损失。
由于对存储的数据进行百分之百的备份,在所有RAID级别中,RAID 1提供最高的数据安全保障。同样,由于数据的百分之百备份,备份数据占了总存储空间的一半,因而Mirror(镜像)的磁盘空间利用率低,存储成本高。
Mirror虽不能提高存储性能,但由于其具有的高数据安全性,使其尤其适用于存放重要数据,如服务器和数据库存储等领域.
RAID 0+1
正如其名字一样RAID 0+1是RAID 0和RAID 1的组合形式,也称为RAID 10。
以四个磁盘组成的RAID 0+1为例,其数据存储方式如图所示:RAID 0+1是存储性能和数据安全兼顾的方案。它在提供与RAID 1一样的数据安全保障的同时,也提供了与RAID 0近似的存储性能。
由于RAID 0+1也通过数据的100%备份功能提供数据安全保障,因此RAID 0+1的磁盘空间利用率与RAID 1相同,存储成本高。
RAID 0+1的特点使其特别适用于既有大量数据需要存取,同时又对数据安全性要求严格的领域,如银行、金融、商业超市、仓储库房、各种档案管理等。
RAID 3
RAID 3是把数据分成多个“块”,按照一定的容错算法,存放在N+1个硬盘上,实际数据占用的有效空间为N个硬盘的空间总和,而第N+1个硬盘上存储的数据是校验容错信息,当这N+1个硬盘中的其中一个硬盘出现故障时,从其它N个硬盘中的数据也可以恢复原始数据,这样,仅使用这N个硬盘也可以带伤继续工作(如采集和回放素材),当更换一个新硬盘后,系统可以重新恢复完整的校验容错信息。由于在一个硬盘阵列中,多于一个硬盘同时出现故障率的几率很小,所以一般情况下,使用RAID3,安全性是可以得到保障的。与RAID0相比,RAID3在读写速度方面相对较慢。使用的容错算法和分块大小决定RAID使用的应用场合,在通常情况下,RAID3比较适合大文件类型且安全性要求较高的应用,如视频编辑、硬盘播出机、大型数据库等.
RAID 5
RAID 5 是一种存储性能、数据安全和存储成本兼顾的存储解决方案。 以四个硬盘组成的RAID 5为例,其数据存储方式如图4所示:图中,P0为D0,D1和D2的奇偶校验信息,其它以此类推。由图中可以看出,RAID 5不对存储的数据进行备份,而是把数据和相对应的奇偶校验信息存储到组成RAID5的各个磁盘上,并且奇偶校验信息和相对应的数据分别存储于不同的磁盘上。当RAID5的一个磁盘数据发生损坏后,利用剩下的数据和相应的奇偶校验信息去恢复被损坏的数据。
RAID 5可以理解为是RAID 0和RAID 1的折衷方案。RAID 5可以为系统提供数据安全保障,但保障程度要比Mirror低而磁盘空间利用率要比Mirror高。RAID 5具有和RAID 0相近似的数据读取速度,只是多了一个奇偶校验信息,写入数据的速度比对单个磁盘进行写入操作稍慢。同时由于多个数据对应一个奇偶校验信息,RAID 5的磁盘空间利用率要比RAID 1高,存储成本相对较低。
4.2 磁盘,磁盘寻址,分区启动,磁盘性能
4.2.1 磁盘结构
硬盘物理结构
硬盘物理上主要是盘片、机械手臂、磁头、和主轴等组成。在盘片逻辑划分上又分为磁道、扇区,例如下图:
盘片磁道、扇区
磁道:
当硬盘盘片旋转时,磁头若保持在一个位置上,则磁头会在盘片表面划出一个圆形轨迹,这些圆形轨迹就叫做磁道。以盘片中心为圆心,由此可以划分出很多磁道来, 这些磁道用肉眼是根本看不到的,因为它们仅 是盘面上以特殊方式磁化了的一些磁化区,硬盘上的信息便是沿着这样的轨道存放的,盘片上的磁道由外向内依次从“0”开始进行编号。
柱面:
由于硬盘可以由很多盘片组成,不同盘片的相同磁道就组成了柱面(cylinder)。
磁头:
假设有N个盘片组成的硬盘,那么有2N个盘面(一个盘片有2面),那么磁头也就有2N个,即每个盘面有一个磁头。
扇区 :
早期的硬盘盘片的盘面以圆心开始向外放射状将磁道分割成等分的弧段,这些弧段便是硬盘的扇区。每个扇区一般规定大小为512byte,这里大家应该比较疑惑,外圈周长很明显比内圈要长,怎么可能每个扇区都是512byte?其实答案早期硬盘外圈存储比内圈存储密度低一些,所以外圈很长但是仍然只能存储512byte,因此如果我们知道了柱面数(磁道数) Cylinders、磁头数Heads、扇区数Sectors,基本上硬盘的容量我们能够计算出来 硬盘总容量= Cylinders * Heads * Sectors * 512byte。 但是由于早期硬盘外圈密度低,导致盘片利用率不高,现在的硬盘盘片则采用内外存储密度一致的方式,每个磁道都划分成以512byte大小的弧段,这样也造成了内外磁道上扇区数量会不一样,外圈上的扇区数要多于内圈扇区数。
4.2.2 硬盘寻址方式
硬盘存取、读取数据,首先要做的就是寻址,即定位到数据所在的物理地址,在硬盘上就要找到对应的柱面、磁头以及对应的扇区,那么怎么寻址呢? 有两种方式:CHS和LBA
CHS(Cylinder/Head/Sector)模式:
CHS(Cylinder/Head/Sector)寻址模式也称为3D模式,是硬盘最早采用的寻址模式,它是在硬盘容量较小的前提下产生的。
硬盘的C/H/S 3D参数既可以计算出硬盘的容量,也可以确定数据所在的具体位置。这是因为扇区的三维物理地址与硬盘上的物理扇区一一对应,即三维物理地址可完全确定硬盘上的物理扇区。三维物理地址通常以C/H/S的次序来书写,如C/H/S为0/1/1,则第一个数字0指0柱面,第二个数字1指1磁头(盘面),第三个数字1指1扇区,表示该数据位于硬盘1盘面上的0磁道1扇区。现在定位已完成,硬盘内部的参数和主板BIOS之间进行协议,正确发出寻址信号,从而正确定位数据位置。
早期硬盘一个磁道上分63个扇区,物理磁头最多16个(8个盘片,盘片多了硬盘那就真要加厚了)。采用8位寻址方式,8位二进制位的最大值是256(0-255),可以表示磁头数,而扇区只有63个(1-63),只需要其中6个二进制位即可表示,剩下2位拿去表示柱面,柱面数用10(8+2)位来表达,达到1024个柱面(0-1023),因此总扇区数(1024×16×63)。前面说一个扇区大小为512byte,这也就是说,如果以C/H/S寻址模式寻址,则IDE硬盘的最大容量只能为1024×16×63×512B= 500MB左右。
可以思考下,在8位寻址模式下,其实可以寻址的硬盘最大容量为1024×256×63×512B =8G,那为啥CHS模式硬盘只支持到500MB呢?原因很简单,我们的硬盘盘片不可能让128片盘片重叠起来吧,那会是多厚??如果采用28位寻址方式,那么可以寻址137G,盘片也不可能一直堆叠下去。
LBA(Logical Block Addressing)
经常去买硬盘的人都知道,目前硬盘经常都说单碟、双碟,其实意思就是说硬盘盘片只有1个或者2个,而且都只是用一面,单碟一个磁头而已,但是硬盘容量确是几百G,而且硬盘柱面往往都大于1024个柱面,CHS是无法寻址利用完这些硬盘容量的。
另外由于老硬盘的扇区划分方式对硬盘利用率不高,因此出现了现在的等密度盘,外圈的扇区数要比内圈多,原来的3D寻址方式也就不能适应这种方式,因此也就出现了新的寻址方式LBA,这是以扇区为单位进行的线性寻址方式,即从最外圈柱面0开始,依次将扇区号编为0、1….等等,举个例子,假设硬盘有1024个柱面,由于是等密度硬盘,柱面0(最外圈)假设有128个扇区,依次编号为0-127,柱面1有120个扇区,则依次编号为127-246,…..依次最内圈柱面127只有扇区64个,则编号到最后。因此要定位到硬盘某个位置,只需要给出LBA数即可,这个就是逻辑数。
在 LBA 模式下,为了保留原来CHS时的概念,也可以设置柱面、磁头、扇区等参数,但是他们并不是实际硬盘的物理参数,只是为了计算方便而出的一个概念,1023之前的柱面号都一一物理对应,而1023以后的所有柱面号都记录成1023磁头最大数可以设置为255,而扇区数一般是每磁道63个,硬盘控制器会把由柱面、磁头、扇区等参数确定的地址转换为LBA数。这里我们再此明确两个概念:
物理扇区号:
一般我们称CHS模式下的扇区号为物理扇区号,扇区编号开始位置是1
逻辑扇区号:
LBA下的编号,扇区编号是从0开始。
CHS模式转换到逻辑扇区号LBA:
LBA(逻辑扇区号)=磁头数 × 每磁道扇区数 × 当前所在柱面号 + 每磁道扇区数 × 当前所在磁头号 + 当前所在扇区号 – 1
例如:CHS=0/0/1,则根据公式LBA=255 × 63 × 0 + 63 × 0 + 1 – 1= 0, 也就是说物理0柱面0磁头1扇区,是逻辑0扇区。
4.2.2 硬盘分区
我们知道,一般使用硬盘,我们首先会对硬盘进行分区,然后对分区使用某个文件系统格式(NTFS、FAT、ext2/ext3)进行分区格式化,然后才能正常使用。那么分区是怎么回事呢?我们常见的windows中说到的c、d、e盘是怎么划分出来的呢?其实,在装windows系统过程中,一般我们只需要填写每个分区的大小,看不出来分区过程的实际工作情况,我们可以从linux系统分区过程反而能反应底层实际分区情况。
柱面是分区的最小单位,即分区是以某个某个柱面号开始到某个柱面号结束的。
如图,柱面1~200我们可以分为一个区,柱面201~500再划分为一个区,501~1000再划分为一个区,以此类推。大家可以看到,柱面0没有在任何分区里面,为何?这里说说,前面说到硬盘从外圈(柱面0)到内圈扇区是依次编号,看似各个扇区没有什么区别,但是这里硬盘的柱面0的第一个扇区(逻辑扇区0,CHS表示应该是0/0/1)却是最重要的,因为硬盘的第一个扇区记录了整个硬盘的重要信息,第一个扇区(512个字节)主要记录了两部分:
① MBR(Master Boot Record):主引导程序就放在这里,主引导程序是引导操作系统的一个程序,但是这部分只占446字节。
② DPT(Disk Partition table):硬盘分区表也在这里,分区表就是用来记录硬盘的分区情况的,例如c盘是1~200柱面,d盘是201~500柱面,分区表总共只占64字节,可以看出,分区其实很简单,就是在这个表里面修改一下记录就重新分区了,但是由于只有64字节,而一条记录就要占用16字节,这个分区表最多只能记录4个分区信息,为了继续分出更多分区来,引入了扩展分区的概念,也就是说,在这4个分区中,可以使用其中一条记录来记录扩展分区的信息,然后在扩展分区中再继续划分逻辑分区,而逻辑分区的分区记录则记录在扩展分区的第一个扇区中,如此则可以像链表一样划分出很多分区来。但是请注意,一个分区表中可以有1~4条主分区,但是最多只能有1个扩展分区。
举例,主分区可以是P1:1~200,扩展分区P2: 2~1400,扩展分区开始的第一个扇区可以用来记录扩展分区中划分出来的逻辑分区。
分区表链
分区表之间是如何关联的,详细讲一下,分区表是一个单向链表,第一个分区表,也就是位于硬盘第一个扇区中的DPT,可以有一项记录扩展分区的起始位置柱面,类似于指针的概念,指向扩展分区,根据这项记录我们可以找到扩展分区的某柱面0磁头1扇区(CHS),而这个扇区中又存放了第二个分区表,第二个分区表第一项记录一般表述了当前所在的逻辑分区的起始/终止柱面,第二项记录表述了下一个逻辑分区所在的0磁头1扇区(CHS),第三、第四项记录不存任何信息。
请看下图,主引导记录/分区表所在的是硬盘第一个分区,基本分区1、基本分2、基本分区3都是主分区、扩展分区内有2个逻辑分区,每个逻辑分区的第一个扇区都是分区表,至于引导扇区(DBR),在系统启动一节中会提及。
4.2.2 系统启动
之前提到MBR中安装的引导加载程序,他的作用是什么?
① 提供开机菜单选项:可以供用户选择启动哪个操作系统,这是多重引导功能。
② 加载操作系统内核:每个操作系统都有自己的内核,需要引导程序来加载
③ 转交给其他引导程序:可以将工作移交给其他引导程序来进行上述操作。
其实引导加载程序除了可以安装在MBR中,还可以直接安装在每个分区的引导扇区(DBR)中,注意下,每个分区(主分区、逻辑分区)都有一个自己的启动扇区,专门用来安装引导加载程序。
系统启动过程:
① 首先,BIOS启动后,读取硬盘第一个扇区MBR中的引导加载程序(可能是windows或者linux的grub)
② MBR中的引导程序提供开机菜单,你可以选择1)直接加载windows 内核 2)将工作转交给windows 分区内的引导扇区中的加载程序,让他自己去加载内核 3)转交给linux分区内引导扇区,让他去加载linux.
③ 根据用户选择的选项和引导加载程序中记录的分区,到分区表找对应的分区柱面号等分区信息,启动内核或者分区加载程序。
Window安装时默认会自动将MBR和windows所在分区的引导扇区都装上引导程序,而不会提供任何选项给用户选择,因此如果之前装过其他操作系统,然后再另外装一个windows时,会把公用的MBR覆盖掉,如此,原来的操作系统就无法启动了。如果先装windows,然后装linux,linux 会覆盖MBR,然后让用户选择是否将windows等其他操作系统的启动项添加进来,如果你选择了添加进来,那么你在开机时就会有两个选项让用户进行选择了。
l 这里讨论的全部是硬盘相关的东西,光盘不在此列,而且光盘的磁道并不是从外圈到内圈编号,而是从内圈开始编号,这点注意。
l 硬盘第一个扇区是由MBR和分区表占据,因此0柱面0磁头上剩下的62个扇区一般会空出来保留(这部分保留称为隐藏扇区,因为操作系统读取不到这部分扇区,这部分扇区是提供给BIOS读取的),而系统分区则从0柱面1磁头1扇区开始,折算成LBA=255 × 63 × 0 + 63 × 1 + 1 – 1= 63,即从LBA 63号扇区开始分区。不过查阅有的资料提及到另外一种说法,那就是有的硬盘可能0柱面全部空下来,如果真是这样,那浪费可就真的大了。
l 对于扩展分区的分区表我们知道也是由扩展分区的第一个扇区开始写,而且是写到每个逻辑驱动器的第一个扇区,同样,扩展分区内的第一个扇区所在的磁道剩余的扇区也会全部空余出来,这些保留的扇区操作系统也是无法读取的,注意在扩展分区的第一个扇区里面是没有引导加载记录的。引导加载记录都是放在隐藏扇区后面的。
4.2.3 磁盘性能
磁盘是主要的物理存储设备,机械硬盘的性能受其转速(RPM),寻道时间(Seek Time)以及旋转延迟(Rotational latency)的影响,本文将描述如何通过这些参数计算磁盘的性能。
磁盘规格
机械硬盘的性能指标有三个重要的参数:
- 寻道时间 – 在磁道之间移动磁头所花费的时间
- 旋转延迟 – 盘片将数据旋转至磁头下的时间
- 传输速率 – 磁盘的带宽
理解这些参数之间的关系有助于了解一块磁盘的性能,这些值在决定磁盘性能的两个基本度量的时候非常有用:吞吐量和响应时间
寻道时间
寻道时间以毫秒(ms)来计算,不同磁盘的寻道时间不同。平均寻道时间是经常使用的度量,对于一块15k rpm的3.5英寸SAS盘,其平均寻道时间是3.8ms。减少磁盘寻道所花费的时间能增强性能。i/o类型也会影响寻道时间,连续i/o拥有最少的寻道时间,因为读写头可以在盘片上连续操作,而随机i/o就相对有较长的寻道时间,因为磁头始终需要在不同的磁道间切换。
延迟
延迟以毫秒(ms)来计算,更高转速的磁盘其延迟更小。下表显示了不同转速的磁盘所对应的延迟:
传输速率
传输速率以MB/s来计算,它又可以进一步分为内部/外部速率。内部速率是指在盘片上读写数据的快慢,盘片外圈速率要高于盘片里圈,而且对于同样的线性距离,也拥有更多的扇区。比如对于一个使用连续带宽的应用,3.5-inch 15k rpm SAS磁盘可以提供50MB/s的内圈速率以及100MB/s的外圈速率。
外部传输速率是指磁盘的连线头到HBA或NIC的传输速率。厂商通常给出的都是突发速率,且假定是内部连接(DAS)。对于存储系统来说,比如VNX,同一个RAID组内的磁盘是共享后端此部分速率的,因此通常达不到厂商给出的突发速率。存储系统的总线架构,实际传输速率更多是由后端传输协议、仲裁时间以及后端端口容量来决定的。
计算平均响应时间
平均响应时间是指一个请求从排队开始一直到执行结束所花费的时间,计算公式为:响应时间 = (队列长度+1)*平均响应时间 比如,某块磁盘的平均响应时间为6ms,队列长度为6,那么响应时间 = 42ms = (6+1)*6 ms
4.2.4 硬盘构造和IPOS计算
存储设备中最基本的单元是硬盘,对于性能有重要影响的也是硬盘,硬盘本质是一种机械装置,在这里我们简单谈谈硬盘的构造。硬盘是由盘体、磁头、电机、硬盘控制器组成。下面我们分别介绍硬盘的各种单元:
盘体一般由多个盘片组成,这些盘片重叠在一起放在一个密封的盒中。硬盘的盘片是将磁粉附着在圆盘片的表面上.这些磁粉被划分成称为磁道的若干个同心圆,在每个同心圆的磁道上就好像有无数的任意排列的小磁铁,它们分别代表着0和1的状态。当这些小磁铁受到来自磁头的磁力影响时,其排列的方向会随之改变。利用磁头的磁力控制指定的一些小磁铁方向,使每个小磁铁都可以用来储存信息。盘片在电机的带动下高速旋转,日常使用的笔记本硬盘每分钟转速达到5400转,我们的存储设备中使用的高性能硬盘转速每分钟达到7200转、10000转、15000转。转速的不同造成硬盘读写能力的不同,后面我们详细计算他们的IO处理能力。
硬盘的最重要的单元磁头:硬盘的磁头用来读取或者修改盘片上磁性物质的状态,一般来说,每一个磁面都会有一个磁头,从最上面开始,从0开始编号。磁头在停止工作时,与硬盘是接触的,但是在工作时呈飞行状态。磁头采取在盘片的着陆区接触式启停的方式,着陆区不存放任何数据,磁头在此区域启停,不存在损伤任何数据的问题。读取数据时,盘片高速旋转,由于对磁头运动采取了精巧的空气动力学设计,此时磁头处于离盘面数据区0.2---0.5微米高度的”飞行状态“。既不与盘面接触造成磨损,又能读写数据。
电机:硬盘内的电机都为无刷电机,在高速轴承支撑下机械磨损很小,可以长时间连续工作。高速旋转的盘体产生了明显的陀螺效应,所以工作中的硬盘不宜运动,否则将加重轴承的工作负荷。硬盘磁头的寻道饲服电机多采用音圈式旋转或者直线运动步进电机,在饲服跟踪的调节下精确地跟踪盘片的磁道,所以在硬盘工作时不要有冲击碰撞,搬动时要小心轻放。寻道电机控制下的磁头的运动,是左右来回移动的,而且幅度很小,从盘片的最内层(着陆区)启动,慢慢移动到最外层,再慢慢移动回来,一个磁道再到另一个磁道来寻找数据。
硬盘控制器即硬盘控制单元。是把计算机指令转化为硬盘动作的接口设备。它接收并解释计算机来的命令,向硬盘发出各种控制信号。检测硬盘状态,按照规定的硬盘数据格式,把数据写入硬盘和从硬盘读出数据。硬盘控制器类型很多,但它的基本组成和工作原理大体上是相同的,它主要由与计算机系统总线相连的控制逻辑电路,微处理器,完成读出数据分离和写入数据补偿的读写数据解码和编码电路,数据检错和纠错电路,根据计算机发来的命令对数据传递,串并转换以及格式化等进行控制的逻辑电路,存放硬盘基本输入输出程序的只读存储器和用以数据交换的缓冲区等部分组成。
了解了硬盘的构造我们来谈谈对硬盘性能最有影响的指标:IOPS,IOPS (Input/output Per Second)即每秒的读写次数,是衡量磁盘性能的主要指标之一。影响IOPS的因素是IO的服务响应时间,这其中包括一下三项时间。
1)盘片旋转延迟时间 (rotational latency)
2)磁头寻道时间 (seek time)
3)数据传输时间(Data transfer )
旋转延迟时间:即盘片转到磁头所在位置的时间,由于磁头需要读写的盘片位置是随机的,最远的需要旋转一圈,最近的可能就在磁头所在位置,所以我们取平均值,即盘片旋转半圈的时间来计算,假设硬盘电机转速10000rpm,那旋转一圈的时间是,1/10000=0.0001分钟,换算为毫秒0.0001X60X1000=6毫秒,半圈需要3毫秒。同样可算出15000rpm硬盘延迟时间2毫秒,7200rpm硬盘延迟时间4.17毫秒。
寻道时间:即磁头在盘片径向移动到正确磁道的时间,硬盘厂家标称平均值范围3-15ms,查询到4GB 15000rpm FC硬盘寻道延迟时间约为3.5毫秒,SATA硬盘约为8-9毫秒。
数据传输时间:是指完成传输所请求的数据所需要的时间,它取决于数据传输率,其值等于数据大小除以数据传输率。目前IDE/ATA能达到133MB/s,SATA II可达到300MB/s的接口数据传输率,数据传输时间通常远小于前两部分时间。因此,理论上可以忽略。
在日常存储设备选型中,硬盘的物理容量大小及接口类型对单个硬盘IOPS性能的影响可忽略,我们根据不同的硬盘转速及寻道时间计算IO性能来选择,以下常用的硬盘IOps理论值供参考
15000rpm 硬盘 1000/(2+3.5)≈180
10000rpm 硬盘 1000/(3+3.5) ≈150
7200rpm 硬盘 1000/(4.17+8) ≈ 80
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
5. 数据复制与容灾
5.1 容灾系统关键指标
对于信息系统而言,容灾就是使信息系统具有应对一定的灾难袭击,保持系统或间断运行的能力。目前,大家比较习惯用一些技术指标来衡量容灾系统性能、需求等等:
指标一,恢复时间目标(RTO: Recovery Time Objective),其以应用为出发点,即应用的恢复时间目标,主要指的是所能容忍的应用停止服务的最长时间,也就是从灾难发生到业务系统恢复服务功能所需要的 最短时间周期。RTO是反映业务恢复及时性的指标,表示业务从中断到恢复正常所需的时间。RTO的值越小,代表容灾系统的数据恢复能力越强;
指标二,恢复点目标(RPO: Recovery Point Objective),RPO是反映恢复数据完整性的指标,其以数据为出发点,主要指的是业务系统所能容忍的数据丢失量,见下图:
一般来说,RTO和RPO的值是根据实际的业务需求来确定的。从狭义上讲,容灾是通过在异地建立和维护一个备份存储系统,利用地理上的分离来保证系统和数据对灾难性事件的抵御能力。从广义上讲,任何提高系统可靠性与可用性的努力都可称之为容灾。
就EMC经典的容灾产品而言,试举两例:有SRDF(Symmetrix Remote Data Facility),它可以提供范围广泛的远距离复制功能,见下图:
EMC的VPLEX也可以通过VPLEX Metro和VPLEX Geo等实现远距离的数据访问和复制,见下图:
5.2 数据中心变革 – 从主动/被动到双活
本文从IT服务提供商的角度,介绍了传统主动/被动数据中心在运营方面的劣势和过度到双活数据中心对业务的的优势,以及通过EMC VPLEX Metro实施双活数据中心的一些条件。
IT服务提供商在理想情况下定位为想客户提供解决方案,以便帮助客户具有灾难恢复(DR)需求的业务。可满足灾难恢复需求的可行选项围绕数据备份服务和将数据复制到异地数据中心发展。甚至在将补助数据中心用作恢复站点时,它们仍在传统主动/被动实施中配置,而这仍意味着将给补助站点的生产环境带来重大宕机。如果发生灾难,这些解决方案预计会产生宕机和业务影响。根据服务,恢复时间目标(RTO)可能是数天,而这意味着会给许多组织带来灾难性的业务损失。灾难恢复到辅助通常意味着在某个时间点上环境必须“回切”到原始生产站点,从而给业务带来更多宕机。
传统主动/被动数据中心,在传统主动/被动部署中考虑基于云的基础架构时,主站点可用性方面存在许多限制。例如,在多个阵列之间或在数据中心之间远程实施VMware环境时,会出现许多挑战。这些可能是通过VMware vMotion重定位工作负载方面的挑战,而此类重定位传统上仅在同一数据中心内才能实现,或者工作负载需要使用VMware High Availability(HA)在恢复数据中心重启时才需要。站点故障或重大基础架构停机会导致应用程序中断,以及在停机需要手动干预时进行故障切换,甚至在使用VMware Site Recovery Manager(SRM)等灾难恢复工具时(如下图所示)。可能会显著影响业务运营和收入。
VPLEX带来数据中心之间的真正双活部署。越来越多的企业对防止业务运行发生任何可能会导致宕机的时间方面感兴趣。EMC VPLEX Metro可简化这些部署模型且支持附加可用性,这对于总体体系结构至关重要。通过VPLEX Metro,允许您跨多个阵列扩展,VPLEX Metro不单单是将环境限制为单个数据中心,而是允许我们跨多个数据中心扩展环境,从而提供真正的双活环境。(如下图所示)。在图中的配置中,两个数据中心都运行主动工作负载并且服务客户应用程序。主数据中心的数据立即可用并与辅助站点同步。EMC VPLEX和VMware结合成为更加全面的解决方案,因此业务几乎或完全不会宕机。它们携手提供VMware FT,HA和DRS的所有自动化优势,同时允许跨数据中心实施,而不是限制在数据中心内部。
VPLEX Metro使用两个VPLEX集群(每个数据中心一个)并具有独特功能,可支持通过直写缓存存在两个集群间镜像数据的同步分布式卷。由于VPLEX Metro分布式卷有VPLEX缓存一致性算法控制,因此可从两个数据中心进行分布式卷的主动数据I/O访问。这让VPLEX Metro可提供可提供的远比传统主动/被动复制解决方案多的多,并且跨数据中心支持真正的双活基础架构。
VPLEX会将同一数据块卷分发到两个数据中心,并且确保标准HA集群环境(如VMware HA和FT)可使用此功能,因此也可在服务提供商数据中心之间透明部署。最起码的要求是VPLEX Metro让主机集群相信节点之间没有距离,因此它们的行为如同在单个数据中心那样。要实施此配置,需要满足两个条件。首先,对于VMware云基础架构,站点之间的网络延迟需要为10ms或更短,根据底层基础架构和服务提供商提供的网络资源,这通常会将此类部署限制在同一城区内。但是,服务提供商可能已有网络基础架构,允许他们在更远距离满足10ms的延时要求。关键是延时,不是距离。