文件系统将硬盘空间以块进行划分,每个文件占用其中的几个块,然后再通过一个文件控制块 FCB 记录每个文件占据的硬盘数据块。

image-20231115093943594

在linux中,这个文件控制块就是inode,想要访问文件,就要先获取这个inode,然后在inode中查找文件数据块的索引表,根据索引中记录的硬盘地址信息来访问硬盘,读写数据。

inode的结构是固定的,只有15个索引,前12个索引直接指向数据块地址,第13个索引记录索引地址,即不直接指向数据块,而是指向一张索引表,每张索引表可以记录256个索引,访问这里的数据需要多一次查找。第 14 个索引记录二级索引地址,第 15 个索引记录三级索引地址。

RAID

RAID,即独立硬盘冗余阵列,将多块硬盘通过硬件 RAID 卡或者软件 RAID 的方案管理起 来,使其共同对外提供服务。

RAID 的核心思路其实是利用文件系统将数据写入硬盘中不同数据块的特性,将多块硬盘上的空闲空间看做一个整体,进行数据写入,也就是说,一个文件的 多个数据块可能写入多个硬盘。

RAID常用的方式有5种,分别是 RAID 0、RAID 1、RAID 10、 RAID 5 和 RAID 6。

RAID 0

该方式是将一个文件的数据分成N块,然后同时写入N个硬盘,这样单个文件可以存储在N个硬盘上,文件容量可以扩大N倍,理论上读写速度也扩大N倍。但是有一个问题,这N个磁盘任何一个损坏,就会导致文件的不完整。文件可用性降低。

RAID 1

利用两块硬盘进行数据备份,文件同时向两块硬盘写入,这样任何一块硬盘损坏都不会出现文件数据丢失的情况,文件的可用性得到提升。

RAID 10

将多块硬盘进行两两分组,文件数据分成 N 片,每个分组 写入一片,每个分组内的两块硬盘再进行数据备份。这样既扩大了文件的容量,又提高了文件 的可用性。但是这种方式硬盘的利用率只有 50%,有一半的硬盘被用来做数据备份。

RAID 5

RAID 5 针对 RAID 10 硬盘浪费的情况,将数据分成 N-1 片,再利用这 N-1 片数据进行位运算,计算一片校验数据,然后将这 N 片数据写入 N 个硬盘。这样任何一块硬盘损坏,都可以 利用校验片的数据和其他数据进行计算得到这片丢失的数据,而硬盘的利用率也提高到( N - 1/N)。

分布式文件系统

文件的inode,是以索引的方式记录每个文件所在的磁盘位置,如果这些索引记录的不是在本地的磁盘位置,而是记录一个其他服务器的地址,那么查询到的数据块就不止是本地磁盘,还可以是其他服务器的磁盘。这样磁盘的容量就是整个分布式集群的大小,读写速度也会加快。

这样的文件系统就是分布式文件系统,将文件分成很多片,同时向多台服务器写入,然后做好备份,解决单一服务器崩溃导致文件缺失的情况。