HACK#18 向ext4转换

ext4可以与ext2/ext3在后台进行互换。这里将介绍从ext2/ext3转换的方法以及转换时的注意事项。

转换

有两种方法可以将ext2/ext3的磁盘映像作为ext4来使用。

1.直接作为ext4挂接

执行下列命令,就可以将ext2/ext3的磁盘映像/dev/sdb1作为ext4挂载到/mnt。


mount-t ext4/dev/DEV MOUNTPOINT


通过上述方法,ext4的多块分配、延迟分配等功能也可以使用,因此性能比ext2/ext3更高。但是,如果只是将ext2/ext3的磁盘映像直接作为ext4挂载,ext4的很多功能仍然是无效的。例如,由于用间接块管理文件块,因此最大文件大小、最大文件系统大小都与作为ext2/ext3使用时相同。

2.启用并挂载ext4的功能标志

要启用/禁用功能标志,可以使用e2fsprogs工具包的tune2fs命令或debugfs命令。在下例中使用tune2fs命令,启用extent标志。


tune2fs-0 extent/dev/sdb1


当前设置的功能标志可以同样使用e2fsprogs工具包的debugs命令或dumpe2fs命令。在下例中使用的是debugfs命令,输出结果的“Filesystem features”中有“extent”,可以确认extent的功能标志已经设置。


debugfs-R stats/dev/sdbl

debugfs 1.41.12(17-May-2010)

Filesystem volume name:<none>

Last mounted on:<not available>

Filesystem UUID:03487be4-ed6e-4621-a3e6-326d443305f7

Filesystem magic number:0xEF53

Filesystem revision#:1(dynamic)

Filesystem features:has_journal ext_attr resize_inode dir_index filetype

extent sparse_super large_file

……


tune2fs命令中可以设置多个功能标志,但不能设置flex_bg等。flex_bg是将块组虚拟整合,将元数据所在位置局部化,从而提高文件系统检测(fsck)速度。这个功能与块组的布局有关,块组的布局是在文件系统生成时由mke2fs命令决定的,因此不能通过文件系统生成后的tune2fs命令等来更改。

如果使用tune2fs命令取消已设置的功能标志,就可以从ext4磁盘映像返回ext2/ext3磁盘映像。但是,extent标志一旦设置,就不能使用tune2fs命令来禁用,因此一旦设置这个标志,就无法返回ext2/ext3。ext4上以extent形式生成的文件在ext2/ext3文件系统中是无法读写的,因此必须事先知晓。

通过允许未初始化的块组,设置提高fsck检测速度的uninit_bg标志时,需要执行下列e2fsck命令。这样就可以对未使用的块组作标记,提高此后的fsck速度。

e2fsck-pD/dev/sdb1

在本书写作时,ext文件系统之间的互换性中仍然存在一些bug。如果磁盘有空间,个人推荐不要将ext2/ext3的磁盘映像转换为ext4,而是直接创建为ext4。