要调整 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
命令成为可能,该命令提供了用于扩展多种文件系统类型的统一语法。选项--resizefs
仅lvextend
使用该fsadm resize
命令。
简而言之:在、、lvextend
等 LVM 级工具之后,将看到更新后的大小,但文件系统和在其上操作的任何工具(如 )还看不到它。lvs
vgs
lvdisplay
vgdisplay
df
答案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