#+SETUPFILE: ~/Dropbox/Doc/Org_Templates/level-1.org
概念
- PV(Physical Volume) 实际的物理卷轴, 在 LVM 的世界里, 一般是具体的硬盘或者某个硬盘分区
- VG(Volume Group) 由多个 PV 共同组成一个 VG, 负责以 PE 作为单位来给 LV 分配磁盘资源
- LV(Logical Volume) 最终用户看到, 能直接读写的设备, 类似于传统的硬盘分区, 只不过这个 LV 的大小可以根据使用自由的扩大和缩小
- PE(Physical Extend) 是整个 LVM 最小的存储单位, 默认是 4M, 可以在创建 VG 的时候指定
使用流程
LVM 的使用流程很简单:
- 首先是创建 PV, 根据前面所说的, 就是把硬盘或者硬盘分区编程 LVM 中的 PV
- 然后是创建 VG, 在创建的时候先得至少指定一个 PV, 后续的可以通过 vgextend 添加
- 然后再创建 LV, 创建完成后就可以像普通的硬盘分区一样的格式化, 挂载, 使用了
Use case
我有四个硬盘 /dev/vd{b,c,d,e}, 分别用他们作为 PV, 然后再其上创建 VG, 然后在创建 LV, 并使用之.
首先创建 PV:
root@cloudtimes:~# pvcreate /dev/vd{b,c,d,e}
Writing physical volume data to disk "/dev/vdb"
Physical volume "/dev/vdb" successfully created
Writing physical volume data to disk "/dev/vdc"
Physical volume "/dev/vdc" successfully created
......
显示 PV
root@cloudtimes:~# pvscan
PV /dev/vdb VG lvmvg lvm2 [20.00 GiB / 20.00 GiB free]
PV /dev/vdc VG lvmvg lvm2 [20.00 GiB / 20.00 GiB free]
PV /dev/vdd lvm2 [20.00 GiB]
PV /dev/vde lvm2 [20.00 GiB]
Total: 4 [79.99 GiB] / in use: 2 [39.99 GiB] / in no VG: 2 [40.00 GiB]
用 vdb 创建 VG(lvmvg)
root@cloudtimes:~# vgcreate lvmvg /dev/vdb
Volume group "lvmvg" successfully created
把 vdc 加入到 lvmvg
root@cloudtimes:~# vgextend lvmvg /dev/vdc
Volume group "lvmvg" successfully extended
创建 LV(lvmlv)
root@cloudtimes:~# vgdisplay | grep Free
Free PE / Size 10238 / 39.99 GiB // 有 10238 个 PE, 每个 4M
root@cloudtimes:~# lvcreate -l 2000 -n lvmlv lvmvg // 创建一个 8G(2000x4M) 的 LV
Logical volume "lvmlv" created
root@cloudtimes:~# lvs
LV VG Attr LSize Pool Origin Data% Move Log Copy% Convert
lvmlv lvmvg -wi-a--- 7.81g
像普通磁盘分区一样使用这个 LV
root@cloudtimes:~# lvdisplay | grep Path
LV Path /dev/lvmvg/lvmlv
root@cloudtimes:~# mkfs.ext4 /dev/lvmvg/lvmlv
root@cloudtimes:~# mkdir /mnt/lvm
root@cloudtimes:~# mount /dev/lvmvg/lvmlv /mnt/
root@cloudtimes:~# df -m | grep lvm
/dev/mapper/lvmvg-lvmlv 7747 18 7329 1% /mnt
给这个分区扩容
root@cloudtimes:~# lvextend -l+1000 /dev/lvmvg/lvmlv //增加 4G(1000 x4) 的容量
Extending logical volume lvmlv to 11.72 GiB
Logical volume lvmlv successfully resized
root@cloudtimes:~# resize2fs /dev/lvmvg/lvmlv
resize2fs 1.42.5 (29-Jul-2012)
Filesystem at /dev/lvmvg/lvmlv is mounted on /mnt; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/lvmvg/lvmlv is now 3072000 blocks long.
root@cloudtimes:~# df -m | grep lvm
/dev/mapper/lvmvg-lvmlv 11685 20 11108 1% /mnt