文件系统简述:从基础存储到大数据

用户头像
破晓_dawn
关注
发布于: 2020 年 07 月 22 日

linux Inode文件存储

文件系统将硬盘空间以块为单位进行划分,每一个文件占据若干块。“块”大小,最常见的是4KB。为了找到文件,还需要存储文件的元信息,操作系统将这些信息存储到文件控制块FCB。通过文件控制块FCB可以找到每个文件块占据的硬盘数据。

Linux将FCB中的文件名和其他管理信息分开,其他信息组成Inode,inode中记录着文件权限、所有者、修改时间、文件大小等。

Inode是固定结构,能记录的硬盘地址索引数量固定15个。前12个索引直接指向数据块。

如果文件大小超过了12个块。后3个索引为索引表指针,分别一级间接索引表指针,二级间接索引表指针,三级间接索引表指针,索引表记录了数据块地址。

对于能存储的最大文件大小。简化起见,按每个块1KB来算。

12个指针指向数据块:12 * 1K = 12K

一级间接索引表指针,指向一个1K的数据块,该数据块中记录了数据块的索引,每个 数据块 索引占 4bytes,因此 1K 的大小能够记录 256 个记录,因此,一级间接索引表指针可以存储:256 * 1K = 256K

同理,二级间接索引表指针可以存储:2562561K=256^2K,

三级间接索引表指针可以存储:2562562561K=256^3K即,总共可以存储:12 + 256 + 256256 + 256256256 (K) = 16GB

(PS:由于大于 2K 的 block 将会受到 Ext2 文件系统本身的限制,因此,这个方法不能用在 2K 及 4K block 大小的计算中)

RAID独立硬盘冗余阵列

文件系统关心的问题有:

  • 如何存储大文件?

  • 文件如何不丢失?即高可用

  • 更高速度的读写?

传统的文件系统无法满足这三个需求,因此,有了 RAID独立硬盘冗余阵列 解决方案。

  • RAID 0 如果有写3个数据块的操作,或写到三个不同的硬盘上,即,把数据并行的写在不同的硬盘上。解决数据的告诉读写问题。任何一块硬盘坏了,数据就损坏了。

这种方案,性能提高了,但是,可用性降低

  • RAID 1 在两个硬盘写同样的数据。数据的可用性提高了,但是速度变慢。

  • RAID 10 两两互相备份,8台服务器分成4组。硬盘的浪费比较严重。利用率低。浪费1倍。

  • RAID 5 所有数据进行异或运算记录,当任何块损坏,用剩下的磁盘和校验数据异或,都可以恢复。浪费一块。

需要注意,校验信息螺旋写入的。如果写到1块盘上,任何数据的修改,都会修改这块盘中的校验信息,写压力太大,这块盘也容易坏。

  • RAID 6 :RAID 5只可以处理一块盘坏了的情况,RAID 6扩展了RAID 5写两种校验信息,即使损坏两块盘也可以找回数据。

分布式文件系统 HDFS

随着需要存储的数据量增大,需要文件系统有更高的写入速度,和更大的管理能力,由此,产生HDFS。

NameNode负责接受客户端的读写服务,管理文件存储位置信息等。

DataNodes负责是具体的数据读取,写入,存储,冗余等。

为了保证数据的高可用,HDFS默认三备份存储数据。

  • 第一个副本:放置在上传文件的DataNode;如果是集群外提交,则随机挑选一台磁盘不太满,CPU不太忙的节点。

  • 第二个副本:放置在于第一个副本不同的机架上,即使路由到第一个机架失败,或第一个机架故障,也可以保证数据可用。

  • 第三个副本:放置在与第二个副本相同机架的节点上。

通过跨服务器,跨机架,HDFS保证了数据的可用性。

正常运行时,DataNode会定时发送心跳包给NameNode,当DataNode超时未发送心跳,认为该DataNode异常。NameNode会检查DataNode上有哪些数据块,并告诉其他机器机器复制这些数据块。

HDFS缺省数据块64M一个块,因此,可以很好的保存大文件。



参考:

极客时间——架构师训练营资料

https://www.cnblogs.com/caiyao/p/4606638.html

https://www.jianshu.com/p/5f00ec80a13c

https://zhuanlan.zhihu.com/p/54961640



发布于: 2020 年 07 月 22 日 阅读数: 46
用户头像

破晓_dawn

关注

慢慢,稳稳 2017.12.06 加入

业余选手,但是有一颗向往专业的心

评论

发布
暂无评论
文件系统简述:从基础存储到大数据