1. LVM
Logical Volumes Management,逻辑卷管理。Linux中的LVM与AIX中的LVM基本相差不多,都是对逻辑卷的管理。其中涉及到几个概念:
- PV,物理卷
- VG,卷组
- LV,逻辑卷
1.1 PV
是一个块设备,可以是一个硬盘分区或者整个硬盘。想要使用LVM就必须先将块设备初始化成为PV。
初始化过程就是在块设备前端写一个LVM label,这个label包含随机的UUID,块设备的大小,还需要一块空间来记录LVM的metadata。
-----
| | <--- 1st sector : null
-----
| | <--- 2rd sector : LVM Label
-----
| | <--- 3-x sectors: Metadata
-----
| | <--- Usable Space
-----
RedHat建议一个磁盘上只创建一个PV,便于管理。另外,做条带化的时候,LVM不知道PV是否属于一个磁盘的。
1.2 VG
VG(volume group,卷组)是由PV组成,给LV使用的一个存储空间池。在VG中最小单位是extent,这个extent也是PV和LV的分块最小单位。
1.3 LV
逻辑卷是VG中的划分出来的一部分空间,有下面这几种类型:
- 线性逻辑卷(liner lv)
- 条带逻辑卷(striped lv)
- RAID逻辑卷(RAID Volume)
- 瘦供给逻辑卷(Thin Volume)
- 快照逻辑卷(snapshot Volume):支持snapshot lv,但是不支持用于集群的LV
- 瘦供给快照卷(Thinly snapshot Volume)
- 缓存卷(cache volume)
2. LVM with CLI
常用命令:
- vgcreate, vgs, vgdisplay
- pvcreate, pvs, pvdisplay
- lvcreate, lvs,
- lvm, lvmdiskscan,
- …
2.1 vg 管理
# 创建vg,创建成功后会在/dev/下出现一个vg的设备名,并且包含vg中的lv在其目录下
vgcreate vg1 /dev/sdd1 /dev/sde1
# 创建一个集群用的vg
vgcreate -cy ...
# 增加一个pv到vg中
vgextend vg1 /dev/sdf1
# 显示vg详细信息
vgdisplay new_vg
# 扫面磁盘并创建cache文件
vgscan
# 从vg中删除一个pv
vgreduce my_volume_group /dev/hda1
# 激活或者反激活vg
vgchange -a n my_volume_group
# 修改vg的参数,最大lv的数量
vgchange -l 128 /dev/vg00
# 删除一个vg
vgremove officevg
# 拆分出一个vg,比如samllvg就是从bigvg中拆分出来的
vgsplit bigvg smallvg /dev/ram15
# 把myvg合并到database这个vg中
vgmerge -v databases my_vg
# 备份和恢复vg metadata
vgcfgbackup and vgcfgrestore
# 重命名vg
vgrename /dev/vg02 /dev/my_volume_group
2.2 pv 管理
# 清楚pv的头信息
dd if=/dev/zero of=PhysicalVolume bs=512 count=1
# 初始化pv
pvcreate /dev/sdd /dev/sde /dev/sdf
# 扫描快设备,会显示有多少pv
lvmdiskscan
pvscan
# 显示pv信息
pvdisplay
# 如果块设备的容量发生变化
pvresize
# 删除pv
pvremove /dev/sdb1
2.3 lv 管理
# 创建lv
lvcreate -L 1500 -n testlv testvg
lvcreate -l 60%VG -n mylv testvg
lvcreate -l 100%FREE -n yourlv testvg
# 或者
# vgdisplay testvg | grep "Total PE"
Total PE 10230
# lvcreate -l 10230 -n mylv testvg
# 创建条带lv,-i表示pv,-I表示stripe大小
lvcreate -L 50G -i 2 -I 64 -n gfslv vg0
lvcreate -l 100 -i 2 -n stripelv testvg /dev/sda1:0-49 /dev/sdb1:50-99
# 创建RAID lv
lvcreate --type raid1 -m 1 -L 1G -n my_lv my_vg
lvcreate --type raid5 -i 3 -L 1G -n my_lv my_vg
# 将liner卷转化为raid卷
lvconvert --type raid1 -m 1 my_vg/my_lv
# 将raid卷转化为liner卷
lvconvert -m0 my_vg/my_lv
# 将镜像卷数量修改为3
lvconvert -m 2 my_vg/my_lv
lvconvert -m 2 my_vg/my_lv /dev/sdd1
# 创建镜像卷
lvcreate --type mirror -L 50G -m 1 -n mirrorlv vg0
# 拆分镜像卷
lvconvert --splitmirrors 2 --name copy vg/lv
# 创建thin卷
lvcreate -L 100M -T vg001/mythinpool
3. Examples
3.1 创建一个逻辑卷
# 初始化pv
pvcreate /dev/sda1 /dev/sdb1 /dev/sdc1
# 创建vg
vgcreate new_vol_group /dev/sda1 /dev/sdb1 /dev/sdc1
# 创建lv
lvcreate -L 2G -n new_logical_volume new_vol_group
# 创建文件系统
mkfs.ext4 /dev/new_vol_group/new_logical_volume
# 挂载文件系统
mount /dev/new_vol_group/new_logical_volume /mnt
3.2 创建一个条带卷
# 初始化pv
pvcreate /dev/sda1 /dev/sdb1 /dev/sdc1
# 创建vg
vgcreate volgroup01 /dev/sda1 /dev/sdb1 /dev/sdc1
# 创建条带化 lv,3个pv,4k的块
lvcreate -i 3 -I 4 -L 2G -n striped_logical_volume volgroup01
# 创建文件系统并挂载
3.3 扩展LV上的文件系统
[root@vm-centos7 ~]# df -h /mnt
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/myvg-mylv 11M 113K 10M 2% /mnt
# -r 直接修改文件系统
# -L 修改大小
[root@vm-centos7 ~]# lvresize -r -L +10M /dev/myvg/mylv
[root@vm-centos7 ~]# df -h /mnt/
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/myvg-mylv 23M 113K 22M 1% /mnt
3.4 拆分一个卷组
# 扫描查看pv中的使用情况
pvscan
# 移动数据sdc到sdb
pvmove /dev/sdc1 /dev/sdb1
# 再扫描查看pv数据
pvscan
# 反激活lv
lvchange -a n /dev/myvg/mylv
# 分离卷组
vgsplit myvg yourvg /dev/sdc1
# 在yourvg上创建lv
lvcreate -L 5 G -n yourlv yourvg
# 创建文件系统并挂载
3.4 从LV中删除一个DISK或替换一个DISK
# 查看当前pv使用情况
pvs -o+pv_used
# 添加新的pv
pvcreate /dev/sdc1
vg extend myvg /dev/sdc1
# 迁移数据
pvmove /dev/sdb1 /dev/sdc1
# 移除pv
vgreduce myvg /dev/sdb1
3.5 导入和导出vg
# 确保无用户使用该vg
# 反激活vg
vgchange -a n myvg
# 导出vg
vgexport myvg
# 查看pv
pvscan
# 将这些磁盘挂载到其他系统中
# 导入vg
vgimport myvg
# 激活
vgchange -a y myvg
3.6 TROUBLESHOOTING
- Use the -v, -vv, -vvv, or -vvvv argument of any command for increasingly verbose levels of output.
- Run the lvmdump command, which provides an information dump for diagnostic purposes.
4. reference
- [1] Red Hat Enterprise Linux 7 Logical Volume Manager Administration
- [2] LFCS: How to Manage and Create LVM Using vgcreate, lvcreate and lvextend Commands – Part 11