文件系统

 

硬盘是低速设备,其读写单位是扇区,为了避免频繁访问硬盘,操作系统不会有了一扇区数据就去读
写一次磁盘,往往等数据积攒到“足够大小”时才一次性访问硬盘,这足够大小的数据就是块,硬盘读写
单位是扇区,因此一个块是由多个扇区组成的,块大小是扇区大小的整数倍。在 Windows 中,块被称为
簇,比如在 Windows 中格式化分区时,若选择文件系统类型为 FAT32,我们还可以选择多种不同大小的
簇,有 4KB32KB 等。

当文件体积大于 1 个块时,文件肯定被拆分成多个块来存储,那么问题来了,这多个块该如何
组织到一起?
有两种方式,

第一种,是在一个块的尾部,标记下一个块的地址。问题是,需要顺序访问

 

 

 

第二种,是采用目录索引的方式。

 

 

 如果文件太大,而目录不能太长(访问变慢),怎么办呢?

答案是多级目录。

Linux的文件系统借鉴了 inode 结构,同样是一个文件具有一个 inode 一个磁盘所具有的inode的数目是固定的,文件数量有最大值的。

 

 

 inode 的数量等于文件的数量,为方便管理,分区中所有文件的 inode 通过一个大表格来维护,此表格
称为 inode_table,在计算机中表格都可以用数组来表示,因此 inode_table 本质上就是 inode 数组,数组元素
的下标便是文件 inode 的编号。

Linux 中,目录和文件都用 inode 来表示 。那么如何区分普通文件Inode和目录呢。答案是,标记文件类型

 

 

 

有了目录项后,通过文件名找文件实体数据块的流程是,
1)在目录中找到文件名所在的目录项。
2)从目录项中获取 inode 编号。
3)用 inode 编号作为 inode 数组的索引下标,找到 inode
4)从该 inode 中获取数据块的地址,读取数据块。 

 

文件类型可以有很多种

 

 

下一个问题,inode 数组在哪里?大小是多少?

我们需要在某个固定地方去获取文件系统元信息的配置,这个地方就
是超级块,超级块是保存文件系统元信息的元信息。

超级块是文件系统元信息的“配置文件”,它是在为分区创建文件系统时
创建的,所有有关文件系统元信息的配置都在超级块中,因此超级块的位置和
大小不能再被“配置”了,必须是固定的,它被固定存储在各分区的第 2 个扇
区,通常是占用一个扇区的大小,具体大小与实际文件系统类型为准。

 

用inode位图来管理 inode 的使用情况。

空闲块也是有限的,因此空闲块的使用情况也需要被跟踪,所以也要为这些空闲块准备位图。

每个分区都有自己的根目录,根目录的地址同样是固定的。

整体来看是这样:

 磁盘存储:

RAID 独立磁盘冗余阵列 

简单的说,RAID是一种把多块独立的硬盘(物理硬盘)按不同的方式组合起来形成一个硬盘组(逻辑硬盘),从而提供比单个硬盘更高的存储性能和提供数据备份技术。

 

RAID 0提高存储性能的原理是把连续的数据分散到多个磁盘上存取,这样,系统有数据请求就可以被多个磁盘并行的执行,每个磁盘执行属于它自己的那部分数据请求。这种数据上的并行操作可以充分利用总线的带宽,显著提高磁盘整体存取性能。但是不提供数据冗余。

\

 

 

 

 

RAID 1通过磁盘数据镜像实现数据冗余,在成对的独立磁盘上产生互为备份的数据。当原始数据繁忙时,可直接从镜像拷贝中读取数据,因此RAID 1可以提高读取性能。RAID 1是磁盘阵列中单位成本最高的

 

 

RAID 4, 一块多的磁盘,存奇偶效验信息。

 

 

 

 RAID5把数据和相对应的奇偶校验信息存储到组成RAID5的各个磁盘上,并且奇偶校验信息和相对应的数据分别存储于不同的磁盘上

 

posted @ 2020-03-18 22:19  Esther_Cheung  阅读(197)  评论(0编辑  收藏  举报