文章目录
- 1.存储基础
- 1.1 基础知识
- 1.1.1 存储基础
- 1.1.2 存储使用
- 1.2 文件系统
- 1.2.1 简介
- 1.2.2 数据存储
- 1.2.3 存储应用的基本方式
- 1.2.4 文件存储
- 1.3 小结
1.存储基础
学习目标:这一节,我们从基础知识、文件系统、小节三个方面来学习。
1.1 基础知识
1.1.1 存储基础
我们知道,对于一个计算机设备来说,其存储功能是非常重要的,也就是说,任何一台电脑上,必须包含一个设备 ---- 磁盘。
这个磁盘就是用于数据存储的目的的。
常见的存储设备接口:
DAS设备:IDE、SATA、SCSI、SAS、USB无论是哪种接口,它都是存储设备驱动下的磁盘设备,而磁盘设备其实就是一种存储,这种存储是直接接入到主板总线上去的。- 基于数据块来进行访问。- 基于服务器方式实现互联网访问,操作简单、成本低。
NAS设备:NFS、CIFS、FTP几乎所有的网络存储设备基本上都是以文件系统样式进行使用,无法进一步格式化操作。- 基于文件系统方式访问。- 没有网络区域限制,支持多种协议操作文件。
SAN:scsi协议、FC SAN、iSCSI基于SAN方式提供给客户端操作系统的一种块设备接口,所以这些设备间主要是通过scsi协议来完成正常的通信。scsi的结构类似于TCP/IP协议,也有很多层,但是scsi协议主要是用来进行存储数据操作的。既然是分层方式实现的,那就是说,有部分分层可以被替代。比如将物理层基于FC方式来实现,就形成了FCSAN,如果基于以太网方式来传递数据,就形成了iSCSI模式。- 基于数据块来实现访问。- 不受服务器约束,通过存储池实现资源的高效利用,扩展性好。
1.1.2 存储使用
对于存储的使用,我们需要借助于文件系统的方式来实现,而存储在使用前往往需要进行格式化。
1.2 文件系统
1.2.1 简介
文件系统的基本数据单位是文件,它的目的是对磁盘上的文件进行管理,那组织的方式不同,就会形成不同的文件系统。Linux文件系统会为每个文件分配两个数据结构:索引节点(index node)和目录项(directory entry),它们主要用来记录文件的元信息和目录层次结构。索引节点
1. 用来记录文件的元信息,比如 inode 编号、文件大小、访问权限、创建时间等信息。
2. 索引节点是文件的唯一标识,它们之间一一对应,也同样都会被存储在硬盘中,所以索引节点同样占用磁盘空间。
3. 用户查找的时候,会根据 inode 的信息, 找到对应的数据块,我们可以将 inode 理解为数据块的路由信息。目录项
1. 用来记录文件的名字、索引节点指针以及与其他目录项的层级关联关系。多个目录项关联起来,形成目录结构。
2. 它与索引节点不同,目录项是由内核维护的一个数据结构,不存放于磁盘,而是缓存在内存。
3. 目录项和索引节点的关系是多对一。
1.2.2 数据存储
数据块
1. 磁盘读写的最小单位是扇区,扇区的大小只有 512B 大小,文件系统把多个扇区组成了一个逻辑块,每次读写的最小单位就是逻辑块(数据块),Linux中的逻辑块大小为 4KB,也就是一次性读写 8 个扇区,这将大大提高了磁盘的读写的效率。
2. 磁盘想要被文件系统使用,需要进行格式化,此时磁盘会被分成三个存储区域2.1 超级块,用来存储文件系统的详细信息,比如块个数、块大小、空闲块等等。2.2 索引节点区,用来存储索引节点。2.3 数据块区,用来存储文件或目录数据。
1.2.3 存储应用的基本方式
为了加速文件的访问,通常会把相关信息加载到内存中,但是考虑到内存的容量限制,它们加载进内存的时机是不同的:
1. 超级块:当文件系统挂载时进入内存。
2. 索引节点区:当文件被访问时进入内存。
3. 数据块:文件数据使用的时候进入内存。
1.2.4 文件存储
文件的数据是要存储在硬盘上面的,数据在磁盘上的存放方式,有两种方式:连续空间存放方式
1. 同一个文件存放到一个连续的存储空间
2. 一旦文件删除可能导致磁盘空间碎片
3. 文件内容长度扩展不方便,综合效率是非常低的。非连续空间存放方式
1. 同一个文件存放到一个不连续的存储空间,每个空间会关联到下一个空间
2. 可以消除磁盘碎片,可大大提高磁盘空间的利用率,同时文件的长度可以动态扩展。
3. 查找效率低,需要额外的资源消耗。
1.3 小结
参考学习:kubernetes存储解决方案Ceph