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。
关于功能标志
我们已经了解ext4的各种功能是由功能标志来管理的,那么文件系统生成时设置的功能标志应当如何决定呢?/etc/mke2fs.conf是管理mke2fs命令的标准设置的文件,除了功能标志之外,还可以设置块的大小或索引节点大小等的默认值。下列为Fedora 14的/etc/mke2fs.conf的内容。

[root@linux akira]# cat /etc/mke2fs.conf
[defaults]
base_features = sparse_super,filetype,resize_inode,dir_index,ext_attr
blocksize = 4096
inode_size = 256
inode_ratio = 16384 [fs_types]
ext3 = {
features = has_journal
}
ext4 = {
features = has_journal,extent,huge_file,flex_bg,uninit_bg,dir_nlink,extra_isize
inode_size = 256
}
...

在没有/etc/mke2fs.conf的情形或者执行mke2fs命令时指定的不是-T而是-t的情形下,mke2fs命令将根据指定的文件系统种类和使用的磁盘大小来设置参数。
功能标志中有一些是ext2/ext3/ext4中共通的功能标志,也有一些是ext4特有的。表3-4、表3-5所示为与ext4相关的主要功能标志列表。
表3-4 ext2/ext3/ext4共通的主要功能标志列表

表3-5 ext4标准功能标准列

小结
本节介绍了从ext2/ext3转换到ext4的方法以及ext4的功能标志。ext4在继承ext2/ext3的文件系统结构的同时,还新增了很多功能,使性能得到提高。用户在使用时也不会明显感觉到与一直使用的ext3有什么变化,这也是ext4的魅力之一。
参考文献
Ext4 (and Ext2/Ext3) Wiki
https://ext4.wiki.kernel.org/index.php/Main_Page
Mailing list ARChives
http://marc.info/?l=linux-ext4&r=1&w=2
—Akira Fujita

《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #18 向ext4转换的更多相关文章

  1. 《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #1 如何获取Linux内核

    HACK #1 如何获取Linux内核 本节介绍获取Linux内核源代码的各种方法.“获取内核”这个说法看似简单,其实Linux内核有很多种衍生版本.要找出自己想要的源代码到底是哪一个,必须首先理解各 ...

  2. 《Linux内核精髓:精通Linux内核必会的75个绝技》目录

    1章 内核入门HACK #1 如何获取Linux内核HACK #2 如何编译Linux内核HACK #3 如何编写内核模块HACK #4 如何使用GitHACK #5 使用checkpatch.pl检 ...

  3. 《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #15 ramzswap

    HACK #15 ramzswap 本节介绍将一部分内存作为交换设备使用的ramzswap.ramzswap是将一部分内存空间作为交换设备使用的基于RAM的块设备.对要换出(swapout)的页面进行 ...

  4. 《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #3 如何编写内核模块

    HACK #3 如何编写内核模块 本节将介绍向Linux内核中动态添加功能的结构—内核模块的编写方法.内核模块Linux内核是单内核(monolithic kernel),也就是所有的内核功能都集成在 ...

  5. 《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #19 ext4的调整

    HACK #19 ext4的调整 本节介绍可以从用户空间执行的ext4调整.ext4在sysfs中有一些关于调整的特殊文件(见表3-6).使用这些特殊文件,就不用进行内核编译.重启,直接从用户空间确认 ...

  6. 《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #21FUSE

    HACK #21FUSE 本节将介绍使用用户进程的文件系统框架—FUSE.FUSE概要FUSE(Filesystem in Userspace,用户空间文件系统),是用来生成用户空间的一般进程的框架. ...

  7. 《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #20 使用fio进行I/O的基准测试

    HACK #20 使用fio进行I/O的基准测试 本节介绍使用fio进行模拟各种情况的I/O基准测试的操作方法.I/O的基准测试中有无数需要考虑的因素.是I/O依次访问还是随机访问?是通过read/w ...

  8. 《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #17 如何使用ext4

    HACK #17 如何使用ext4 本节介绍ext4的编写和挂载方法.开发版ext4的使用方法.ext4是ext3的后续文件系统,从Linux 2.6.19开始使用.现在主要的发布版中多数都是采用ex ...

  9. 《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #16 OOM Killer的运行与结构

    HACK #16 OOM Killer的运行与结构(1) 本节介绍OOM Killer的运行与结构. Linux中的Out Of Memory(OOM) Killer功能作为确保内存的最终手段,可以在 ...

随机推荐

  1. UML-(团队作业)

    UML设计 1.团队信息: 队名:异次元 2.团队成员: 姓名 分配任务 王诚荣(队长) 汇总合并,系统活动图 马祎特 好感度系统类图,电子版图片绘制 陈斌 个人中心,闹钟界面用例图,状态图 洪康 后 ...

  2. Spring AOP体系学习总结

    要理解AOP整体的逻辑需要理解一下Advice,Pointcut,Advisor的概念以及他们的关系.  Advice是为Spring Bean提供增强逻辑的接口,提供了多种方法增强的方式,比如前置, ...

  3. FREESWITCH 填坑指南

    转接 1.查看网关注册状态 sofia status 2.桥接(未实践) http://wiki.freeswitch.org.cn/wiki/Mod_lua.html#jump10237 frees ...

  4. git的使用基础

    /*游戏或者运动才能让我短暂的忘记心痛,现如今感觉学习比游戏和运动还重要——曾少锋*/ 在Git-Bash中配置自己的名字和Email: git config --global user.name & ...

  5. BZOJ4899: 记忆的轮廓【概率期望DP】【决策单调性优化DP】

    Description 通往贤者之塔的路上,有许多的危机. 我们可以把这个地形看做是一颗树,根节点编号为1,目标节点编号为n,其中1-n的简单路径上,编号依次递增, 在[1,n]中,一共有n个节点.我 ...

  6. POJ 2367:Genealogical tree(拓扑排序模板)

    Genealogical tree Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7285   Accepted: 4704 ...

  7. Django Rest FrameWork 全部API

    Django Rest FrameWork .Requests 请求 客服端发送给服务器的请求 .Responses 响应 rest框架支持响应不同格式的内容 .Views 视图 base基础类视图 ...

  8. 浏览器中的data类型的Url格式,data:image/png,data:image/jpeg!(源自:http://blog.csdn.net/roadmore/article/details/38498719)

    所谓"data"类型的Url格式,是在RFC2397中 提出的,目的对于一些“小”的数据,可以在网页中直接嵌入,而不是从外部文件载入.例如对于img这个Tag,哪怕这个图片非常非常 ...

  9. jquery中.prev()

    ☆ 遍历 - .prev()方法:取得一个包含匹配的元素集合中每一个元素紧邻的前一个同辈元素的元素集合.选择性筛选的选择器. (previous:上一个,上一页,前一个,以前的......) 示例: ...

  10. jquery的常用操作(操作html页面的Dom对象的元素)

    一:页面加载完成时,会执行jquery的方法(不需要等待图片加载完成,只要dom结构加载完成,就执行该方法) //第一种写法: $(document).ready(function() { // 执行 ...