实现分布式文件系统(一)

in #cn7 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. 更友好,更便捷,更有效的管理数据

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

Sort:  

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~!!