11
5
2014
0

ext4--经常提到的一些问题

Frequently asked questions

Ext2ext3ext4的关系

三个文件系统可以归为一类文件系统,有很好的前后兼容性,如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.

 

如何把ext2ext3挂载的系统变为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也快了许多。

 

ext3ext4的主要区别

ext4的新特性在http://sundayhut.is-programmer.com/ 译文中解释过了

 

jdbjdb2的区别

两者大体上相同,但是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

链接中提出

  1. 可以把ext4作为无日志的模式挂载。此时系统崩溃就要执行fsck来恢复,恢复的速度取决于你文件系统的碎片化程度,由于ssd本身速度较快,可能恢复在10秒内
  2. 就算把journal放在ssd中也不会有太大问题,作者自己就是这么干的,估摸着在ssd坏了之前自己早就换电脑了。
  3. 自己做了一点小手脚来减少文件系统的写操作。比如说/tmp目录使用tmpfs文件系统、把firefox的缓存放在/tmp目录下。

 

本文为Frequently Asked Questions的翻译

Category: 文件系统 | Tags: | Read Count: 2153

登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter

Host by is-Programmer.com | Power by Chito 1.3.3 beta | Theme: Aeros 2.0 by TheBuckmaker.com