Frequently asked questions
Ext2、ext3、ext4的关系
三个文件系统可以归为一类文件系统,有很好的前后兼容性,如Mkfs成ext3文件系统,在挂载时可以挂在成ext2,ext4的形式。但是ext4的文件系统,不能挂载成ext2、ext3的形式。Ext3要求有日志,但是ext2中没有日志。Ext4文件系统可以使用无日志的模式mount
Why创造ext2
Minx文件系统bug:filename只能在14自符内。Minix支持的最大的file大小为64Mib,而ext文件系统支持2Gb的文件大小,filename可以到256个字符。但是ext2和minix一样只有一个上次更改的时间戳,上次访问时间,上次inode更改时间。它使用链表的形式存储空闲块,这意味着更容易I形成碎片。在1993,ext2文件系统更新版本后,新版本可以支持最大4T的文件大小,增加了可移植的时间戳接口。而且文件系统可扩展,所以可以在文件系统中加入新特性。
文件系统的特点:
EXT2:
哈希索引目录:(EXT2_FEATURE_COMPAT_DIR_INDEX)
扩展属性块(EXT2_FEATURE_COMPAT_EXT_ATTR)
File type in directory entries (EXT2_FEATURE_INCOMPAT_FILETYPE)
减少块组描述符的备份(EXT2_FEATURE_INCOMPAT_META_BG)
减少超级块的备份(EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER)
文件可以大于2GB(EXT2_FEATURE_RO_COMPAT_LARGE_FILE)
EXT3
扩展属性块、更大的inode结点 (EXT3_FEATURE_COMPAT_EXT_ATTR)
在线文件系统大小更改(EXT3_FEATURE_COMPAT_RESIZE_INODE)
目录项hash索引 (EXT3_FEATURE_COMPAT_DIR_INDEX)
日志file(EXT3_FEATURE_COMPAT_HAS_JOURNAL) 注意:ext3必须有日志的模式,对比ext4
File type in directory entries(EXT3_FEATURE_INCOMPAT_FILETYPE)
日志的恢复(EXT3_FEATURE_INCOMPAT_RECOVER)
减少块组描述符的备份(EXT3_FEATURE_INCOMPAT_META_BG)
减少超级块的备份(EXT3_FEATURE_RO_COMPAT_SPARSE_SUPER)
文件可以大于2GB(EXT3_FEATURE_RO_COMPAT_LARGE_FILE)
EXT4
扩展属性块、更大的inode(EXT3_FEATURE_COMPAT_EXT_ATTR)
在线文件系统大小更改(EXT3_FEATURE_COMPAT_RESIZE_INODE)
目录项hash索引(EXT3_FEATURE_COMPAT_DIR_INDEX)
日志file(EXT3_FEATURE_COMPAT_HAS_JOURNAL)注意ext4可以以没有日志的形式挂载
File type in directory entries(EXT3_FEATURE_INCOMPAT_FILETYPE)
日志的恢复 (EXT3_FEATURE_INCOMPAT_RECOVER)
文件可以以extents形式分配空间(EXT4_FEATURE_INCOMPAT_EXTENTS)
支持大于2^32个文件块(EXT4_FEATURE_INCOMPAT_64BIT)
灵活的块组Flexible block group(EXT4_FEATURE_INCOMPAT_FLEX_BG)
减少块组描述符的备份 (EXT3_FEATURE_INCOMPAT_META_BG)
减少超级块的备份(EXT3_FEATURE_RO_COMPAT_SPARSE_SUPER)
文件可以大于2GB(EXT3_FEATURE_RO_COMPAT_LARGE_FILE)
组描述符的校验和稀疏索引表(EXT4_FEATURE_RO_COMPAT_GDT_CSUM)
目录内容可以多于32000个项 (EXT4_FEATURE_RO_COMPAT_DIR_NLINK)
纳秒级别时间戳和创建时间 (EXT4_FEATURE_RO_COMPAT_EXTRA_ISIZE)
整个文件大小可以大于2Tb (EXT4_FEATURE_RO_COMPAT_HUGE_FILE)
如何测试EXT4文件系统
测试文件系统和硬件平台最好的方法是系统上真实的应用。Benchmark只是模拟的测试方式,他们不能反映应用的IO负载
现有的测试工具等见: intertubes
Wiki的一个很棒的文章: Comparison of file systems(不同文件系统比较)
Can I undelete files in Ext4?(ext4能否恢复删除文件?)
No, in the same way that the ext3 journal requirements to be consistent after a crash prevent undelete of ext3 files, it isn't possible to undelete ext4 files.
如何把ext2、ext3挂载的系统变为ext4,用到两条指令?
使用tune2fs来使其可以使用ext4特性
# tune2fs -O extents,uninit_bg,huge_file /dev/DEV
# e2fsck -f /dev/DEV
如果在把ext2文件系统mount为ext4类型时,想要其具备日志特性,使用指令:
# tune2fs -j /dev/DEV
若用指令把ext2、ext3文件系统挂载为ext4形式后,以后就不能再挂在成原来的ext2、ext3形式了。
可以使用下列指令使加入日志的ext2文件系统去除日志:
# tune2fs -O ^has_journal /dev/DEV
一些ext4的特性在ext3文件系统中不能体现。
在/proc/fs/jbd2/partition/history中提供的信息
执行cat /proc/fs/jbd2/partition/history 有如下信息
R/C tid wait run lock flush log hndls block inlog ctime write drop close
R 7102 0 5000 0 1424 4 68681 5 6
R 7103 0 5000 0 1644 4 64579 9 10
R 7104 0 5000 0 856 32 38719 11 12
R 7105 0 5000 0 1052 0 47142 12 13
R 7106 0 5000 0 1172 16 56028 11 12
R 7107 0 5000 0 1416 4 71047 11 12
R 7108 0 5000 0 1640 4 81125 5 6
R 7109 0 5000 0 1616 4 77314 6 7
R 7110 0 5000 0 1640 0 76111 5 6
:
:
文件的目的是提供ext4日志的。每个当前日志事件的提交就往这个文件中加入一行。每列的含义如下:
R/C
事物在运行或是提交。(注意目前的JBD2只显示正在运行的事物,不显示提交的数据)
Tid
事物的ID,用以区别不同的JBD2事物
Wait
事物开始所等待的毫秒数。如果应用做同步操作或者事物包含块的最大数量。
Lock
事物等待锁住所花的毫秒数
Flush
number of milliseconds flushing blocks to the filesystem for ordered mode before the transaction can be committed
log
将block的数据写入日志所需要的毫秒数
Hndls
日志事物的handles个数
Block
日志事物的block个数
Inlog
这个事物写入到block的block数目,包括日志的额外开销
/proc/fs/jbd2/<partition>/info提供的信息
在cat /proc/fs/jbd2/partition/info提供如下信息:
1498 transaction, each up to 8192 blocks
average:
0ms waiting for transaction
3924ms running transaction
0ms transaction was being locked
0ms flushing data (in ordered mode)
12ms logging transaction
14176us average transaction commit time
289 handles per transaction
26 blocks per transaction
27 logged blocks per transaction
这个文件中显示了自mount以来,该文件系统在/proc/fs/jbd2/partition/history目录信息下的统计平均信息
如何改变ext4文件系统的大小
ext4在线改变大小的方式和ext3很相似,使用resize2fs或者ext2resize,但是对整个文件系统最大的大小有限制(4TB大小)。在有META_BG标记下这个限制大小可以增大。
什么是bitmap 分配器
Ext2和ext3通过遍历块的比特位来查看块是否空闲。十分低效,ext4的block allocator替代了bitmap allocator实现该功能,所以ext4比ext3也快了许多。
ext3和ext4的主要区别
ext4的新特性在http://sundayhut.is-programmer.com/ 译文中解释过了
jdb和jdb2的区别
两者大体上相同,但是jdb2增加了几个兼容性的功能:
1. 支持64位的文件系统
2. 日志事务的校验
3. 异步的事务提交块写
另外,对于刷新数据jbd2实施了一种新的ordered模式,它与延时分配结合使用,防止了当有大量数据写入文件系统而阻塞日志事物的提交的情况。这也避免了当有一个大的写(heavy write)时,fsync()延迟过长。
能在SSD上使用ext4文件系统吗?
可以,SSD实质上和其他的块设备没有什么区别。在先进的ssd上(主要考虑ssd寿命问题,日志区需要频繁修改),还可以把日志区放在SSD中。参考该链接:you can even put the journal on the SSD as well
链接中提出
-
可以把ext4作为无日志的模式挂载。此时系统崩溃就要执行fsck来恢复,恢复的速度取决于你文件系统的碎片化程度,由于ssd本身速度较快,可能恢复在10秒内
-
就算把journal放在ssd中也不会有太大问题,作者自己就是这么干的,估摸着在ssd坏了之前自己早就换电脑了。
-
自己做了一点小手脚来减少文件系统的写操作。比如说/tmp目录使用tmpfs文件系统、把firefox的缓存放在/tmp目录下。
本文为Frequently Asked Questions的翻译