LVM on linux
概述
随着硬盘中数据越来越多,如果你在硬盘的标准分区上创建了文件系统,那么向已有的文件系统增添额外的存储空间多少是一种痛苦的体验。你只能在同一个物理硬盘的可用空间范围内调整分区大小。如果硬盘上没有地方了,就得找一个更大的硬盘,手动将已有的文件系统转移到新硬盘。这时候可以通过将另一块硬盘上的分区加入已有的文件系统来动态地添加存储空间。Linux 逻辑卷管理器(logical volume manager,LVM)正是用来做这个的。它可以让你在无须重建整个文件系统的情况下,轻松地管理磁盘空间。
LVM 允许将多个分区组合在一起,作为单个分区(逻辑卷)进行格式化、在 Linux 虚拟目录结构上挂载、存储数据等。随着数据需求的增长,你还可以继续向逻辑卷添加分区。
LVM 由 3 个主要部分组成,每一个组成部分在创建和维护逻辑卷的过程中都扮演着重要的角色。
- 物理卷(PV)
物理卷(physical volume,PV)通过 LVM 的 pvcreate 命令创建。该命令指定了一个未使用的磁盘分区(或整个驱动器)由 LVM 使用。在这个过程中,LVM 结构、卷标和元数据都会被添加到该分区。
- 卷组(VG)
卷组(volume group,VG)通过 LVM 的 vgcreate 命令创建。该命令会将 PV 加入存储池,后者随后用于构建各种逻辑卷。
可以存在多个卷组。当你使用 vgcreate 将一个或多个 PV 加入 VG 时,也会同时添加卷组的元数据。被指定为 PV 的分区只能属于单个 VG。但是,被指定为 PV 的其他分区可以属于其他 VG。
- 逻辑卷(LV)
逻辑卷(logical volume,LV)通过 LVM 的 lvcreate 命令创建。这是逻辑卷创建过程的最终产物。LV 由 VG 的存储空间块组成。你可以使用文件系统格式化 LV,然后将其挂载,像普通的磁盘分区那样使用。
尽管可以有多个 VG,但 LV 只能从一个指定的 VG 中创建。不过,多个 LV 可以共享单个 VG。你可以使用相应的 LVM 命令调整(增加或减少)LV 的容量。该特性赋予了数据存储管理极大的灵活性。
LVM
lvm 是用于创建和管理 LV 的交互式实用工具。
首次设置逻辑卷的步骤如下。
- (1) 创建物理卷。
- (2) 创建卷组。
- (3) 创建逻辑卷。
- (4) 格式化逻辑卷。
- (5) 挂载逻辑卷。
创建 PV
在指定作为 PV 的存储设备之前,先确保已经分区且未使用。可以使用 pvcreate 命令指定要作为 PV 的分区,执行该命令需要有超级用户权限:
lsblk
sudo pvcreate /dev/sdb1 /dev/sdc1 /dev/sdd1
最好多设置几个 PV。LVM 的关键在于将额外的存储空间动态添加到 LV。设置过 PV 后,就该创建 VG 了。
创建 VG
只要是 PV,就可以加入 VG。创建 VG 的命令是 vgcreate。在创建 VG 的过程中可以指定多个 PV。如果随后需要向 VG 中添加 PV,可以使用 vgextend 命令。
通常的做法是将第一个 VG 命名为 vg00,将下一个 VG 命名为 vg01,以此类推。不过,具体怎么命名是你自己的选择。由于许多发行版在安装期间为虚拟目录结构的根(/)设置了 LVM,因此最好使用 vgdisplay 命令检查一下系统当前的 VG:
sudo vgdisplay
然后创建 vg:
sudo vgcreate vg00 /dev/sdb1 /dev/sdc1
上面只用了两个 PV(/dev/sdb1 和/dev/sdc1)来创建 VG vg00。现在,我们的 VG 存储池中至少包含了一个 PV,可以创建 LV 了。
创建 LV
可以使用 lvcreate 命令创建 LV。LV 的大小由-L 选项设置,使用的空间取自指定的 VG 存储池:
sudo lvcreate -L 1g -v vg00
创建好 LV 之后,可以使用 lvdisplay 命令显示相关信息。注意,命令中的完整路径名用于指定 LV:
sudo lvdisplay
除了 lvdisplay 命令,也可以使用 lvs 命令和 lvscan 命令显示系统的 LV 信息。
格式化 LV
一旦创建好 LV,就可以将其视作普通分区,现在需要在其上创建文件系统。
sudo mkfs -t ext4 /dev/vg00/lvol0
挂载 LV
挂载 LV 到/mnt。
sudo mount -t ext4 /dev/vg00/lvol0 /mnt
现在,LVM 的各个组成部分都已经创建妥当,LV 也挂载到了目录结构中,可以随意使用了。
扩展或收缩 VG
如果需要扩展 VG:
sudo vgextend vg00 /dev/sdd1
如果需要收缩 VG:
sudo vgreduce vg00 /dev/sdc1
扩展或收缩 LV
如果需要扩展 LV:
sudo lvextend -L 30g /dev/vg00/lvol0
如果需要收缩 LV:
sudo lvreduce -L 10g /dev/vg00/lvol0
利用这些命令,可以更好地控制 Linux LVM 环境,允许你轻松地扩展已有的文件系统,而无须完全重建。