扩展卷是非常容易的。如果卷组中有足够的空闲空间,那么只需使用 lvextend 来扩展卷,不需要卸载它。然后,还要扩展逻辑卷中的文件系统(请记住,它们是两回事儿)。根据所用文件系统的不同,也可以进行在线扩展(即在挂载状态下进行扩展)。
如果 VG 中没有足够的空间,那么首先需要添加更多的物理磁盘。步骤如下:
- 使用一个物理磁盘创建一个分区。建议将分区类型改为 0x8e(Linux LVM),这样便于识别 LVM 分区/磁盘。使用 pvcreate 对物理磁盘进行初始化:pvcreate /dev/hda3。
- 然后,使用 vgextend 将它添加到现有的 VG 中:vgextend test-volume /dev/hda2。
还可以同时创建或添加多个物理磁盘:
1
2
| pvcreate /dev/hda2 /dev/hda3 /dev/hda5
vgextend test-volume /dev/hda2 /dev/hda3 /dev/hda5
|
添加了 PV 之后,就有了足以扩展逻辑卷的空间,就可以使用 lvextend 扩展逻辑卷了:lvextend -L 8G /dev/test-volume/data。这个命令将 /dev/test-volume/data LV 的大小扩展到 8GB。
lvextend 有一些有用的参数:
- 如果希望让 LV 增加 5GB,那么可以使用 -L +5G。
- 可以指定扩展部分的位置(也就是,用哪些 PV 提供新的空间);只需将希望使用的 PV 附加在命令后面。
- 还可以以 PE 为单位指定绝对/相对扩展大小。
细节参见 lvextend(8)。
在扩展 LV 之后,不要忘记扩展文件系统(这样才能实际使用增加的空间)。根据文件系统类型,这个操作可以在文件系统挂载状态下在线执行。
清单 10 是一个用 resize_reiserfs 重新设置 LV 大小的示例(随便说一句,可以在挂载的文件系统上使用这个命令):resize_reiserfs /dev/test-volume/data。
管理卷为了管理卷,需要知道如何减小 LV 和删除 PV。
减小逻辑卷
可以按照扩展 LV 的方式使用 lvreduce 命令减小 LV。从 LVM 的角度来说,这个操作可以在卷在线的情况下执行;但是,大多数文件系统不支持缩小在线文件系统。清单 10 给出这个过程的示例:
清单 10. 减小 LV1
2
3
4
5
6
| #unmount LV
umount /path/to/mounted-volume
#shrink filesystem to 4G
resize_reiserfs -s 4G /dev/test-volume/data
#reduce LV
lvreduce -L 4G /dev/vg00/test
|
请注意大小和单位:文件系统不应该比 LV 大!
删除物理卷
假设出现了以下情况:一个卷组包含两个 80GB 的磁盘,希望将它们替换为 160GB 的磁盘。在使用 LVM 时,可以按照添加 PV 的方式从 VG 中删除 PV(即在在线情况下执行删除)。但是注意,不能删除 LV 中正在使用的 PV。对于这些情况,可以使用 pvmove,它可以释放在线的 PV,这样就可以轻松地替换它们。在热交换环境中,甚至可以交换所有磁盘,而根本不需要停机!
pvmove 的惟一要求是,VG 中连续空闲区段的数量必须等于要从 PV 中删除的区段数量。没有直接判断连续空闲 PE 的最大数量的简便方法,但是可以使用 pvdisplay -m 显示 PV 分配图:
清单 11. 显示 PV 分配图1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
| #shows the allocation map
pvdisplay -m
--- Physical volume ---
PV Name /dev/hda6
VG Name test-volume
PV Size 4.91 GB / not usable 1.34 MB
Allocatable yes (but full)
PE Size (KByte) 4096
Total PE 1200
Free PE 0
Allocated PE 1200
PV UUID BA99ay-tOcn-Atmd-LTCZ-2KQr-b4Z0-CJ0FjO
--- Physical Segments ---
Physical extent 0 to 2367:
Logical volume /dev/test-volume/data
Logical extents 5692 to 8059
Physical extent 2368 to 2499:
Logical volume /dev/test-volume/data
Logical extents 5560 to 5691
--- Physical volume ---
PV Name /dev/hda7
VG Name test-volume
PV Size 9.77 GB / not usable 1.37 MB
Allocatable yes
PE Size (KByte) 4096
Total PE 2500
Free PE 1220
Allocated PE 1280
PV UUID Es9jwb-IjiL-jtd5-TgBx-XSxK-Xshj-Wxnjni
--- Physical Segments ---
Physical extent 0 to 1279:
Logical volume /dev/test-volume/LV0
Logical extents 0 to 1279
Physical extent 1280 to 2499:
FREE
|
清单 11 显示有 2,499-1,280 = 1,219 个连续空闲区段,这表示最多能够将 1,219 个区段从另一个 PV 转移到 /dev/hda7。
如果希望释放一个 PV 以便进行替换,那么最好禁止它的分配,这样就可以在从卷组中删除它之前确保它一直是空闲的。在转移数据之前,执行以下命令:
清单 12. 在释放之前禁止 PV 的分配1
2
| #Disable /dev/hda6 allocation
pvchange -xn /dev/hda6
|
释放之后,PV /dev/hda6 的大小为 1,200 个区段,没有空闲区段了。使用以下命令将数据转移出这个 PV:
清单 13. 从释放的 PV 移出数据1
2
| #Move allocated extents out of /dev/hda6
pvmove -i 10 /dev/hda6
|
清单 13 中的 -i 10 参数指示 pvmove 每 10 秒报告一次状态。根据要转移的数据量,这个操作可能要花费几分钟(甚至几小时)。还可以使用 -b 参数将这个操作转到后台执行。在后台执行的情况下,状态报告会发送到系统日志。
如果没有足以进行 pvmove 操作的连续空闲区段,那么可以在 VG 中添加 一个或多个磁盘/分区,从而形成 pvmove 所需的连续空间。
其他有用的 LVM 操作
关于下面这些 LVM 操作的细节,请查阅手册页:
- pvresize:如果底层分区也已经扩展了,那么可以用这个操作扩展 PV;如果分配图允许的话,它也可以缩小 PV。
- pvremove:销毁 PV(清空它的元数据)。只有在用 vgreduce 从 VG 中删除 PV 之后,才能使用这个操作。
- vgreduce:从卷组中删除未分配的 PV,这会减小 VG。
- vgmerge:将两个 VG 合并成一个。目标 VG 可以是在线的!
- vgsplit:分割一个卷组。
- vgchange:修改一个 VG 的属性和权限。
- lvchange:修改一个 LV 的属性和权限。
- lvconvert:在线性卷和镜像或快照之间进行转换。
|