LVM操作
PV
前置条件
向虚拟机中加入三个磁盘
shell
[root@localhost ~] #lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 200M 0 part /boot
└─sda2 8:2 0 19.8G 0 part
├─centos-root 253:0 0 17.8G 0 lvm /
└─centos-swap 253:1 0 2G 0 lvm [SWAP]
sdb 8:16 0 20G 0 disk
sdc 8:32 0 20G 0 disk
sdd 8:48 0 20G 0 disk
sr0 11:0 1 4.2G 0 rom将每个磁盘分两个区
shell
[root@localhost ~] #fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
Device does not contain a recognized partition table
使用磁盘标识符 0x0c0e0cff 创建新的 DOS 磁盘标签。
命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
分区号 (1-4,默认 1):
起始 扇区 (2048-41943039,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):+10G
分区 1 已设置为 Linux 类型,大小设为 10 GiB
命令(输入 m 获取帮助):n
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p):
Using default response p
分区号 (2-4,默认 2):
起始 扇区 (20973568-41943039,默认为 20973568):
将使用默认值 20973568
Last 扇区, +扇区 or +size{K,M,G} (20973568-41943039,默认为 41943039):
将使用默认值 41943039
分区 2 已设置为 Linux 类型,大小设为 10 GiB
命令(输入 m 获取帮助):p
磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x0c0e0cff
设备 Boot Start End Blocks Id System
/dev/sdb1 2048 20973567 10485760 83 Linux
/dev/sdb2 20973568 41943039 10484736 83 Linux
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@localhost ~] #fdisk /dev/sdc
[root@localhost ~] #fdisk /dev/sdd
[root@localhost ~] #lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 200M 0 part /boot
└─sda2 8:2 0 19.8G 0 part
├─centos-root 253:0 0 17.8G 0 lvm /
└─centos-swap 253:1 0 2G 0 lvm [SWAP]
sdb 8:16 0 20G 0 disk
├─sdb1 8:17 0 10G 0 part
└─sdb2 8:18 0 10G 0 part
sdc 8:32 0 20G 0 disk
├─sdc1 8:33 0 10G 0 part
└─sdc2 8:34 0 10G 0 part
sdd 8:48 0 20G 0 disk
├─sdd1 8:49 0 10G 0 part
└─sdd2 8:50 0 10G 0 part创建PV
shell
[root@localhost ~] #pvcreate /dev/sd{b..d}{1..2} //创建pv
Physical volume "/dev/sdb1" successfully created.
Physical volume "/dev/sdb2" successfully created.
Physical volume "/dev/sdc1" successfully created.
Physical volume "/dev/sdc2" successfully created.
Physical volume "/dev/sdd1" successfully created.
Physical volume "/dev/sdd2" successfully created.扫描PV
shell
[root@localhost ~] #pvscan //扫描pv,将磁盘中全部pv扫描出来
PV /dev/sda2 VG centos lvm2 [19.80 GiB / 0 free]
PV /dev/sdd2 lvm2 [<10.00 GiB]
PV /dev/sdc2 lvm2 [<10.00 GiB]
PV /dev/sdc1 lvm2 [10.00 GiB]
PV /dev/sdd1 lvm2 [10.00 GiB]
PV /dev/sdb2 lvm2 [<10.00 GiB]
PV /dev/sdb1 lvm2 [10.00 GiB]
Total: 7 [<79.80 GiB] / in use: 1 [19.80 GiB] / in no VG: 6 [<60.00 GiB]查看PV
shell
[root@localhost ~] #pvs //查看pv
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- 19.80g 0
/dev/sdb1 lvm2 --- 10.00g 10.00g
/dev/sdb2 lvm2 --- <10.00g <10.00g
/dev/sdc1 lvm2 --- 10.00g 10.00g
/dev/sdc2 lvm2 --- <10.00g <10.00g
/dev/sdd1 lvm2 --- 10.00g 10.00g
/dev/sdd2 lvm2 --- <10.00g <10.00g查看PV详细信息
shell
[root@localhost ~] #pvdisplay //显示pv的详细信息
--- Physical volume ---
PV Name /dev/sda2 #实际的 partition 分区名称
VG Name centos
PV Size 19.80 GiB / not usable 3.00 MiB
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 5069
Free PE 0
Allocated PE 5069
PV UUID 6qdKbB-EDGJ-Ny96-tkvL-F9yN-utZK-aTCgOj
"/dev/sdd2" is a new physical volume of "<10.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdd2 #实际的 partition 分区名称
VG Name #因为尚未分配出去,所以空白!
PV Size <10.00 GiB #就是容量说明
Allocatable NO #是否已被分配,结果是 NO
PE Size (KByte) 0 #在此 PV 內的 PE 大小
Total PE 0 #共分割出几个 PE
Free PE 0 #沒被 LV 用掉的 PE
Allocated PE 0 #尚可分配出去的 PE 数量
PV UUID ZsvIhv-LoGl-C5bY-RlSD-EwrD-le6B-5y85CZ
.........删除PV
shell
[root@localhost ~] #pvremove /dev/sdb1 //移除一个pv
Labels on physical volume "/dev/sdb1" successfully wiped.扩容PV
在虚拟机中或者分区中,可能大小会有变化,需要使用resize调整磁盘大小。
shell
[root@localhost ~] #pvresize /dev/sdb1 //扩容一个pv
Physical volume "/dev/sdb1" changed
1 physical volume(s) resized or updated / 0 physical volume(s) not resizedVG
将PV加入VG
shell
[root@localhost ~] #vgcreate vg1 /dev/sd{b..c}{1..2}
Physical volume "/dev/sdb1" successfully created.
Volume group "vg1" successfully created查看哪些PV加入了那个卷组
shell
[root@localhost ~] #pvs //我们可以通过pvs看到这些物理卷加入了vg01
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- 19.80g 0
/dev/sdb1 vg1 lvm2 a-- <10.00g <10.00g
/dev/sdb2 vg1 lvm2 a-- <10.00g <10.00g
/dev/sdc1 vg1 lvm2 a-- <10.00g <10.00g
/dev/sdc2 vg1 lvm2 a-- <10.00g <10.00g
/dev/sdd1 lvm2 --- 10.00g 10.00g
/dev/sdd2 lvm2 --- <10.00g <10.00g指定PE的大小
shell
[root@localhost ~] #vgcreate -s 16M vg2 /dev/sdd{1..2} //创建一个PE为16M的卷组vg2
Volume group "vg2" successfully created查看具体VG具体信息
shell
[root@localhost ~] #vgdisplay vg2
--- Volume group ---
VG Name vg2 VG名称
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0 当前逻辑卷 0
Open LV 0 打开的逻辑卷数量
Max PV 0
Cur PV 2
Act PV 2
VG Size <19.97 GiB
PE Size 16.00 MiB
Total PE 1278
Alloc PE / Size 0 / 0
Free PE / Size 1278 / <19.97 GiB
VG UUID I2m01v-VFpf-EK2D-reKO-XSQJ-jlh5-pGV58C扫描磁盘中所有VG
shell
[root@localhost ~] #vgscan
Reading volume groups from cache.
Found volume group "vg2" using metadata type lvm2
Found volume group "vg1" using metadata type lvm2
Found volume group "centos" using metadata type lvm2将PV移除VG
shell
[root@localhost ~] #vgreduce vg1 /dev/sdc{1..2} //将 sdc1,sdc2 从 vg1 中移除
Removed "/dev/sdc1" from volume group "vg1"
Removed "/dev/sdc2" from volume group "vg1"
[root@localhost ~] #pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- 19.80g 0
/dev/sdb1 vg1 lvm2 a-- <10.00g <10.00g
/dev/sdb2 vg1 lvm2 a-- <10.00g <10.00g
/dev/sdc1 lvm2 --- 10.00g 10.00g
/dev/sdc2 lvm2 --- <10.00g <10.00g
/dev/sdd1 vg2 lvm2 a-- 9.98g 9.98g
/dev/sdd2 vg2 lvm2 a-- 9.98g 9.98g将PV加入VG
shell
[root@localhost ~] #vgextend vg2 /dev/sdc2 //将sdc1加入vg2
Volume group "vg2" successfully extended
[root@localhost ~] #pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- 19.80g 0
/dev/sdb1 vg1 lvm2 a-- <10.00g <10.00g
/dev/sdb2 vg1 lvm2 a-- <10.00g <10.00g
/dev/sdc1 lvm2 --- 10.00g 10.00g
/dev/sdc2 vg2 lvm2 a-- 9.98g 9.98g
/dev/sdd1 vg2 lvm2 a-- 9.98g 9.98g
/dev/sdd2 vg2 lvm2 a-- 9.98g 9.98g删除vg(vgremove)
shell
[root@localhost ~] #vgremove vg1 //删除vg1
Volume group "vg1" successfully removed
[root@localhost ~] #pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- 19.80g 0
/dev/sdb1 lvm2 --- 10.00g 10.00g
/dev/sdb2 lvm2 --- <10.00g <10.00g
/dev/sdc1 lvm2 --- 10.00g 10.00g
/dev/sdc2 vg2 lvm2 a-- 9.98g 9.98g
/dev/sdd1 vg2 lvm2 a-- 9.98g 9.98g
/dev/sdd2 vg2 lvm2 a-- 9.98g 9.98gLV
创建LV
指定容量
由于前面的PE设置为16M,这里的大小也必须为16M的倍数
shell
[root@localhost ~] #lvcreate -L 200M -n lv01 vg2 //创建一个名lv01的逻辑卷,大小为200M,从vg2中分空间
Rounding up size to full physical extent 208.00 MiB
Logical volume "lv01" created.指定PE个数
创建一个逻辑分区为lv02,大小为100个PE大小,从VG2中分空间
shell
[root@localhost ~] #lvcreate -l 100 -n lv02 vg2指定VG的百分比大小
创建一个逻辑分区为lv03,大小为30%的VG大小(这里的的VG就是VG2),分VG2的空间 Logical volume "vg03" created.
shell
[root@localhost ~] #lvcreate -l 20%VG -n vg03 vg2查看LV具体信息
shell
[root@localhost ~] #lvdisplay /dev/vg2/lv01
--- Logical volume ---
LV Path /dev/vg2/lv01
LV Name lv01
VG Name vg2
LV UUID Rbduny-ikWr-oS6g-1HIe-gpov-yigV-Cuc4rb
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2020-10-14 19:56:26 +0800
LV Status available
# open 0
LV Size 208.00 MiB
Current LE 13
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:2扫描磁盘中的LV
shell
[root@localhost ~] #lvscan
ACTIVE '/dev/vg2/lv01' [208.00 MiB] inherit
ACTIVE '/dev/vg2/lv02' [1.56 GiB] inherit
ACTIVE '/dev/vg2/vg03' [5.98 GiB] inherit
ACTIVE '/dev/centos/swap' [2.00 GiB] inherit
ACTIVE '/dev/centos/root' [17.80 GiB] inherit删除LVM
//直接删除,如果不加 -y 会出现提示
shell
[root@localhost ~] #lvremove /dev/vg2/vg03 -y
Logical volume "vg03" successfully removed扩容LV
shell
[root@localhost ~] #lvextend -L +208M /dev/vg2/lv01
Size of logical volume vg2/lv01 changed from 208.00 MiB (13 extents) to 416.00 MiB (26 extents).
Logical volume vg2/lv01 successfully resized.可以看出容量大了208M
shell
[root@localhost ~] #lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root centos -wi-ao---- 17.80g
swap centos -wi-ao---- 2.00g
lv01 vg2 -wi-a----- 416.00m
lv02 vg2 -wi-a----- 1.56g在有文件系统的情况下继续扩容
创建ext4文件系统
shell
[root@localhost ~] #mkfs.ext4 /dev/vg2/lv01
[root@localhost ~] #mount /dev/vg2/lv01 /mnt/lv01/扩容文件系统
shell
[root@localhost /mnt/lv01] #lvextend -L +208M /dev/vg2/lv01
Size of logical volume vg2/lv01 changed from 416.00 MiB (26 extents) to 624.00 MiB (39 extents).
Logical volume vg2/lv01 successfully resized.查看是否扩容
shell
[root@localhost /mnt/lv01] #lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
..............
lv01 vg2 -wi-ao---- 624.00m //我们可以看出来的确扩容了但是文件系统并没有改变
shell
[root@manager /mnt]# df -h
Filesystem Size Used Avail Use% Mounted on
.....
/dev/mapper/vg2-lv01 190M 1.6M 175M 1% /mnt/lv01这样扩容只是将LV扩容,文件系统的一些元数据并没有改变,ext4文件系统扩容使用"resize2fs [逻辑卷名称]",xfs文件系统扩容使用"xfs_growfs 挂载点"
shell
[root@localhost /mnt/lv01] #df -h /mnt/lv01/
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/vg2-lv01 597M 2.3M 561M 1% /mnt/lv01创建xfs文件系统
shell
[root@localhost /mnt/lv01] #mkfs.xfs /dev/vg2/lv02
[root@localhost /mnt/lv01] #mount /dev/vg2/lv02 /mnt/lv02/
[root@localhost /mnt/lv01] #df -h /mnt/lv02
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/vg2-lv02 1.6G 33M 1.6G 3% /mnt/lv02扩容XFS文件系统
shell
[root@localhost /mnt/lv01] #lvextend -L +208M /dev/vg2/lv02
Size of logical volume vg2/lv02 changed from 1.56 GiB (100 extents) to <1.77 GiB (113 extents).
Logical volume vg2/lv02 successfully resized.
[root@localhost /mnt/lv01] #df -h /mnt/lv02
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/vg2-lv02 1.6G 33M 1.6G 3% /mnt/lv02使用xfs_growfs
shell
[root@localhost /mnt/lv01] #xfs_growfs /mnt/lv02
meta-data=/dev/mapper/vg2-lv02 isize=512 agcount=4, agsize=102400 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=409600, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 409600 to 462848
[root@localhost /mnt/lv01] #df -h /mnt/lv02
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/vg2-lv02 1.8G 33M 1.8G 2% /mnt/lv02使用-r选项扩容
shell
[root@localhost /mnt/lv01] #lvextend -L +208M -r /dev/vg2/lv02
Size of logical volume vg2/lv02 changed from <1.77 GiB (113 extents) to <1.97 GiB (126 extents).
Logical volume vg2/lv02 successfully resized.
meta-data=/dev/mapper/vg2-lv02 isize=512 agcount=5, agsize=102400 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=462848, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 462848 to 516096
[root@localhost /mnt/lv01] #df -h /mnt/lv02
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/vg2-lv02 2.0G 33M 2.0G 2% /mnt/lv02文件系统缩容
卸载LV
shell
[root@localhost /mnt] #umount /mnt/lv01缩减
shell
[root@localhost /mnt] #lvreduce -L -208M -r /dev/vg2/lv01
fsck,来自 util-linux 2.23.2
/dev/mapper/vg2-lv01: 12/212992 files (0.0% non-contiguous), 37649/851968 blocks
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/mapper/vg2-lv01 to 638976 (1k) blocks.
The filesystem on /dev/mapper/vg2-lv01 is now 638976 blocks long.
Size of logical volume vg2/lv01 changed from 832.00 MiB (52 extents) to 624.00 MiB (39 extents).
Logical volume vg2/lv01 successfully resized.重新挂载
shell
[root@localhost /mnt] #mount /dev/vg2/lv01 /mnt/lv01
[root@localhost /mnt] #df -h /mnt/lv01
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/vg2-lv01 597M 2.3M 562M 1% /mnt/lv01如果我们不使用 -r 选项,在扩展完分区后,我们需要使用resize2fs去扩展文件系统 //而且我们需要先缩小文件系统,再去缩小分区大小