文件系统
硬盘是低速设备,其读写单位是扇区,为了避免频繁访问硬盘,操作系统不会有了一扇区数据就去读
写一次磁盘,往往等数据积攒到“足够大小”时才一次性访问硬盘,这足够大小的数据就是块,硬盘读写
单位是扇区,因此一个块是由多个扇区组成的,块大小是扇区大小的整数倍。在 Windows 中,块被称为
簇,比如在 Windows 中格式化分区时,若选择文件系统类型为 FAT32,我们还可以选择多种不同大小的
簇,有 4KB、 32KB 等。
当文件体积大于 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的各个磁盘上,并且奇偶校验信息和相对应的数据分别存储于不同的磁盘上
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)