文件系统的核心功能就是实现对磁盘空间的管理,要知道哪些空间可以用,哪些空间不可以用。

基于固定功能区

典型文件系统: Linux ExtX

ExtX将磁盘划分为等份的若干区域,这个区域被称为块组,磁盘空间的管理以块组为单位,以下是磁盘分区的布局图(以4K逻辑块大小为例),其中块组0最复杂,其他的相似。

本地磁盘默认文件类型(常见本地文件系统磁盘空间布局)(1)

ext2磁盘布局

概念说明:

我们使用如下命令可以创建并格式化一个文件系统:

brdd if=/dev/zero of=30m.file bs=1M count=30br mkfs.ext2 30m.file -b 1K

然后使用dump2fs查看

本地磁盘默认文件类型(常见本地文件系统磁盘空间布局)(2)

Ext2 磁盘布局实例-1

如果块大小为4K,那么有如下块组:

本地磁盘默认文件类型(常见本地文件系统磁盘空间布局)(3)

Ext2磁盘布局实例-2

原因:ExtX使用逻辑块存储数据位图,当block = 1K时,对应的数据块位图可以管理1024 * 8个数据块,即1024[一个block的size] * (1024 * 8) [block的数量]= 8M的空间,30M就需要4个块组;当block = 4K时,对应的数据块位图可以管理4 * 1024 * 8个数据块,即(4 * 1024) * (4 * 1028 *8) = 128M, 因此一个块组就可以。

基于非固定功能区

基于固定功能区的 磁盘空间管理布局空间智能清晰,便于手动进行丢失数据恢复,但是也容易出现资源不足的情况,比如海量小文件场景。

非固定功能区的磁盘空间管理也分为数据和元数据,但是元数据和数据的区域非固定,随着文件系统对资源的需求而动态分配,典型有XFS和NTFS。

XFS文件系统将磁盘划分为等份的区域,称为分配组(AG),XFS对每个分配组进行独立管理,AG的容量可以很大,最大可以达到1TB。

本地磁盘默认文件类型(常见本地文件系统磁盘空间布局)(4)

xfs磁盘布局

概念说明:

XFS文件系统通过两个B 树来追踪空闲空间,一个是基于块编号索引,另一个是基于空闲块的大小索引。

基于数据追加的磁盘空间管理

前面的磁盘布局方式都是原地修改,在随机IO比较多的情况下,不太适合SS设备,基于数据追加的磁盘布局方式,对数据的变更并非在原地修改,而是追加写的方式写到后面的剩余空间,将随机写转化为顺序写。比如NILFS2。

NILFS2将磁盘划分为若干的Segment,Segment默认大小是8M。

本地磁盘默认文件类型(常见本地文件系统磁盘空间布局)(5)

NILFS2磁盘布局

NILFS2将文件分为若干类,分别是常规文件、目录文件、链接文件和元数据文件。而元数据文件包括:

,