zoukankan      html  css  js  c++  java
  • 《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #18 向ext4转换

    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共通的主要功能标志列表
    image

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

    小结
    本节介绍了从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

  • 相关阅读:
    8.5 day8
    8.1 day6
    课后作业 day29
    博客整理day29
    博客整理day28
    博客整理day27
    博客整理day26
    课后作业 day26
    Python 学习day22
    课后作业 day21
  • 原文地址:https://www.cnblogs.com/tcicy/p/8552814.html
Copyright © 2011-2022 走看看