Introduce

Transactions

Use Transactions (事务) for atomic updates

  • Ensure that multiple related updates are performed atomically

  • i.e., if a crash occurs in the middle, the state of the systems reflects either all or none of the updates

  • Most modern file systems use transactions internally to update filesystem structures and metadata

  • Many applications implement their own transactions

  • They extend concept of atomic update from memory to stable storage

    • Atomically update multiple persistent data structures

做原子的多步更新

Logging

如何判断commit前还是commit后?

  • commit前无commit记录
  • commit之后有commit记录

例子

实现细节

操作必须是幂等的,多次操作的结果不变

兼容多次crash的可行性 可以先读日志,看有没有写操作,没有再去磁盘里面读

性能上有缺陷,一次写操作变成两次写操作

优化

  • 多个transaction batch到一起
  • write back

Transactional File System

Jounaling:不完全做logging,性能少损失,没法保证完全的可靠性

RAID

Redundancy for media failures

RAID 1 Disk Mirroring/Shadowing

RAID1是完全复制磁盘中的数据

容量和开销:

  • 存储效率低:100%的容量开销
  • 实际可用容量是总容量的50%
  • 是最昂贵的RAID解决方案之一

故障恢复:

  • 基本恢复:当一个磁盘失效时,更换新磁盘并复制数据
  • 热备份:系统中预留空闲磁盘,可以立即替换故障磁盘 异或操作的一些内容,后面用来做数据验证

RAID 5+

  1. 数据分布方式:
  • 数据条带化:数据被分散存储在多个磁盘上(图中的D0-D23)
  • 奇偶校验:每个条带都有一个奇偶校验块(图中绿色的P0-P5)
  • 校验块分散:校验信息轮流存储在不同磁盘上,避免单个磁盘成为瓶颈
  1. 奇偶校验计算:
  • 使用异或(XOR)运算计算校验块
  • 如图所示:P0 = D0 ⊕ D1 ⊕ D2 ⊕ D3
  • 当任何一块磁盘损坏时,可以通过其他数据块和校验块重建数据 例如:如果D2损坏,可以通过 D2 = D0 ⊕ D1 ⊕ D3 ⊕ P0 恢复
  1. 性能特点:
  • 读性能:优于RAID 1,因为数据分布在多个磁盘上
  • 写性能:每次写都需要计算并更新校验块,会有一定开销
  • 带宽:由于条带化的原因,比单个磁盘高
  1. 存储效率:
  • 只损失一个磁盘的容量用于存储校验信息
  • 比RAID 1的50%空间利用率要好得多
  • N个磁盘的可用容量为(N-1)个磁盘的容量
  1. 容错能力:
  • 可以承受任意一块磁盘的故障
  • 通过其他磁盘的数据和校验信息可以重建失效磁盘的数据

如果更新D21,需要更新P5,所以需要做2次读和2次写操作

例题

Inode组成

  • user id (2 bytes)
  • three time stamps(4 bytes)
  • protection bits (2 bytes)
  • reference count(2 byte)
  • file type(2 bytes)
  • size(4 bytes)
  • 13 DP (13 * 4 bytes)
  • 1st index (4 bytes)
  • 2nd index (4 bytes)
  • 3rd index (4 bytes) +436 bytes

a disk sector is 512 bytes,任何辅助index表都占用一个扇区512 bytes

Maximum size for a file in this system

这个设计有几个主要优点:

  • 快速访问:对于小文件(≤436字节)来说,可以直接从inode读取数据,不需要额外的磁盘访问
  • 提高效率:因为很多系统文件和配置文件都很小,这种设计可以显著提高这类文件的访问速度
  • 减少磁盘碎片:小文件直接存储在inode中,不需要占用额外的数据块,减少了磁盘碎片
  • 性能优化:减少了I/O操作,特别是对于频繁访问的小文件

不同文件系统是如何区分目录和文件的

  1. FAT (File Allocation Table) 文件系统:
  • FAT使用目录条目(Directory Entry)中的属性字段来标识文件类型
  • 具体使用一个8位的属性字节,其中包含:
    • 0x10: 表示该条目是一个目录
    • 0x20: 表示该条目是一个普通文件
    • 其他位用于表示只读、隐藏、系统等属性
  1. FFS (Fast File System/Unix File System):
  • FFS在inode结构中使用mode字段来标识文件类型
  • mode字段通常是16位,其中:
    • 高4位用于表示文件类型(普通文件、目录、符号链接等)
    • 低12位用于存储权限信息
  • 常见的文件类型标识:
    • 0x8000: 普通文件
    • 0x4000: 目录
    • 0x2000: 字符设备
    • 0x6000: 块设备
  1. NTFS (New Technology File System):
  • NTFS使用MFT(主文件表)条目中的文件属性来标识文件类型
  • 每个文件的MFT条目包含一个标准信息属性(Standard Information Attribute)
  • 在标准信息属性中:
    • 使用文件属性标志来标识文件类型
    • 目录标志位设置为1表示目录
    • 还包含其他属性如只读、隐藏、系统等

只用直接索引的最大文件: 最大的文件:

假如现在在磁道88,向上移动,使用电梯算法,服务的顺序是什么

100 116 185 87 75 22 11 3