ext4之内核文档

最近接触ext4比较多,所以就想着直接开一个博客专门是ext4的,一方面是为了系统的学习下ext4,另一方面也是做一个标记,以后如果还有用到的地方可以回来再看看,当然最重要的还是和广大的技术人员交流,如果能够帮助到一些人就更好了。

ext4第一次发布是在linux-2.6.19的内核里,发展到现在,ext4的代码已经是非常巨大,我下载linux-4.7的内核代码一看,居然有50W lines,我估计要是一行一行的看,我也不需要做什么事了。然而打开linux-2.6.19的代码,只有大约2W lines,所以还是从起源开始吧,就像没有人能够出一本书叫做linux-4.7内核源代码解析一样。。。

这次看的是linux-2.6.19/Docment/filesystem/ext4.txt,这是内核关于ext4的文档,讲的还是比较好的。我直接翻译下,后续的人看着方便一些,但是由于个人英语能力所限,翻译过程可能有一些问题,欢迎指出。


Ext4 文件系统
===============
这个版本的ext4是一个开发中的版本,一个比ext3性能优秀的fs,不但支持比ext3更加大的文件系统,还兼顾了可扩展性和可靠性。
邮件列表: [email protected],大家如果想订阅ext4的内核邮件的话,只需要向这个邮件发送subscribe就可以了,不过每天会接受到好多封邮件,不过都是开源社区对于ext4的开发的讨论和计划。
1. 快速使用ext4:
===========================
  - 开发者可以获得e2fsprogs从以下路径
    ftp://ftp.kernel.org/pub/linux/kernel/people/tytso/e2fsprogs-interim/
    ftp://ftp.kernel.org/pub/linux/kernel/people/tytso/e2fsprogs/
  - 首先格式化 mke2fs -j /dev/hda1
  - 然后挂载文件系统 mount /dev/hda1 /wherever -t ext4dev
  - 如果想打开extents的支持的话,可以在挂载的时候添加这个选项,但是前提是mke2fs的时候加上-o extents的支持。
mount /dev/hda1 /wherever -t ext4dev -o extents
  - ext4对于ext3是向后兼容的,除非添加一个支持extents的文件。比如: `mount -o extents’,然后在这个文件系统上创建一个文件.
  - ext3/4相比较于其他的文件系统,提供了更高的数据完整性。
2. ext4特性
===========
2.1 当前版本支持的
* 文件系统大小 > 16TB
* extent格式的文件具有更强的健壮性,在面对磁盘上的冲突的时候。
* 内部的B+树减少一些浪费的空间
2.1 之前可用的功能,以后会被"mkefs.ext4”支持:
* dir_index和可变更大小的inode
2.2 后续可能会支持的属性
以下的都是正在讨论中的属性:
* 修改的文件分配功能 (一次多块分配, 延迟分配)
* 去除32000个子目录的限制 (这方面的补丁已经做好了, 还需要e2fs的支持)
* nsec的时间戳,在mtime, atime, ctime上使用, (这方面的补丁已经做好了, 还需要e2fs的支持)
* 增加inode的版本字段在磁盘存储上
* 减少mke2fs/e2fsck的消耗的时间 
* 日志的校验和
* 文件的预分配功能 (e.g 特别是对于一些流媒体应用和数据库应用)
比如元数据的校验和已经经过了大量的讨论和计划,但是还没有开发出补丁,所以我还不确定他是不是在近期会发出。
mballoc和delalloc会实现性能上的巨大提升.CFS已经使用了mballoc好多年了,IBM + Bull也做了很多的测试在这个上边。这个特性之所以没有在第一版的ext4就加进来,我认为是管理上的原因,而且因为这个特性直接影响了磁盘上的部署格式,所以,在第一版就加进来就引起了一些争议,我相信后续的版本一定会支持的。
3. 挂载选项
==========
当你挂载ext4文件系统的时候,以下的选项在当前版本是支持的:
(*) == 缺省的
extents ext4把文件的数据话分成一个一个的区域,这样的文件系统就不能再被ext3挂载了.
journal=update 更新ext4的日志到当前格式.
journal=inum 当有日志存在的话,这个选项会被忽略,否则,这个选项制定了会有多少个inode代表ext4的日志文件.
journal_dev=devnum 当外部的日志设备的主设备号和次设备号变化的时候,这个选项允许用户指定新的日志文件的存放地点,就是通过devnum来指定主设备号和次设备号.
noload 在挂载的时候不载入日志.
data=journal 所有的数据写入都会被日志记录下来.
data=ordered (*)所有的元数据写入都会被记录下来,但是数据的写入会直接写入不会被记录下来.
data=writeback 包括元数据在内的所有数据都会被直接写入ext4而不会有日志记录.
commit=nrsec (*)ext4在每过nrsec秒以后就会同步所有的数据,把这些数据写入到掉电非易失存储介质上去,缺省的值是5s.这就意味着如果掉电了,你最多丢失5s内写入的数据,感谢日志的存在,你的文件系统并不会崩溃,但是这个值会造成性能上的损失,但是对于数据安全是有好处的,如果设置为0的话,就意味着设置为缺省值5s,设置为比较大的值会提升ext4的读写性能,但是同时也带来了安全性的降低。
barrier=1 这个选项打开/关闭隔离,barrier=0的时候关闭,barrier=1的时候打开.
orlov (*) 这个选项会启用新的orlov块分配器.
oldalloc 这个选项会关闭掉新的orlov块分配器,启用原先的块分配器. Orlov应当拥有更好的性能,如果在你那里运行的结果不是这样的话,你可以反馈给我们
user_xattr 启用扩展用户属性功能,此外,你还需要在内核配置选项中加上(CONFIG_EXT4_FS_XATTR).你可以看attr(5)用户手册以及http://acl.bestbits.at/ 来对用户扩展属性了解更多。
nouser_xattr 关闭扩展用户属性.
acl 打开POSIX标准支持的用户控制权限列表,此外,你还需要在内核配置选项中添加(CONFIG_EXT4_FS_POSIX_ACL).你可以看acl(5)用户手册和http://acl.bestbits.at/来了解更多信息。
noacl 这个选项关闭POSIX标准支持的用户控制权限列表功能T.
reservation
noreservation
bsddf (*) 使得'df’命令的执行表现的像在BSD上.
minixdf 使得'df’命令的执行表现的像在Minix上.
check=none 在挂载的时候不做多余的对于位图的检查.
nocheck
debug debug信息将会被发送到syslog.
errors=remount-ro(*) 当有错误发生的时候,就会重新挂载为只读的.
errors=continue 当有错误发生的时候继续运行,不做任何操作.
errors=panic 当有错误发生的时候直接报内核Panic.
grpid 给予所有的文件统一的组ID.
bsdgroups
nogrpid (*) 新的文件拥有统一的组ID.
sysvgroups
resgid=n 组ID为n的文件可以使用保留的块.
resuid=n 用户ID为n的文件可以使用保留的块.
sb=n 使用第n块作为超级块.
quota
noquota
grpquota
usrquota
bh (*) ext4把缓冲区首部和数据页连接起来以缓存块的信息。
nobh bh选项表示强制使用缓冲区首部,nobh选项表示尽量避免缓冲区首部(仅仅在data=writeback模式下支持).
数据模式
---------
有三种数据模式:
* writeback
在data=writeback模式下,ext4并不进行任何日志操作,这个模式提供了一个简单的日志就像 XFS, JFS, ReiserFS等文件系统的缺省模式一样,一个文件系统的崩溃然后再修复可能会导致正确的数据出现在文件崩溃之前写入的地方,但是这个模式下ext4拥有最好的性能。
* ordered
在data=ordered模式下,ext4仅仅提供元数据的日志,但是把一个组的元数据和一些数据块放在一个单元里叫做一个事务,当是时候把元数据写入到磁盘上的时候,与之联系的数据块会首先写入。一般情况下,这种模式的性能会略逊色于writeback但是比journal模式要快的多。
* journal
data=journal模式提供了完全的数据块和元数据快的日志,所有的新的数据都会被首先写入到日志里,然后在写入掉电非易失存储介质上。在文件系统崩溃的时候,日志就可以进行重放,把数据和元数据带回到一个一致性的状态,这个模式是最慢的,因为所有的数据都需要日志来记录.

引用
==========
内核源代码: <file:fs/ext4/>
<file:fs/jbd2/>
programs: http://e2fsprogs.sourceforge.net/
http://ext2resize.sourceforge.net
有用的链接: http://fedoraproject.org/wiki/ext3-devel
http://www.bullopensource.org/ext4/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章