HeZephyr

HeZephyr's Blog

日拱一卒无有尽,功不唐捐终入海

HeZephyr's GitHub chart

Andrew文件系统

1 引言

Andrew 文件系统是卡内基梅隆大学 (CMU) 于 1980 年代引入的。该项目由CMU著名教授 M. Satyanarayanan(简称“Satya”)领导,其主要目标很简单:扩展性。具体来说,如何设计一个分布式文件系统,使得服务器可以支持尽可能多的客户端?

网络文件系统

1 基本的分布式文件系统

分布式客户端/服务器计算最早应用于分布式文件系统领域。在这种环境中,有多台客户机和一台(或几台)服务器;服务器将数据存储在磁盘上,客户机通过格式良好的协议信息请求数据。下图描述了基本设置。

分布式系统

1 引言

分布式系统改变了世界的面貌。当您的网络浏览器连接到地球上其他地方的网络服务器时,它正在参与看似简单形式的客户端/服务器(CS)分布式系统。然而,当您联系 Google 或 Facebook 等现代网络服务时,您不仅仅是在与一台机器进行交互。在幕后,这些复杂的服务是由大量(即数千台)机器构建的,每台机器相互协作以提供站点的特定服务。

数据完整性和保护

1 磁盘故障模式

磁盘并不完美,并且可能会出现故障(有时)。在早期的 RAID 系统中,故障模型非常简单:要么整个磁盘正常工作,要么完全故障,并且检测此类故障非常简单。这种磁盘故障的故障停止模型使得构建 RAID 相对简单。

基于闪存的SSD

1 引言

在硬盘驱动器占据主导地位数十年后,一种新型的持久存储设备最近在世界上占据了重要地位。这种设备一般被称为固态存储设备,它不像硬盘驱动器那样有机械或移动部件,而是由晶体管构成,就像内存和处理器一样。然而,与典型的随机存取存储器(如 DRAM)不同,这种固态存储设备(又称 SSD)在断电的情况下仍能保留信息,因此是持久存储数据的理想选择。

日志结构文件系统

1 引言

20 世纪 90 年代初,伯克利分校的一个由 John Ousterhout 教授和研究生 Mendel Rosenblum 领导的小组开发了一种新的文件系统,称为日志结构文件系统。他们这样做的动机基于以下观察:

  • 系统内存不断增长:随着内存变大,内存中可以缓存更多数据。随着越来越多的数据被缓存,磁盘流量越来越多地由写入组成,因为读取由缓存提供服务。因此,文件系统的性能很大程度上取决于其写入性能。
  • 随机I/O 性能和顺序I/O 性能之间存在很大差距:多年来硬盘传输带宽大幅增加;随着更多的位被封装到驱动器的表面,访问所述位时的带宽增加。然而,寻道和旋转延迟成本却缓慢下降;让廉价的小型电机更快地旋转盘片或更快地移动磁盘臂是一项挑战。因此,如果您能够以顺序方式使用磁盘,那么与导致寻道和旋转的方法相比,您将获得相当大的性能优势。
  • 现有文件系统在许多常见工作负载上表现不佳:例如,FFS将执行大量写入来创建一个大小为一个块的新文件:一个用于新的inode,一个用于更新inode位图,一个用于包含该文件的目录数据块,一个用于更新目录inode,一个用于作为新文件一部分的新数据块,并且还需要对数据位图进行一次写入以标记数据块已被分配。因此,尽管 FFS 将所有这些块放置在同一块组内,但 FFS 需要进行许多短寻道和随后的旋转延迟,因此性能远低于峰值顺序带宽。
  • 文件系统不支持RAID:例如,RAID-4 和RAID-5 都存在小写入问题,即对单个块的逻辑写入会导致发生4 个物理I/O。现有文件系统不会尝试避免这种最坏情况的 RAID 写入行为。

因此,理想的文件系统将关注写入性能,并尝试利用磁盘的顺序带宽。此外,它在常见工作负载上表现良好,这些工作负载不仅写出数据,而且还经常更新磁盘上的元数据结构。最后,它在 RAID 和单个磁盘上都能很好地工作。 Rosenblum 和 Ousterhout 推出的新型文件系统称为 LFS,是日志结构文件系统的缩写。当写入磁盘时,LFS 首先将所有更新(包括元数据!)缓冲在内存段中;当该段已满时,它会通过一次长的、顺序的传输写入未使用的磁盘部分。 LFS 永远不会覆盖现有数据,而是始终将段写入空闲位置。由于段很大,因此磁盘(或 RAID)可以得到有效利用,文件系统的性能也接近顶峰。

FSCK和日志

1 崩溃一致性

正如我们到目前为止所看到的,文件系统管理一组数据结构来实现预期的抽象:文件、目录以及支持我们期望从文件系统获得的基本抽象所需的所有其他元数据。与大多数数据结构(例如,在正在运行的程序的内存中找到的数据结构)不同,文件系统数据结构必须持久存在,即它们必须长期存在,存储在即使断电也能保留数据的设备上(例如硬盘或基于闪存的 SSD)。

快速文件系统

1 旧Unix操作系统的问题

UNIX 操作系统问世之初,UNIX奇才Ken Thompson自己编写了第一个文件系统。我们称之为 “老 UNIX 文件系统”,它非常简单。基本上,它的数据结构在磁盘上看起来是这样的:

0%