LVM逻辑卷管理
LVM 利用 Linux 内核的 device-mapper 来实现存储系统的虚拟化(系统分区独立于底层硬件)。 通过 LVM,你可以实现存储空间的抽象化并在上面建立虚拟分区(virtual partitions),可以更简便地扩大和缩小分区,可以增删分区时无需担心某个硬盘上没有足够的连续空间
LVM术语:
物理卷:pv
卷组:vg
逻辑卷:lv
物理区域:pe
1、查看内核
LVM1版本需要2.4(包括)以后的内核支持;LVM2需要2.6(包括)以后的内核版本支持
[root@vm11 ~]# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
一、LVM(逻辑卷管理)
1.1 磁盘分区
# 新建
fdisk /dev/sdb
Command (m for help): n
Command action
e extended
p primary partition (1-4)
# 主分区
p
# 分区号
Partition number (1-4): 1
# 回车用默认的 1
First cylinder (1-1044, default 1):
# 大小
Last cylinder, +cylinders or +size{K,M,G} (1-1044, default 1044):
# 改变类型
Command (m for help): t
Selected partition 1
#LVM 的分区代码
Hex code (type L to list codes): 8e
Changed system type of partition 1 to 8e (Linux LVM)
# 保存
w
# 退出
q
# 查看创建完后的分区
fdisk -l
Disk /dev/sda: 96.6 GB, 96636764160 bytes
255 heads, 63 sectors/track, 11748 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0008cbaf
Device Boot Start End Blocks Id System
/dev/sda1 * 1 64 512000 83 Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2 64 11749 93858816 8e Linux LVM
Disk /dev/sdb: 214.7 GB, 214748364800 bytes
255 heads, 63 sectors/track, 26108 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x16396101
Device Boot Start End Blocks Id System
/dev/sdb1 1 26108 209712478+ 8e Linux LVM
1.2 物理卷管理
# 创建物理卷(PV)
pvcreate /dev/sdb1
pvscan
PV /dev/sdb1 VG vg_data lvm2 [200.00 GiB / 30.00 GiB free]
PV /dev/sda2 VG VolGroup lvm2 [89.51 GiB / 1.51 GiB free]
Total: 2 [289.50 GiB] / in use: 2 [289.50 GiB] / in no VG: 0 [0 ]
pvdisplay
--- Physical volume ---
PV Name /dev/sdb1
VG Name vg_data
PV Size 200.00 GiB / not usable 1.34 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 51199
Free PE 7679
Allocated PE 43520
PV UUID c9js6G-WP93-ug9b-9aXe-unnZ-doWQ-AkzOKf
--- Physical volume ---
PV Name /dev/sda2
VG Name VolGroup
PV Size 89.51 GiB / not usable 3.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 22914
Free PE 386
Allocated PE 22528
PV UUID bFne0f-RnL8-vut2-AcKr-fr9k-VfeG-C8OHSR
# 删除物理卷
pvremove /dev/sdb1
1.3 卷组管理
# 创建卷组(VG)
vgcreate vg_data /dev/sdb1
vgcreate vg_data /dev/hda{6,7,8}
# 扩展 VG
vgextend vg_data /dev/hda9
# 查看 VG 信息
vgscan
Reading all physical volumes. This may take a while...
Found volume group "vg_data" using metadata type lvm2
Found volume group "VolGroup" using metadata type lvm2
vgdisplay
--- Volume group ---
VG Name vg_data
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 4
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 3
Open LV 3
Max PV 0
Cur PV 1
Act PV 1
VG Size 200.00 GiB
PE Size 4.00 MiB
Total PE 51199
Alloc PE / Size 43520 / 170.00 GiB
Free PE / Size 7679 / 30.00 GiB
VG UUID EQhiUt-Waj1-F3V2-cwej-2joz-oC3P-JMSFui
--- Volume group ---
VG Name VolGroup
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 6
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 5
Open LV 5
Max PV 0
Cur PV 1
Act PV 1
VG Size 89.51 GiB
PE Size 4.00 MiB
Total PE 22914
Alloc PE / Size 22528 / 88.00 GiB
Free PE / Size 386 / 1.51 GiB
VG UUID i0qDld-uOz4-P1BS-2gN8-2vhj-5gdc-DnHfa4
# 删除 VG
vgremove vg_data
1.4 逻辑卷管理
# 创建逻辑卷(LV)
lvcreate -L 20g -n lv_oracle vg_data
lvcreate -l 100%FREE -n lv_oracle vg_data
# 查看 LV
lvscan
ACTIVE '/dev/vg_data/lv_oracle' [20.00 GiB] inherit
ACTIVE '/dev/VolGroup/lv_root' [50.00 GiB] inherit
ACTIVE '/dev/VolGroup/lv_home' [10.00 GiB] inherit
lvdisplay
--- Logical volume ---
LV Path /dev/vg_data/lv_oracle
LV Name lv_oracle
VG Name vg_data
LV UUID P3jVXt-92Lp-QElD-ddl8-lW4r-okz7-n8fdXD
LV Write Access read/write
LV Creation host, time capdb, 2016-03-17 17:12:43 +0800
LV Status available
# open 1
LV Size 20.00 GiB
Current LE 5120
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:5
# 格式化逻辑卷
mkfs -t ext4 /dev/vg_data/lv_oracle
mkfs.ext4 /dev/vg_data/lv_oracle
# 挂载逻辑卷
mkdir /oracle
# 修改 fstab
vi /etc/fstab
/dev/vg_data/lv_oracle /oracle ext4 dafualts 0 0
# 测试 lv 是否可以挂载
mount -a
mount /dev/vg_data/lv_oracle /oracle
df -h
# 删除逻辑卷
fuser -m /oracle
umount /oracle
lvremove /dev/vg_data/lv_oracle
总结:
新建20G逻辑卷
pvcreate /dev/sdb1
vgcreate vg_data /dev/sdb1
vgcreate vg_data /dev/hda9 #扩展卷组
lvcreate -L 20g -n lv_job vg_data
mkfs -t ext4 /dev/vg_data/lv_job
mkdir /oracle
mount /dev/vg_data/lv_job /oracle
二、LVM伸缩管理
2.1 LVM扩展
LVM 特点就是支持在线动态扩容,如果为了稳妥也可以先 umount
# 查看 Free PE / Size 可用空间
vgdisplay
--- Volume group ---
VG Name vg_data
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 4
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 3
Open LV 3
Max PV 0
Cur PV 1
Act PV 1
VG Size 200.00 GiB
PE Size 4.00 MiB
Total PE 51199
Alloc PE / Size 43520 / 170.00 GiB
Free PE / Size 7679 / 30.00 GiB
VG UUID EQhiUt-Waj1-F3V2-cwej-2joz-oC3P-JMSFui
# 设置逻辑卷的大小
lvresize -L 40g /dev/vg_data/lv_oracle
lvresize -L +20g /dev/vg_data/lv_oracle
# 检查磁盘错误,等待时间较长可以考虑跳过
e2fsck -f /dev/vg_data/lv_oracle
# 更新文件系统信息
resize2fs /dev/vg_data/lv_oracle
# 检查逻辑卷状态
lvdisplay vg_data
2.2 LVM缩减
# 卸载 LV
umout /oracle
# 检查磁盘错误
e2fsck -f /dev/vg_data/lv_oracle
# 缩小文件系统,更新文件系统信息
resize2fs /dev/vg_data/lv_oracle 10g
# 减少 LV 大小
lvresize -L 10g /dev/vg_data/lv_oracle
lvresize -L -30g /dev/vg_data/lv_oracle
# 检查逻辑卷大小
lvdisplay
df -h
2.3 扩展卷组
# 创建一个 2GB 分区 sdc1,类型为 LVM(8e)
fdisk /dev/sdc
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-1044, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-1044, default 1044): +2G
Command (m for help): t
Selected partition 1
Hex code (type L to list codes): 8e
Changed system type of partition 1 to 8e (Linux LVM)
Command (m for help): w
The partition table has been altered!
# 创建一个物理卷 /dev/sdc1
pvcreate /dev/sdc1
# 增加到已存在的卷组
vgextend vg_data /dev/sdc1
# 验证卷组大小
vgdisplay
2.4 删除卷组
# 卸载逻辑卷
umount /oracle
# 删除逻辑卷
lvremove /dev/vg_data/lv_oracle
# 取消激活卷组
vgchange -a n vg_data
# 删除卷组
vgremove vg_data
# 删除物理卷
pvremove /dev/sdb1
pvremove /dev/hda{6,7,8}
# 普通磁盘类型是 83
fdisk /dev/sdb
t 83
lvm卷在重启后消失问题处理过程
故障:
系统重启后,发现LVM中/dev/sdb1丢失,如下
/dev/vg01/lvm01 完全消失,只剩下/dev/sdb盘
原因分析:
一般LVM的VG丢失都是由于突然断电或者更换了操作系统等原因引起。尝试执行vgscan命令扫描卷组
初步判断是因为系统重启后,/dev/sdb1消失导致VG无法找到物理卷
解决方法:
1、备份数据
为了防止数据丢失或破坏,首先对/dev/emcpowera设备的数据进行备份
dd if=/dev/sdb of=/data/sdb #我的数据11T数据盘,太大,所以没有做数据备份这个动作
2、修正UUID号
pvcreate -u p6LgHa-UfMC-oAD1-1kSw-zSlM-dlya-CZf9iF /dev/sdb --restorefile /etc/lvm/backup/vg01
报错:原因是没有对/dev/sdb进行分区
分区操作
注意:需问清楚之前sdb1分区大小,这次采取默认分区操作即可即
fdisk /dev/sdb
分区成功后重新执行修正uuid号
3、恢复卷组信息
vgcfgrestore -f /etc/lvm/backup/vg01 vg01
4、查看相关信息
相关信息都已恢复
pvs
vgs
lvs
4、激活逻辑卷
lvchange -ay /dev/vg01/lvm01
5、重新挂载
mount /dev/vg01/lvm01 /work
6、查看文件是否都在