如何使用 dumpe2fs 和une2fs 调整 Linux 扩展 (ext) 文件系统
ext2、ext3 和 ext4 文件系统是专为 Linux 设计的一些最知名和最常用的文件系统。第一个文件系统 ext2(第二个扩展文件系统),顾名思义,是三个文件系统中较旧的一个。它没有日志功能,这是它的后继者相对于他的最大优势:ext3。 ext4 于 2008 年发布,是较新的文件系统,目前是许多 Linux 发行版上的默认文件系统。
e2fsprogs 软件包中包含一组用于处理这些文件系统的通用实用程序。在本教程中,我们将了解如何使用其中两个:dumpe2fs 和une2fs,分别检索信息并调整其参数。
在本教程中您将学习:
如何使用 dumpe2fs 检索 ext 文件系统信息
如何更改文件系统标签
如何更改文件系统保留块的数量
如何更改文件系统 UUID
如何启用或禁用文件系统功能
如何设置文件系统默认挂载选项
使用的软件要求和约定
使用 dumpe2fs 获取 ext 文件系统信息
dumpe2fs 实用程序让我们可以检索有关 ext2/3/4 文件系统的信息。我们需要做的就是调用该实用程序并提供包含文件系统的设备的路径作为参数。让我们看一个如何执行此操作的示例,并分析命令返回的输出:
$ sudo dumpe2fs -h /dev/sda1
正如您所注意到的,我们使用 -h
选项调用了该程序,它的用途是什么?使用时,dumpe2fs
的行为会发生变化,以便输出中仅包含超级块信息:
dumpe2fs 1.45.6 (20-Mar-2020)
Filesystem volume name:
Last mounted on: /home
Filesystem UUID: e69e2748-b575-4f3d-90a0-ab162ef18319
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery extent 64bit flex_bg sparse_super large_file huge_file dir_nlink extra_isize metadata_csum
Filesystem flags: signed_directory_hash
Default mount options: user_xattr acl
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 983040
Block count: 3932160
Reserved block count: 196608
Free blocks: 3732039
Free inodes: 976679
First block: 0
Block size: 4096
Fragment size: 4096
Group descriptor size: 64
Reserved GDT blocks: 1024
Blocks per group: 32768
Fragments per group: 32768
Inodes per group: 8192
Inode blocks per group: 512
Flex block group size: 16
Filesystem created: Thu Sep 9 15:49:37 2021
Last mount time: Fri Sep 17 10:11:10 2021
Last write time: Fri Sep 17 10:11:10 2021
Mount count: 3
Maximum mount count: -1
Last checked: Thu Sep 9 15:49:37 2021
Check interval: 0 ()
Lifetime writes: 12 GB
Reserved blocks uid: 0 (user root)
Reserved blocks gid: 0 (group root)
First inode: 11
Inode size: 256
Required extra isize: 32
Desired extra isize: 32
Journal inode: 8
First orphan inode: 528161
Default directory hash: half_md4
Directory Hash Seed: 7cdeb137-67ce-41df-b1ba-b12f188a15c8
Journal backup: inode blocks
Checksum type: crc32c
Checksum: 0x6ff4ea99
Journal features: journal_incompat_revoke journal_64bit journal_checksum_v3
Journal size: 64M
Journal length: 16384
Journal sequence: 0x00026ef3
Journal start: 2857
Journal checksum type: crc32c
Journal checksum: 0x7864c03d
正如您所看到的,显示了有关文件系统的非常重要的信息,例如UUID、功能和默认安装选项。我们还可以观察保留块计数,百分比(默认为 5%)。这些块是为超级用户保留的:这对于避免碎片并确保特权进程继续运行非常有用,因为非特权进程被禁止使用它们。
通过使用 -l
选项调用 tune2fs
实用程序,可以获得包含上面观察到的几乎所有信息的输出。然而,后者的主要用途是调整文件系统参数。我们将在下一节中看到其用法的一些示例。
使用tune2fs调整ext文件系统参数
为了调整 ext 文件系统功能,我们必须使用 tune2fs
实用程序。我们可以调整几个参数来改变文件系统的行为。让我们看一些如何使用该实用程序的示例。
更改文件系统标签
要更改 ext 文件系统的标签,我们必须使用 -L
选项调用 tune2fs
,并提供我们想要用作参数的名称。设置标签可以方便地以人性化的方式引用文件系统(尽管我们不能依赖它的唯一性)。从之前检索到的信息中可以看出,/dev/sda1
上的文件系统当前没有标签。要设置一个(假设我们想使用“home”),我们应该运行:
$ sudo tune2fs -L home /dev/sda1
要验证更改是否已应用,我们可以使用以下命令:
$ sudo tune2fs -l /dev/sda1 | grep "volume name"
Filesystem volume name: home
应用标签后,设备的新符号链接应出现在 /dev/disk/by-label
目录中。
更改保留块的百分比
正如我们之前提到的,在每个 ext 文件系统上,都有一定比例的块设备为 root 用户保留,以减少碎片整理,并确保以超级用户权限运行的进程具有可写入的保留空间,而非特权进程则没有。不允许。保留块的默认百分比是 5%。在某些情况下,例如在非常大的文件系统上,我们可能希望降低此百分比,以避免分配太多空间。要执行这样的操作,我们可以使用 -m
选项运行 tune2fs
并提供用作参数的百分比。在下面的示例中,我们将其减少到 3%:
sudo tune2fs -m 3 /dev/sda1
[sudo] password for egdoc:
tune2fs 1.45.6 (20-Mar-2020)
Setting reserved blocks percentage to 3% (117964 blocks)
命令的输出确认我们已正确应用更改,并且保留块的计数现在为 117964
(之前为 196608
),它对应于 总数的 3%。作为替代方案,我们可以直接指定保留块的数量,作为 -r
选项的参数:
$ sudo tune2fs -r 117964 /dev/sda1
tune2fs 1.45.6 (20-Mar-2020)
Setting reserved blocks count to 117964
更改文件系统 UUID
UUID 是通用唯一标识符:它由一系列用连字符分隔的十六进制数字组成,代表引用文件系统的最可靠方式。 /dev/sda1
文件系统的当前 UUID 为 e69e2748-b575-4f3d-90a0-ab162ef18319
;要更改它,我们必须使用 -U
选项调用 tune2fs
。当我们使用这个选项时,我们可以:
手动提供新的 UUID
使用
clear
作为参数来清除当前的 UUID使用
random
作为参数来生成使用新的随机生成的UUID使用
time
作为参数来生成基于时间的 UUID
更改文件系统的 UUID 需要对其执行检查。为此,我们必须首先卸载文件系统,在这种情况下我们将运行:
$ sudo umount /dev/sda1
要实际检查文件系统状态,我们可以使用 e2fsck
实用程序:
$ sudo e2fsck /dev/sda1
手动提供 UUID 在某些情况下可能很有用。例如,想象一下,我们想要通过创建新的文件系统来重新格式化设备,但是,为了避免必须更改对旧文件系统的所有引用,我们想要保留其 UUID 。要手动设置文件系统 UUID,我们将运行:
$ sudo tune2fs -U e69e2748-b575-4f3d-90a0-ab162ef18319 /dev/sda1
如果我们使用 clear
作为 -U
选项参数,当前文件系统 UUID 将被清除:
$ sudo tune2fs -U clear /dev/sda1
如果我们使用 random 作为选项参数,则会为我们生成一个新的随机 UUID:
$ sudo tune2fs -U random /dev/sda1
最后,如果我们使用 time
作为选项的参数,则会生成一个基于当前时间的新 UUID:
$ sudo tune2fs -U time /dev/sda1
启用或禁用文件系统功能
从 dumpe2fs
或 tune2fs -l
的输出中,我们可以获取启用的文件系统功能列表,在本例中为:
有日志
外部属性
调整索引节点大小
目录索引
文件类型
需求_恢复
程度
64位
弹性背景
稀疏超级
大文件
巨大的文件
目录链接
额外尺寸
元数据_csum
通过使用tune2fs实用程序,我们可以更改这些功能的状态。我们怎样才能做到这一点?我们所要做的就是使用 -O
选项调用该实用程序。要禁用某项功能,我们必须在其前面添加 ^
(脱字符号)。让我们看一个例子。
众所周知,ext3
和 ext4
文件系统具有日志功能。日志的工作方式取决于设置为挂载选项的data
模式。可用的模式有:
数据=已排序
数据=期刊
数据=写回
data=ordered
模式是默认模式。处于此模式时,根据文件系统文档:
ext4 仅正式记录元数据,但它在逻辑上将与数据更改相关的元数据信息与数据块分组到称为事务的单个单元中。当需要将新元数据写入磁盘时,首先写入关联的数据块。一般来说,此模式的执行速度比写回稍慢,但比日志模式快得多。
当处于 data=writeback
模式时,改为:
ext4 根本不记录数据。此模式提供与 XFS、JFS 和 ReiserFS 的默认模式类似级别的日志记录 - 元数据日志记录。崩溃+恢复可能会导致在崩溃前不久写入的文件中出现不正确的数据。此模式通常会提供最佳的 ext4 性能。
最后,还有 data=journal 模式,这是最安全的模式,因为它提供数据和元数据日志记录,但会显着减慢文件系统的速度:
提供完整的数据和元数据日志。所有新数据首先写入日志,然后写入其最终位置。如果发生崩溃,可以重播日志,使数据和元数据进入一致状态。此模式是最慢的,除非需要同时从磁盘读取数据和将数据写入磁盘,此时它的性能优于所有其他模式。启用此模式将禁用延迟分配和 O_DIRECT 支持。
在某些情况下,例如在 USB 随身碟上使用 ext4 文件系统时,我们可能希望完全禁用日志功能。为此,我们可以使用 -O
选项调用 tune2fs
,并在 has_journal
功能前面加上插入符号:
$ sudo tune2fs -O ^has_journal /dev/sda1
请注意,只有当文件系统以只读模式卸载或安装时,才能禁用 has_journal
功能。要重新启用该功能,我们将运行:
$ sudo tune2fs -O has_journal /dev/sda1
设置文件系统默认挂载选项
文件系统挂载选项可以在 /etc/fstab
中指定:以这种方式指定的选项会覆盖默认选项,但是后者是如何设置的呢?要设置 ext 文件系统的默认选项,我们必须使用 -o
(小写)选项调用 tune2fs
实用程序。正如我们在文件系统功能中看到的那样,可以通过提供其名称作为选项的参数来设置挂载选项,也可以通过在其前面加上插入符号来清除挂载选项。在上一节中我们简要讨论了 ext4 文件系统日志模式。正如我们所见,默认模式是data=ordered
。假设我们要更改此设置,并设置 data=journal
模式。这是我们要运行的命令:
$ sudo tune2fs -o journal_data /dev/sda1
如果命令执行没有错误,我们可以看到文件系统信息中反映的更改:
$ sudo tune2fs -l /dev/sda1 | grep "Default mount options"
Default mount options: journal_data user_xattr acl
结论
在本文中,我们了解了如何使用 e2fsprogs 包中的两个实用程序:dumpe2fs 和une2fs。前者用于检索有关文件系统超级块和块组的信息,后者用于调整 ext 文件系统参数,例如保留块的数量、默认安装选项和文件系统 UUID。我们了解了如何执行此类操作以及最常用的选项。有关它们的完整列表以及我们使用的实用程序的更深入的知识,请查阅它们的手册!