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

Ruf*_*fus 14 partition resize2fs

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

# lvextend -L+1G /dev/myvg/homevol
# resize2fs /dev/myvg/homevol
Run Code Online (Sandbox Code Playgroud)

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

tel*_*coM 26

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

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

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

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

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

简而言之:在 之后lvextend,LVM 级工具(例如lvsvgslvdisplay和 )vgdisplay将看到更新后的大小,但文件系统和在其上运行的任何工具(例如df)还不会看到它。


JRF*_*son 14

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

lvextend -r ...
Run Code Online (Sandbox Code Playgroud)


mat*_*tdm 5

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

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

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

如您所见,默认值是填充分区,通常没有理由不这样做 - 但如果您愿意,您可以这样做。

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