为什么我需要在lvextend之后进行resize2fs?

为什么我需要在lvextend之后进行resize2fs?

要调整 LVM2 分区的大小,需要执行以下 2 个命令:

# lvextend -L+1G /dev/myvg/homevol
# resize2fs /dev/myvg/homevol

但是,当我执行 时lvextend,我发现更改已应用到分区(如 Gnome 磁盘中所示)。那么为什么我还需要这样做呢resize2fs

答案1

lvextend命令(不带--resizefs选项)仅使 LVM 端安排扩大作为逻辑卷的块设备。无论 LV 上的文件系统类型是什么(甚至是否存在文件系统),这些操作总是相似的。

如果 LV 包含 ext2/3/4 文件系统,下一步是更新文件系统元数据,使文件系统知道它有更多可用空间,并创建/扩展必要的元数据结构来管理添加的空间。对于 ext2/3/4 文件系统,这至少涉及:

  • 为添加的空间创建新的 inode
  • 扩展块分配数据结构,以便文件系统可以判断添加空间的任何块是否正在使用或空闲
  • 如果某些数据块妨碍了前面提到的数据结构扩展,则可能会移动它们

这部分特定于文件系统类型,尽管 ext2/3/4 文件系统类型非常相似,可以使用单个resize2fs工具调整它们的大小。对于 XFS 文件系统,您可以使用xfs_growfs工具来代替。其他文件系统可能有自己的扩展工具。如果逻辑卷不包含文件系统,而是包含“原始”数据库或 Oracle ASM 卷之类的内容,则需要应用另一个过程。

每个文件系统都有不同的内部工作方式,因此扩展文件系统的条件也会有所不同。花了一段时间才为文件系统扩展设计了一个通用的 API;这使得实现该fsadm resize命令成为可能,该命令提供了用于扩展多种文件系统类型的统一语法。选项--resizefslvextend使用该fsadm resize命令。

简而言之:在、、lvextend等 LVM 级工具之后,将看到更新后的大小,但文件系统和在其上操作的任何工具(如 )还看不到它。lvsvgslvdisplayvgdisplaydf

答案2

LVM 层只是其中文件系统的容器。您可以lvextend调整逻辑卷内文件系统的大小,而无需运行单独的resize2fs添加-r(或--resizefs) 选项:

lvextend -r ...

答案3

因为文件系统和逻辑卷是不同的抽象。卷是一块磁盘(如分区)——或者至少是“虚拟”的等效物。它只是一个块设备。文件系统是一种位于其内部的结构(或者,如果您愿意,可以在其之上),用于提供文件(和目录等)与该设备之间的映射。如果没有resize2fs,分区会更大,但文件系统不会利用可用空间。

您实际上可以创建一个文件系统最初它不占用整个分区。从mke2fs手册页:

文件系统大小由 fs-size 指定。如果 fs-size 没有后缀,则它被解释为 2 KB 的幂,除非指定了 -bblocksize 选项,在这种情况下,fs-size 被解释为 blocksize 块的数量。如果 fs-size 后缀为“k”、“m”、“g”、“t”(大写或小写),那么它会以 2 的幂次方 KB、MB、GB 进行解释, TB 等。如果省略 fs-size,mke2fs 将根据设备大小创建文件系统。

正如您所看到的,默认设置是填充分区,通常没有理由这样做 - 但如果您愿意,也可以这样做。

请注意,whenlvextend有一个选项--resizefs(或只是-r),该选项负责在扩展卷后扩展文件系统,而无需运行单独的命令。

答案4

强制文件resize2fs系统fs扩展或收缩以占用lvextend命令生成的新空间。流程:

with fs:
        -- shrink --> 1. shrink fs 2. shrink volume
        -- expand --> 1. expand volume, 2. expand fs

相关内容