实现分布式文件系统(一)steemCreated with Sketch.

in cn •  7 years ago 

初识文件系统

什么是文件系统?

在我们实现一个分布式文件系统之前,我们首先要回答一个问题,什么是文件系统?文件系统是一套实现了数据的存储,分级组织,访问和获取等操作的抽象数据类型。通俗一点讲,文件系统是在存储设备上进行数据的组织和管理的一套机制。数据又包含原始数据和元数据。

从上面的解释中,我们能提炼出几个关键词,存储设备元数据

  • 存储设备:比如SATA磁盘 SAS磁盘
  • 元数据:直接解释为描述数据的数据,即对某项数据的具体描述信息。在文件系统中,则是对某个文件的描述信息,比如文件存储路径,大小,文件名,文件类型等等。

我们熟悉的文件系统类型:

  • ext:ext2,ext3,ext4,GNU/Linux文件系统。
  • HFS:mac os使用的文件系统。
  • NTFS:windows使用的文件系统。

文件系统的基本原理

上述文件系统和操作系统,磁盘相关。接下来我们以linux中使用的文件系统ext为例,讲解一下文件系统的运作过程。

首先我们来认识一下磁盘的物理组成(鸟哥的linux私房菜有介绍):

  1. 圆形的盘片(主要记录数据部分)
  2. 机械手臂,机械手臂上的磁头(可读写盘片上的数据)
  3. 主轴马达,可以转动盘片,让机械手臂的磁头在盘片上读写数据。

数据存储和读写的重点在于盘片,盘片的物理组成为:

  1. 磁道:磁头若保持在一个位置上,则每个磁头都会在磁盘表面划出一个圆形轨迹,这些圆形轨迹就叫做磁道。
  2. 扇区:每个磁道被等分为若干个弧段,这些弧段便是扇区,扇区为最小的物理存储单位,根据磁盘设计不同,目前主要有512个字节和4K两种格式。
  3. 柱面:扇区组成一个圆就是柱面,柱面数和磁道数相同。

硬盘的容量=柱面数x磁头数x扇区数x512B/4K

再来了解三个概念:

  • inode: 记录文件的属性,一个文件占用一个inode,相当于文件的索引(记录文件数据的block编号,权限信息等等的)
  • block: 实际记录文件的内容,一个block大小一般为1K,2K,4K,8K,我们在上面知道物理结构中存储的最小单位是扇区,读取磁盘如果按照扇区来读,效率太差,一般是按照block来读,如果block大小为4K,则代表一个block是8个扇区(扇区按512字节算)。
  • super block: 超级块,它记录的是整个文件系统的信息,文件系统的类型,inode数量,block数量,文件系统各种事件等。

一个block只能存储一个文件的数据,如果文件大于block的大小,则使用多个block存储,如果文件小于block的大小,此block不可在存储别的文件数据,即block的剩余容量不可用,磁盘空间会被浪费。所以需要合理选用block的大小。在格式化时block的大小就固定了。

如果文件系统中的文件很大,比如都高达数百GB,那么inode的数量和block的数量过于庞大,为了便于管理EXT文件系统将block分为多个block group,每个区块群组中都有独立的inode/block/superblock系统。

img

文件系统最前方有一个开机扇区(Boot Sector),可实现多操作系统的重要设计。

  • 文件系统描述:描述每个block group 的开始与结束的block号码。
  • 块对应表(block bitmap):用bit位记录了每一个block目前的状态,如果有数据就置为1,没有数据置为0。如果需要分配block,那么就找目前状态为0的。
  • inode 对应表(inode bitmap):和块对应表相似,记录的是inode的分配和未分配的号码。
  • inode table:详细记录了每一个inode的信息。inode中记录的信息有:文件的访问模式,文件权限,文件的ID,文件的时间,文件内容的block号码,12个直接指向,1个间接指向,1个双间接指向,1个三间接指向。如果正在被使用,则将相应的位置为1,要是删除了文件,那就将相应位置置为0。

至此,我们基本了解了计算机是如何存储文件的,也大致明白了磁盘文件系统的基本原理,可以基于这些做个总结

  1. 根据存储文件的大小,合理设置block的大小,有助于磁盘的最大化利用
  2. 文件越大,使用的block越多,读写的时间也会相应变长
  3. inode和block都是有编号的,找到inode就找到了inode所对应的block上的数据
  4. inode的数量等于文件系统可存储文件的数量
  5. 为了兼容存储的文件数量,读写性能,减少管理data block的开销,文件大小应在一个合理的范围
  6. 如果block为4K,则存储文件大小最好是4K的倍数

为什么很多分布式文件系统都有block的概念,我们心里大概也就清楚了。

为什么需要文件系统?

  1. 屏蔽了对底层磁盘的操作,不需要关系底层细节
  2. 更友好,更便捷,更有效的管理数据

接下来我们将介绍分布式有关的内容

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

Hi ~ I'm a robot of Januschoi.I just upvoted your post!
Please also help upvote my post here: https://steemit.com/cn/@januschoi/6jlsyu
Thanks so much~!!