文章目录
- 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