所谓原子操作,即要么全部成功,要么全部失败。磁盘硬件可以保证对一个扇区的操作是原子的,也就是说对一个磁盘扇区进行写操作,那么结果只有两种:1,整个扇区被完全修改为新数据;2,整个扇区没有被做任何修改;而不会出现扇区半新半旧的混乱状态(比如前256字节为新数据,后256字节还为旧数据,这里假定一个扇区为512字节)。
如果需要对超过一个扇区的操作进行原子控制,那么就需要更高一级别的软件控制机制。这是必须的,否则将导致磁盘文件系统数据的不一致错误,在Linux上对应的软件控制机制为JBD(Journaling... [阅读更多]
在linux 2.6内核上使用direct... [阅读更多]
在Linux下,一切皆文件,设备也不例外,为了管理这些设备,系统为它们各自都编了号,而每个设备号又分为主设备号和次设备号。主设备号用来区分不同类型的设备,而次设备号用来区分同一类型内的多个设备。
一个Linux系统,当前所有注册设备的主设备号可以通过/proc接口查看:
#... [阅读更多]
e2freefrag是e2fsprogs工具包里的一个命令,可以用来检测ext系列文件系统的碎片情况。这个命令对指定磁盘从前往后进行扫描,对所有空闲的block块进行统计,而这种统计又根据空闲block块的连续块数分别进行计数。实例如下:
#... [阅读更多]
e2fsprogs工具包里提供的e2fsck可以用来检测并修复ext2/3/4文件系统,但比较遗憾的是它的检测修复比较发费时间,特别是大容量的长期使用的磁盘分区,其检测修复甚至会发费1个小时以上的时间。e2fsck的使用示例如下:
#... [阅读更多]
大体上看,ext4文件系统的磁盘布局与前面介绍的xfs有些类似,它同样是先把磁盘分成一个个相同大小的block块(每个block块的大小默认是4K),然后把这些block块逻辑上合成多个group组,每个group组内的布局基本一致,除了第一个group组(即group... [阅读更多]
ext4提供有很多特性,当然有一些是前一代文件系统ext3本身就具有的,比如日志功能,但有时候我们却并不需要这些特性,则我们可以禁用它们。ext4文件系统的日志功能就是在牺牲一定性能的情况下增强稳定性的一种手段,但在一些情况,比如Web... [阅读更多]
reiserfs文件系统的磁盘布局比较简单,它把整块分区分成相同大小的block块,一个block块的大小默认是4K,而最大块数未2^32次方,即一个分区最大大小为16TB。
reiserfs文件系统分区的前64KB总是为分区标签(partition... [阅读更多]
关于Xfs文件系统磁盘布局结构的分析到此就算结束,经过一段时间的分析,Xfs在这方面主要设计基本已经了解,后面还有的磁盘布局,包括软链接、扩展属性等与前面的这些内容存放方式与布局并无多大差别,所以不准备继续写下去了,自己看一下即可。所有的文章内容主要依靠官方文档与实验简单验证而没有分析到具体的代码,所以很多细节可能被漏过,甚至还包含有错误,后续若看到后再进行文章修订。
后续仍会继续关注Xfs文件系统,当然,不再是磁盘布局这么基础的内容,而是会从它的一些特性上去去分析它是怎么设计的、代码怎么实现的、是否存在问题和是否可有改进等。
... [阅读更多]