存储介质简介
1. 光介质存储
介质: 光盘
存储原理:
- 刻录后 暗(被刻录后会有凹槽,不反光)表示1;亮表示0;
2. 磁介质存储
介质: 磁带,磁盘等
存储原理:
磁道中的不稳定磁性颗粒,经过磁头磁化后会变得有序,有序后指向南北极的方向不同,以此来区分0和1
- 磁带:条状磁道。
- 磁盘:有硬磁盘和软磁盘,圆状磁道。
3. flash(闪存)
介质: 固态硬盘,U盘,SD卡等
存储原理:
闪存颗粒中有存储单元,存储单元中存储电荷。控制栅极可以将电荷存储在存储单元中。
通过存储单元中的电荷有电压,达到某个阈值表示一个数值没有达到表示另一个数值,一个存储单元表示的数值有不同玩法,通常分为SLC、MLC、TLC、QLC。SLC更稳定
- SLC:一个存储单元表示1bit的数据,达到阈值表示1达不到表示0
- MLC:一个存储单元表示2bit的数据,根据阈值范围划分为00,01,10,11
- TLC:一个存储单元表示3bit的数据,根据阈值范围划分为000,001,010,011,100,101,110,111
- QLC:一个存储单元表示4bit的数据,同上
缺点: 寿命短,不利于持久化存储。企业上一般使用磁介质硬盘来做永久化存储,闪存当做缓存来使用。因为磁介质一旦经过磁化只要不是物理损伤数据不会丢失。
硬盘存储原理
磁盘组件
磁头摆臂可以摆动,盘片由主轴控制转动,如此以来磁头就能读取到盘片的所有磁道的数据。数据通过磁盘接口由总线发给计算机系统。
一个硬盘中可以有一个或多个盘片。盘片也可以分为单面和双面,双面表示盘片的正反两面都有磁道能存数据。
磁盘是如何存储文件的
早期磁盘存储数据方式:
磁盘存储文件时的最小单位为扇区sector,早期磁盘的寻址方式是CHS(cylinkder head sector)也就是先找到柱面再通过磁头编号找到磁道,再找到扇区。一个扇区是512Byte,若文件大于512Byte则需要跨扇区存储,但是这些扇区不一定连续这就导致读取数据时比较麻烦。
【什么是柱面】:比如一个硬盘有3个盘片,俯视图看有10个磁道,柱面就是俯视所有盘面的同一个磁道称为一个柱面。比如这三个盘面每一面的1号磁道的集合称为1号柱面,这一柱面有3个磁头分别指向这3个盘面的1号磁道。所以通过柱面-磁头编号就可以确定是哪个盘面的哪个磁道,在通过扇区找到要读取的数据。
目前主流磁盘的存储方式:
由于扇区的颗粒度太小,很容易跨扇区存储。所以后来有了block块(Linux下叫block)(windows下叫存储单元cluster),这是一个逻辑概念。
当你在格式化磁盘的时候windows下默认一个存储单元是4096字节(也可以手动修改),这4096字节是连续的8个扇区逻辑出来的一个块区域。格式化这个动作就是将这个磁盘的所有扇区全部按8个8个分成多个块区域,对文件系统来说他看到的最小存储单元就是一个块。
这就是你在windows上即使创建一个1字节的文件,通过文件右键->属性看到的占用空间却是4096字节的原因。
【空文件为什么占用空间是0字节】:因为文件分为描述数据(元数据metedata)和实际数据,而描述数据是有一个单独的存储位置。意味着这个文件并没有实际内容与扇区一一对应。当你往这个文件中写入一个字节的数据,这时就会占用一个块区域。
【为什么是4096字节】:虽然格式化时可以修改一个块的大小,但是最小也不能小于512字节,因为一个扇区就是512字节(这是真实的物理大小改变不了)。而文件系统存储文件的时候是按照块为最小单元来存储的,设置太大造成文件浪费,设置太小又会出现很多个跨块区域的数据。权衡后的大小就是4096字节。可以根据需求来调整格式化时的块区域大小,比如存的都是几个字节的零碎文件那就可以设置小一点,要是存的都是大文件那么就可以格式化的大一些,提高磁盘使用率。
磁盘的性能
对于硬件来说磁盘性能表现在:
5400rpm:平均旋转延时:5.5ms
15000rpm:平均旋转延时:2.0ms
所以可以看到机械硬盘的瓶颈很明显,转速越快产生热量越多,所以注定性能快不了。
- 寻道速度:磁头摆臂速度
- 盘片转速:主轴的转速
对操作系统来说磁盘的性能表现在:
通常企业上要使用IO高和高吞吐,都会选择flash,而且flash抗震。但是flash不适合永久化数据存储,可以先存到flash再由flash往慢速硬盘中导入。
- IOPS:读写次数
- 吞吐:带宽
存储接口与存储协议
硬盘与内存数据交互过程见下图:
接口类型
-
ATA-高级技术附加-并行接口:也称为IDE接口,早期并行接口,现在已经被淘汰。(早期个人使用)
ATA总线是一个慢速总线,总线中的数据交互需要遵循ATA协议。驱动协议指令最大速率只能到133MBps
ATA为什么慢:- 使用的是并口而不是串口:虽然并行可以一次发送多个bit的数据,但是并行接口需要等排线上的数据都准备好才能发送,大多时间都在等待。而串行虽然只能一bit一bit发,但是不需要等待。还有一个原因是线路之间的电磁干扰,必须有协调机制来保证并行的数据的正确性,而这种协调机制就会导致前面说的等待。
-
SATA:ATA总线的串行升级版本。(个人使用)
- SATA1.0标准速度:1.5Gbps
- SATA2.0标准速度:3Gbps
- SATA3.0标准速度:6Gbps (600MBps)
- 支持驱动协议指令ATA133MBps-ATA总线:它是并行协议。
- 支持驱动协议指令AHCI指令:高级主机控制接口协议,它是一个串行协议。
SATA接口可以使用串行或并行的方式传输协议,这取决于使用什么驱动程序。
-
SATA-E接口:可以走SATA总线,也可以走PCIE总线。可以向下兼容SATA。
-
M.2接口:
- B-key接口:支持SATA3总线,使用AHCI指令。最高6G
- M-key接口:支持PCIE3.0 *4总线,使用NVMe协议指令。最高32G
-
U.2接口:支持PCIE *4总线,使用NVMe协议指令。最高32G
-
PCI-E接口:支持PCIE *4总线,使用NVMe协议指令。最高32G
-
MINI-PCIe接口:存储能力等同于SATA,只不过接口大小较小,适合放在笔记本中。
-
SCSI:小型计算机系统接口。早期为IBM为小型机器指定的,现在已经算是一种公开标准。并行接口,对应SCSI协议,SCSI总线。但是他是并行接口,所以很慢。(早期企业使用)
- 企业中基本不用SCSI接口,但是会用SCSI协议和SCSI总线。
- SCSI是主机与磁盘通信的基本协议。
-
SAS:串行版本的SCSI,使用串行的SCSI指令。(企业使用)
- SAS驱动协议:支持串行SCSI指令、ATA指令、AHCI指令
- SAS完全兼容SATA。
- SAS总线可以连接一个expander,一个expander可以挂128个expander,每个expander可以连接128个硬盘。
-
实物展示:
- SATA硬盘可以插入到SAS接口上,但是SAS硬盘不能插入到SATA接口。
- SAS接口如果插入了SATA硬盘,可以走AHCI协议或串行的SCSI协议。
- SATA接口只能插SATA硬盘。
SCSI
SCSI的寻址方式
- 首先找到总线(BUS)ID(通道ID)
- 其次找设备ID
- LUN-逻辑单元:logic unit number,逻辑设备
- LBA-逻辑块区域:类似上面磁盘存储原理中说到的block
windows下查看SCSI寻址
接口与总线与协议的对应关系
cpu是如何控制存储的
南桥北桥:
● 早期北桥和南桥都在cpu外部通过总线通信:cpu -FSB总线->北桥-DMI总线->南桥。
● 后来的计算机,北桥都被集成到了CPU中,外部只有南桥(改名PCH:平台控制器总线芯片)。所以现在的计算机也就没有南桥北桥之说。
DMA直接内存访问:
● 若CPU中没有DMA时,cpu进行io任务的时候有两种方式:
- 磁盘查询:效率底浪费cpu资源。cpu不停的询问硬盘能不能进行io当io准备好了才能进行io任务,一般硬盘会给cpu回复两种状态"busy"和"ready",只有cpu收到ready的时候才会执行io任务。
- 中断:cpu给磁盘发送我要进行io的指令然后继续进行其他任务,磁盘接收到指令后在ready状态的时候发起io中断提醒cpu进行io任务。
● CPU中集成了DMA时:
- cpu要执行io任务的时候将io控制权暂时交给DMA控制单元,DMA帮CPU去完成io任务(方式:io中断),cpu除了跟DMA通信外不需要跟磁盘交互,cpu可以继续执行其他运算任务。DMA处理好了后通知CPU,CPU收回io控制权。
文件系统
简述:
- 文件系统以树形目录的方式组织计算机数据,直接与物理磁盘的块区域交互,让我们在使用计算机的过程中对物理磁盘的存储无感知,我们只需要记录文件名和目录即可。
- 文件系统与磁盘交互的方式是文件系统维护着文件与底层LBA地址的映射关系。
常见的文件系统
不同的操作系统能识别不同的文件系统,有些文件系统可以被所有主流操作系统识别。
windows:
- FAT16、FAT32、NTFS、exFAT
Linux:
- ext、ext2、ext3、ext4、XFS、ISO9660、Minx、MSDOS、UMSDOS、VFAT、NTFS、HPFS、NFS、SMB、SysV、PROC、exFAT
MAC OS:
- APFS、HFS+、exFAT
文件系统中块存储与文件的关系
当主机接入块设备的时候(LUN)通过驱动协议(SCSI)与扇区(sector)通信。
- 磁盘首先将磁盘进行分区(按照磁盘大小分)得到盘符。
- 将盘符格式化,将对应的block块链接到这个分区,完成文件系统的创建。
- 每个分区中都有一个单独的存储空间用来保存元数据(Linux中叫inode)信息(文件描述信息、mapping映射LBA关系)。所以格式化后的大小会略微小于分区的总大小。
注意:
- 对windows系统来说操作系统会默认保留100M的保留分区来存储引导程序。
- 分区是个逻辑的概念,既可以压缩也可以扩展。
- 格式化重新对磁盘上的block划分,此时可能会导致数据丢失。
- 格式化分为快速格式化和常规格式化。快速格式化不会对block填0,而常规格式化会将该分区对应的block全部填0
- windows下分区有两种方式,MBR(最大2T)和GPT(大小无限制)。
存储链接方式
DAS
- 全称:Direct Access Storage(直连存储)
- 特点:
- 通过存储线缆直接将数据传入主机,不通过网络。
- 对主机提供的是一个块级别的存储。也就是说没有文件系统,需要进行分区格式化后才能使用。
SAN
- 全称:Storage Area Network(存储区域网络)
- 特点:
- 有单独的网络来进行传递数据的存储指令。
- 有单独的存储设备来进行存储——集中式存储。
- SAN的本质是通过网络数据包的形式将SCSI指令进行封装后,通过网络设备发送给存储设备。
- SAN对主机提供的是块级别的存储。
- SAN的网络通常情况下使用光纤网络。
- SAN封装SCSI指令的方式:针对不同的封装方式称为FC-SAN和IP-SAN
-
FC:有自己单独的协议框架,无法和以太网兼容。FC对应有FC光纤交换机,FC接口。如果想使用FC网络必须使用FC接口和FC光纤交换机(FC接口必须走光纤)。
-
ISCSI:支持TCP/IP协议,可以使用以太网的接口和交换机来传输数据。
-
SAN接口的工作原理
主机本身是不能将SCSI指令转化成FC或ISCSI指令,所以需要一个硬件来完成这项工作,它就是HBA卡。
HBA卡分为FC-HBA卡和ISCSI-HBA卡。
FC-HBA:
ISCSI-HBA:
IPSAN数据传输过程:
- 服务器在内存中产生数据。
- 内存将SCSI指令通过总线发送给ISCSI-HBA卡。
- ISCSI-HBA卡将SCSI指令封装成ISCSI指令,这个指令中带了以太网的数据包。
- 将数据包通过以太网发送给存储设备。
- 存储控制器从Ethernet接口接收ISCSI指令数据包,解析成SCSI指令进行数据的存储。
IPSAN的优势:
- 接入标准化:不需要专用的HBA卡和光纤交换机,普通的以太网卡和交换机就可以实现存储和服务器的连接。
- 传输距离远:理论上IP网络可达的地方就可以使用IPSAN。
- 可维护性好:IP网络技术的维护人员群众广大,维护工具齐全。
- 带宽扩展方便:随着10Gb以太网的迅速发展,IPSAN单端口带宽扩展到10Gb已经是趋势。
ISCSI可以使用身份认证
- ISCSI中可以开启身份认证(CHAP:用户名/口令)也可以不开启。
- 如果开启了CHAP,会在ISCSI中创建关联角色IQN-ISCSI限定名称(限定名称表示一个目标的连接),因为一个ISCSI发起段可以有多个目标,而这些目标需要有个区分,这时就需要IQN来标记每个目标。
注意:
- FC-SCSI只能通过FC-HBA卡来进行封装。ISCSI可以由模拟软件通过CPU封装然后通过光纤网络发送给存储设备,也可以由ISCSI-HBA卡来封装。
- FCoE:FC支持以太网传输的过渡协议版本,极少有场景使用。
- 以太网中一个包的数据最大1500字节(虽然可以设置这个最大值)导致IPSAN的速度不如FCSAN。FCSAN的一个数据包很大,发送速度较快,但是现在IPSAN的速度也在进步,使用更加广泛。
HBA卡实物展示
存储设备
存储设备分为硬盘框和控制框:
- 存储控制引擎(控制框):控制整个存储规划,空间划分。提供IO接入功能。
- 硬盘框存储阵列(硬盘框):负责最终的数据存储。
- 盘控一体:控制框和硬盘框在一起。
- 盘控分离:控制框和硬盘框之间使用的DAS方式连接,控制框对外提供IO接口,供外部访问。
NAS
- 全称:Network Access Storage(网络访问存储)
- 简述:通过存储为用户提供文件级别的存储。可通过TCP/IP协议做文件共享
- eg:smba工具
NAS共享协议
- SMB协议:Windows平台下service message block 服务消息块,对应CIFS文件系统。
- NFS:unix平台下Network File System,对应NFS文件系统。
NAS设备组件:
- NAS引擎-控制器:负责I/O接入 | NAS空间划分。
- NAS后端存储硬盘框:负责写入数据。
- 一体化NAS:包含NAS引擎和硬盘框。
- windows下win+R–>运行–>//ip/filepath–>看到共享目录。实际上是通过SMB协议访问CIFS文件系统。
- linux下需要安装smba软件来支持smb协议。
- mac系统下运行框–>smb://ip/filepath–>看到共享目录。
- 访问NFS共享存储:
- windows下需要安装NFS客户端,在windows功能下开启。
- Linux下需要安装NFS客户端。
- mac下需要安装NFS客户端。
NAS、SAN、DAS的区别
- DAS:为我们提供的是块级别的直连存储。支持SCSI、SATA总线协议。
- SAN:为我们提供的是块级别的网络存储,需要特殊的网络设备。支持iSCSI、FC协议。
- NAS:为我们提供的是文件级别的网络存储,普通的网络即可。常用来做共享存储。
RAID磁盘冗余与逻辑卷LUN
- 描述:Redundant array of independent disks(RAID)独立硬盘冗余阵列。
- 作用:
- 提升主机的存储速度。
- 确保存储的正确性。(可靠性)
- 原理:多个硬盘组成的一个阵列集群,对主机来说只能看到一个逻辑硬盘。提高并行读写效率。
RAID
当硬盘加入到RAID集群后,需要对硬盘进行条带化-Strip(逻辑块)
【什么是条带化?】
硬盘中单个或多个连续的扇区构成条带,他是一块硬盘上进行一次数据读写的最小单元,类似于block块。
集群中的每个磁盘都必须先有自己的条带,阵列中每个磁盘的相同"位置"(或者说相同编号)条带的集合组成一个分条,分条是提供给主机访问逻辑硬盘的最小存储单元。
怎么实现数据的可靠性:
- 方法一:通过数据镜像副本
- 方法二:通过算法实现冗余副本
RAID模式
RAID0、RAID1、RAID3、RAID5、RAID6、RAID10、RAID01
- RAID 0:通过条带分条技术实现提升并行写入速度。但是无法提供数据可靠性,如果一个磁盘损坏,那么这整个分条的数据就被损坏了。
- RAID 1:通过镜像技术实现数据备份。但是无法提升写入的速度,可以提升读取速度。因为数据有多份可以并行读取。
- RAID 3:带奇偶校验。允许任何一个盘损坏,P盘是不与主机I/O通信的。
【为什么可以允许一个磁盘损坏?】
因为奇偶校验的原理是异或运算,任何一个盘的损坏都可以通过其他盘的数据根据异或算法推理得到。
eg:比如现在有上图中5个盘,数据盘的数据为0、1、0、1那么校验盘的数据计算方式为按顺序从前往后异或,0⊕1=1,1⊕0=1,1⊕1=0;所以P盘的数据就是0。当disk0盘损坏,依然可以通过逆向异或推理得到disk0的数据是0 - RAID 5:原理同RAID3一样,但是没有独立的硬盘来存储校验数据。通过分布式存储算法将校验数据分布存储在数据盘中。同样只允许损坏一个硬盘。
- RAID 6:原理同RAID5,但是多增加了一个q校验数据来保证数据的可靠性。允许任意两块盘损坏。
- RAID 10:先将两块硬盘做RAID1,再将两块RAID1的硬盘做RAID0。比如有4个盘两两分组分为组1和组2。组内使用RAID1,外层对组1和组2做RAID0;
- RAID 01:先将两块硬盘做RAID0,再将两块RAID0的硬盘做RAID1。举例同RAID10;
RAID不同模式的有效空间:
- RAID 0:利用率100%
- RAID 1:利用率50%
- RAID 3:N-1
- RAID 5:N-1
- RAID 6:N-2
- RAID 10:利用率50%
- RAID 01:利用率50%
RAID实际应用模式推荐:
- RAID 5:推荐4盘位
- RAID 6:最少4盘位,推荐6盘位
RAID实现方式:
- 通过RAID模拟软件,来模拟RAID实现。主机的存储是跟RAID软件交互。(不推荐使用)
- RAID卡插在主板上,RAID卡提供了接口可以连接硬盘,主机只能看到RAID的逻辑磁盘。主机的存储是跟RAID卡交互。这种方式的RAID模式需要进入主板BIOS中设置。
注意:
服务一般运行在操作系统上,而操作系统也存储在一个硬盘上,若恰好操作系统所在的磁盘挂了那么整个服务都将瘫痪。所以一般有两种方式去报操作系统的可靠性:
- 先做RAID,然后再做系统。
- 在存储设备做RAID,在RAID的基础上闯将逻辑卷(LUN)系统装在LUN上。如此做法即使主机挂了,换一个主机再映射这个LUN数据和系统依然在。
LUN逻辑卷
企业使用时,一般是将多个磁盘先通过RAID技术做一个大的物理硬盘,在RAID的基础上可以创建多个逻辑卷(LUN),这个LUN对于存储设备来讲可以当作是个逻辑分区,而这个LUN在主机中认为它是一块磁盘(块设备)。
LUN是一个存储设备中的逻辑分区,但是可以作为一个独立的块设备映射给主机。
LUN通常情况下作为服务器的数据盘