前言
环境:centos7.9
本篇来实际操作lvm逻辑卷管理,从新加硬盘开始讲解。
添加2块磁盘
[root@localhost ~]# lsblk #发现系统没有识别我们的2块硬盘
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 12G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 11G 0 part
├─cl-root 253:0 0 9.8G 0 lvm /
└─cl-swap 253:1 0 1.2G 0 lvm [SWAP]
sr0 11:0 1 1024M 0 rom
[root@localhost ~]# init 6 #重启吧
[root@localhost ~]# lsblk #重启系统后发现系统已经识别到新加的2块硬盘了
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 12G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 11G 0 part
├─cl-root 253:0 0 9.8G 0 lvm /
└─cl-swap 253:1 0 1.2G 0 lvm [SWAP]
sdb 8:16 0 8G 0 disk #新加的8G的硬盘
sdc 8:32 0 6G 0 disk #新加的6G的硬盘
sr0 11:0 1 1024M 0 rom
创建PV(pvcreate 命令、pvs命令、pvdisplay命令、pvscan命令)
pvcreate:将一个或多个磁盘或分区转化为pv物理卷,其内部就是将磁盘或分区转化为一个个PE,所以磁盘或分区最好是没有数据的,不然数据就会丢失
pvs:查看pv的信息,信息简单明了
pvdisplay:查看pv的信息,信息内容更加详细
pvscan:查看pv的信息
创建PV
创建PV有两种方式:基于磁盘创建、 基于分区创建。
1、基于磁盘的 ,就不需要划分分区 ,直接通过 pvcreate 来创建物理卷即可;
2、基于分区的 ,需要事先通过fdisk划分分区 ,并将分区格式转化为8e(8e表示的就是Linux lvm),分区不要mkfs格式化 ,然后再进行 pvcreate 来创建物理卷即可 。
[root@localhost ~]# pvcreate /dev/sdb /dev/sdc #直接将两块磁盘转化为物理卷pv
Physical volume "/dev/sdb" successfully created.
Physical volume "/dev/sdc" successfully created.
[root@localhost ~]# pvs #查看系统中有哪些pv,使用pvdisplay、pvscan可以看的更加详细
PV VG Fmt Attr PSize PFree
/dev/sda2 cl lvm2 a-- 11.00g 4.00m #这个PV是安装centos时默认的lvm分区时创建的,可以看出它已经加入到了名为cl的VG中了,而且它的可用空间只有4.00m了
/dev/sdb lvm2 --- 8.00g 8.00g #成功将sdb创建为PV了,这时它还没加入到任何的vg中去
/dev/sdc lvm2 --- 6.00g 6.00g #成功将sdb创建为PV了,这时它还没加入到任何的vg中去
[root@localhost ~]#
vgcreate创建卷组vg
[root@localhost ~]# vgcreate my_data /dev/sdb /dev/sdc #创建一个名称为my_data的卷组,并把/dev/sdb /dev/sdc加入到卷组
Volume group "my_data" successfully created
[root@localhost ~]#
[root@localhost ~]# pvs #查看pv就发现2块磁盘的已经属于my_data的卷组了
PV VG Fmt Attr PSize PFree
/dev/sda2 cl lvm2 a-- 11.00g 4.00m
/dev/sdb my_data lvm2 a-- 8.00g 8.00g
/dev/sdc my_data lvm2 a-- 6.00g 6.00g
[root@localhost ~]#
lvcreate创建逻辑卷lv
[root@localhost ~]# vgs my_data #先查看my_data的卷组还有多少空间
VG #PV #LV #SN Attr VSize VFree
my_data 2 1 0 wz--n- 13.99g 13.99g
[root@localhost ~]#
[root@localhost ~]# lvcreate -n lv_data -L 6G my_data #在名为my_data的卷组上创建一个叫lv_data的逻辑卷,大小为6G
Logical volume "lv_data" created.
[root@localhost ~]#
[root@localhost ~]# lvs #查看刚才创建的lv,即lv_data
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root cl -wi-ao---- 9.79g
swap cl -wi-ao---- 1.20g
lv_data my_data -wi-a----- 6.00g
[root@localhost ~]#
mkfs格式化逻辑卷并创建文件系统
[root@localhost ~]# mkfs.xfs /dev/my_data/lv_data
meta-data=/dev/my_data/lv_data isize=512 agcount=4, agsize=393216 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=1572864, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
mount挂载
[root@localhost ~]# mkdir /lv_data #创建挂载点
[root@localhost ~]# mount /dev/my_data/lv_data /lv_data #挂载
[root@localhost ~]# df -Th #查看磁盘信息
Filesystem Type Size Used Avail Use% Mounted on
/dev/~/my_data-lv_data xfs 6.0G 33M 6.0G 1% /lv_data
[root@localhost ~]# echo '/dev/my_data/lv_data /lv_data xfs defaults 0 0' >> /etc/fstab #永久挂载
[root@localhost ~]# mount -a #测试/etc/fstab文件挂载是否有问题
阶段小结
1、添加新硬盘(不需要分区)或者创建一个是8e的Linux lvm分区(不需要格式化);
2、pvcreate /dev/sdb #创建物理卷,即将sdb转化为物理卷,参数可以是多个
3、pvs 、pvscan、pvdisplay #查看有哪些物理卷
4、vgcreate -n vg_my_data /dev/sdb #创建一个名称为vg_my_data的卷组,并把/dev/sdb加入
5、vgs、vgscan、vgdisplay #查看有哪些卷组
6、lvcreate -n lv_data -L 6G vg_my_data #在名为vg_my_data的卷组上创建一个叫lv_data的逻辑卷,大小为6G
7、lvs、lvdisplay、lvscan #查看有哪些逻辑卷
8、mkfs.xfs /dev/vg_my_data/lv_data #格式化并此案文件系统
9、mkdir /data && mount /dev/vg_my_data/lv_data /data #挂载就可以使用了
10、echo '/dev/my_data/lv_data /lv_data xfs defaults 0 0' >> /etc/fsta #设置永久挂载
10、df -Th #检查
lvextend 逻辑卷扩容
lvextend
可以在线扩容逻辑卷,不需要关闭,也不需要停服务。
[root@localhost ~]# lvextend -L +1G /dev/my_data/lv_data #命令三、-L参数直接指定扩容大小,最常用
[root@localhost ~]# lvextend -l +100%FREE /dev/my_data/lv_data #命令一、直接将vg中全部可用空间给lv扩容,比较常用
[root@localhost ~]# lvextend -l +25 /dev/my_data/lv_data #命令二、指定LE的个数来扩容,如果1个LE的大小是4MB,那么这个就是增加100MB
[root@localhost ~]# lvs && df -Th #查看逻辑卷发现其实增大了空间,但是df查看文件系统发现,文件系统没有增大空间,这说明文件系统感知不到逻辑卷的增大。
[root@localhost ~]# xfs_growfs /dev/my_data/lv_data #使用xfs_growfs 命令扩展xfs文件系统
[root@localhost ~]# resize2fs /dev/my_data/lv_data #使用resize2fs 命令扩展ext4文件系统
[root@localhost ~]# df -Th #查看文件系统发现真的增大了,扩容完成
vgextend 卷组扩容
卷组扩容其实就是新加一个磁盘或分区,转换为pv,然后把磁盘或分区加入卷组中即可。
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdd 8:48 0 2G 0 disk #这是我们新增加的磁盘sdd
sr0 11:0 1 4.1G 0 rom
[root@localhost ~]# fdisk /dev/sdd #对磁盘进行分区(实际可以不用分区也行)
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0xf521342a.
Command (m for help): n #输入n表示创建一个分配
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p #分区类型为主分区
Partition number (1-4, default 1): #分区编号默认1
First sector (2048-4194303, default 2048): #其实块保持默认
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-4194303, default 4194303): #最大块保持默认,默认会全部划为
Using default value 4194303
Partition 1 of type Linux and of size 2 GiB is set
Command (m for help): t #输入t表示改变分区格式
Hex code (type L to list all codes): 8e #输入8e表示为分区格式Linux LVM
Changed type of partition 'Linux' to 'Linux LVM'
Command (m for help): w #输入w表示保存所有更改,更改将被写入磁盘
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
[root@localhost ~]# df -h #查看文件系统,这里肯定看不到,因为我们的磁盘分区还没格式化成文件系统
Filesystem Size Used Avail Use% Mounted on
/dev/~/cl-root 9.8G 1021M 8.8G 11% /
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 8.6M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/sda1 1014M 139M 876M 14% /boot
/dev/~/my_data-lv_data 14G 33M 14G 1% /lv_data
tmpfs 378M 0 378M 0% /run/user/0
[root@localhost ~]# lsblk #查看系统中的磁盘
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdd 8:48 0 2G 0 disk
└─sdd1 8:49 0 2G 0 part #已经成功创建了sdd1分区
sr0 11:0 1 4.1G 0 rom
[root@localhost ~]# pvcreate /dev/sdd1 #将/dev/sdd1标准分区转化为物理卷
Physical volume "/dev/sdd1" successfully created.
[root@localhost ~]# pvs #查看系统中有哪些物理卷
PV VG Fmt Attr PSize PFree
/dev/sda2 cl lvm2 a-- 11.00g 4.00m
/dev/sdb my_data lvm2 a-- 8.00g 0
/dev/sdc my_data lvm2 a-- 6.00g 0
/dev/sdd1 lvm2 --- 2.00g 2.00g #这就是我们新加的物理卷
[root@localhost ~]# vgextend my_data /dev/sdd1 #扩容my_data卷组,即把/dev/sdd1加入my_data卷组
Volume group "my_data" successfully extended
[root@localhost ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 cl lvm2 a-- 11.00g 4.00m
/dev/sdb my_data lvm2 a-- 8.00g 0
/dev/sdc my_data lvm2 a-- 6.00g 0
/dev/sdd1 my_data lvm2 a-- 2.00g 2.00g #/dev/sdd1已成功加入my_data卷组,my_data卷组扩容成功
[root@localhost ~]#
lvremove删除逻辑卷
[root@localhost ~]# umount /dev/~/my_data-lv_data #删除一个lv之前必须先卸载文件系统
[root@localhost ~]# lvremove /dev/my_data/lv_data #删除逻辑卷
Do you really want to remove active logical volume my_data/lv_data? [y/n]: y
Logical volume "lv_data" successfully removed
[root@localhost ~]# lvs #检查发现,lv_data逻辑卷已经被删除了
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root cl -wi-ao---- 9.79g
swap cl -wi-ao---- 1.20g
[root@localhost ~]#
vgreduce 删除卷组中的某个pv
[root@localhost ~]# vgreduce my_data /dev/sdd1 #删除my_data卷组中的sdd1物理卷
Removed "/dev/sdd1" from volume group "my_data"
[root@localhost ~]# pvs #查看物理卷
PV VG Fmt Attr PSize PFree
/dev/sda2 cl lvm2 a-- 11.00g 4.00m
/dev/sdb my_data lvm2 a-- 8.00g 0
/dev/sdc my_data lvm2 a-- 6.00g 0
/dev/sdd1 lvm2 --- 2.00g 2.00g #sdd1不属于任何卷组
[root@localhost ~]#
vgremove 删除卷组
[root@localhost ~]# vgremove my_data #删除整个卷组
Do you really want to remove volume group "my_data" containing 1 logical volumes? [y/n]: n
Volume group "my_data" not removed
[root@localhost ~]#
pvremove 删除物理卷
[root@localhost ~]# pvremove /dev/sdd1 #删除物理卷
Labels on physical volume "/dev/sdd1" successfully wiped.
[root@localhost ~]#
小结
1、 lvextend 命令逻辑卷扩容
[root@localhost ~]# lvextend -L +1G /dev/my_data/lv_data #命令三、-L参数直接指定扩容大小,最常用
[root@localhost ~]# lvextend -l +100%FREE /dev/my_data/lv_data #命令一、直接将vg中全部可用空间给lv扩容,比较常用
[root@localhost ~]# lvextend -l +25 /dev/my_data/lv_data #命令二、指定LE的个数来扩容,如果1个LE的大小是4MB,那么这个就是增加100MB
[root@localhost ~]# xfs_growfs /dev/my_data/lv_data #使用xfs_growfs 命令扩展xfs文件系统
[root@localhost ~]# resize2fs /dev/my_data/lv_data #使用resize2fs 命令扩展ext4文件系统
2、vgextend 卷组扩容
[root@localhost ~]# fdisk /dev/sdd #将sdd分区,分区格式为Linux LVM,即8e
[root@localhost ~]# pvcreate /dev/sdd1 #将/dev/sdd1标准分区转化为物理卷
[root@localhost ~]# vgextend my_data /dev/sdd1 #扩容my_data卷组,即把/dev/sdd1加入my_data卷组
3、vgreduce 删除卷组中的某个pv
[root@localhost ~]# vgreduce my_data /dev/sdd1 #删除my_data卷组中的sdd1物理卷
4、vgremove 删除卷组
[root@localhost ~]# vgremove my_data #删除整个卷组
5、pvremove 删除物理卷
[root@localhost ~]# pvremove /dev/sdd1 #删除物理卷