LVM是Linux系统对硬盘分区进行管理的一种机制,在硬盘分区和文件系统之间添加了一个逻辑层,它提供了一个抽象的卷组,可以把多块硬盘进行卷组合并。这样,用户无需关心物理硬盘设备的底层架构和布局,就可以实现对硬盘分区的动态调整。
常用的LVM部署命令
功能 | 物理卷管理命令pv | 卷组管理命令vg | 逻辑卷管理命令lv |
---|---|---|---|
scan扫描 | pvscan | vgscan | lvscan |
create建立 | pvcreate | vgcreate | lvcreate |
display显示 | pvdisplay | vgdisplay | lvdisplay |
remove删除 | pvremove | vgremove | lvremove |
extend扩展 | - | vgextend | lvextend |
reduce缩小 | - | vgreduce | lvreduce |
实现LVM:
一、物理卷、卷组、逻辑卷的建立
首先在虚拟机上添加两块硬盘。
一直点下一步下一步,添加两块是20G的硬盘。点确定!不要点叉!
1.1 通过fdisk建立LVM类型的分区。
分区(也可以不分区直接用),可以reboot重启一下后。输入lsblk能看到多了两块硬盘sdb,sdc
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 60G 0 disk
├─sda1 8:1 0 4G 0 part /boot
└─sda2 8:2 0 54G 0 part
├─centos-root 253:0 0 50G 0 lvm /
└─centos-swap 253:1 0 4G 0 lvm [SWAP]
sdb 8:16 0 20G 0 disk
sdc 8:32 0 20G 0 disk
sr0 11:0 1 1024M 0 rom
分区:上一篇文章有讲解!管理磁盘,硬盘管理工具fdisk-CSDN博客
[root@localhost ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。Device does not contain a recognized partition table
使用磁盘标识符 0xe3054f41 创建新的 DOS 磁盘标签。命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p):
Using default response p
分区号 (1-4,默认 1):
起始 扇区 (2048-41943039,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):+5G
分区 1 已设置为 Linux 类型,大小设为 5 GiB命令(输入 m 获取帮助):w
The partition table has been altered!Calling ioctl() to re-read partition table.
正在同步磁盘。
这个是sdb1分区。sdb磁盘上分两块区域。同理,再分一个sdb2。
分区后:能看到sdb有两个分区sdb1和sdb2。磁盘sdc也同理分两个分区,每个分区5G
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 60G 0 disk
├─sda1 8:1 0 4G 0 part /boot
└─sda2 8:2 0 54G 0 part
├─centos-root 253:0 0 50G 0 lvm /
└─centos-swap 253:1 0 4G 0 lvm [SWAP]
sdb 8:16 0 20G 0 disk
├─sdb1 8:17 0 5G 0 part
└─sdb2 8:18 0 5G 0 part
sdc 8:32 0 20G 0 disk
├─sdc1 8:33 0 5G 0 part
└─sdc2 8:34 0 5G 0 part
sr0 11:0 1 1024M 0 rom
修改分区类型为LVM类型。t是修改分区类型。(说明:在建立分区时也可以直接修改LVM类型)
[root@localhost ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
命令(输入 m 获取帮助):t
分区号 (1,2,默认 2):1
Hex 代码(输入 L 列出所有代码):8e
已将分区“Linux”的类型更改为“Linux LVM”命令(输入 m 获取帮助):t
分区号 (1,2,默认 2):2
Hex 代码(输入 L 列出所有代码):8e
已将分区“Linux”的类型更改为“Linux LVM”命令(输入 m 获取帮助):w
The partition table has been altered!Calling ioctl() to re-read partition table.
正在同步磁盘。
输入fdisk -l看到sdb1,2修改为了8e
同理也把sdc1,2修改成8e。
sdb和sdc分区(sdb1,sdb2,sdc1,sdc2)和修改类型(8e)就完成了。
1.2 建立物理卷
pvcreate命令可以在已创建好的分区上建立物理卷。
pvcreate /dev/sdb1 /dev/sdb2 /dev/sdc1 /dev/sdc2
[root@localhost ~]# pvcreate /dev/sdb1 /dev/sdb2 /dev/sdc1 /dev/sdc2
Physical volume "/dev/sdb1" successfully created.
Physical volume "/dev/sdb2" successfully created.
Physical volume "/dev/sdc1" successfully created.
Physical volume "/dev/sdc2" successfully created.#pvscan 查看一下
[root@localhost ~]# pvscan
PV /dev/sda2 VG centos lvm2 [54.00 GiB / 4.00 MiB free]
PV /dev/sdc2 lvm2 [5.00 GiB]
PV /dev/sdb1 lvm2 [5.00 GiB]
PV /dev/sdc1 lvm2 [5.00 GiB]
PV /dev/sdb2 lvm2 [5.00 GiB]
Total: 5 [74.00 GiB] / in use: 1 [54.00 GiB] / in no VG: 4 [20.00 GiB]
也可以用pvdisplay查看
1.3 建立卷组
我们把sdb1和sdc1两个物理卷组成一个卷组lv1,把sdb2和sdc2组成一个卷组lv2。卷组名自己起的。
使用vgcreate命令建立卷组。卷组设备文件使用/dev目录下与卷组同名的目录表示,所有逻辑设备文件都将建立在该目录下。包含多个物理卷,也可以只有一个物理卷。
vgcreate 卷组名 两个物理卷:successfully
起了两个卷组名vg1和vg2,可以随便起。vgscan查看一下
[root@localhost ~]# vgscan
Reading volume groups from cache.
Found volume group "vg1" using metadata type lvm2
Found volume group "vg2" using metadata type lvm2
Found volume group "centos" using metadata type lvm2
1.4 建立逻辑卷
建立好卷组后,可以使用lvcreate在已有卷组上建立逻辑卷。
lvcreate -L 指定大小 -n 逻辑卷名 卷组名 (这里指定的大小肯定不能超过卷组总大小)
我们的四个分区sdb1,sdb2,sdc1,sdc2都是5G,那么vg1(sdb1,sdc1)和vg2(sdb2,sdc2)各10G。
lvcreate -L 6G -n lv1 vg1
lvcreate -L 7G -n lv2 vg2
逻辑卷名字随便起:lv1,lv2
[root@localhost ~]# lvscan
ACTIVE '/dev/vg1/lv1' [6.00 GiB] inherit
ACTIVE '/dev/vg2/lv2' [7.00 GiB] inherit
ACTIVE '/dev/centos/swap' [4.00 GiB] inherit
ACTIVE '/dev/centos/root' [50.00 GiB] inherit
二、逻辑卷管理
[root@localhost ~]# lsblk # 显示块设备
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 60G 0 disk
├─sda1 8:1 0 4G 0 part /boot
└─sda2 8:2 0 54G 0 part
├─centos-root 253:0 0 50G 0 lvm /
└─centos-swap 253:1 0 4G 0 lvm [SWAP]
sdb 8:16 0 20G 0 disk
├─sdb1 8:17 0 5G 0 part
│ └─vg1-lv1 253:2 0 6G 0 lvm
└─sdb2 8:18 0 5G 0 part
└─vg2-lv2 253:3 0 7G 0 lvm
sdc 8:32 0 20G 0 disk
├─sdc1 8:33 0 5G 0 part
│ └─vg1-lv1 253:2 0 6G 0 lvm
└─sdc2 8:34 0 5G 0 part
└─vg2-lv2 253:3 0 7G 0 lvm
sr0 11:0 1 1024M 0 rom# 可以看到sdb1和sdc1都在逻辑卷lv1中,sdb2和sdc2都在逻辑卷lv2中。
2.1 逻辑卷容量扩容
vg1中共有10G的空间,我们上面指定了大小为6G的逻辑卷。如果存放一个大小为8G的文件时,显然不够使用,这时候扩容3G到9G,来存放8G文件
# 现在lv1是6G
[root@localhost ~]# lvscan
ACTIVE '/dev/vg1/lv1' [6.00 GiB] inherit
ACTIVE '/dev/vg2/lv2' [7.00 GiB] inherit
ACTIVE '/dev/centos/swap' [4.00 GiB] inherit
ACTIVE '/dev/centos/root' [50.00 GiB] inherit# 扩容,这里一定要写+3G代表扩容,不能写3G。
[root@localhost ~]# lvextend -L +3G /dev/vg1/lv1
Size of logical volume vg1/lv1 changed from 6.00 GiB (1536 extents) to 9.00 GiB (2304 extents).
Logical volume vg1/lv1 successfully resized.# 可以查看多了3G
[root@localhost ~]# lvscan
ACTIVE '/dev/vg1/lv1' [9.00 GiB] inherit
ACTIVE '/dev/vg2/lv2' [7.00 GiB] inherit
ACTIVE '/dev/centos/swap' [4.00 GiB] inherit
ACTIVE '/dev/centos/root' [50.00 GiB] inherit
缩容命令(自行尝试):lvreduce -L -3G /dev/vg1/lv1
2.2往卷组中增加新的物理卷
当卷组中没有足够的空间分配逻辑卷时,可以往卷组中增加物理卷的方法来增加卷组空间。
sdb磁盘中再分一个分区sdb3给它5G。加到vg1中,那么vg1就有了15G了。
前期准备:
1.分区,修改类型为8e。(1.1 已讲解)
fdisk -l查看
设备 Boot Start End Blocks Id System
/dev/sdb1 2048 10487807 5242880 8e Linux LVM
/dev/sdb2 10487808 20973567 5242880 8e Linux LVM
/dev/sdb3 20973568 31459327 5242880 8e Linux LVM
2.建立物理卷
建立物理卷先删除逻辑卷:lvremove /dev/vg1/lv1;lvremove /dev/vg2/lv2
才能建立物理卷:pvcreate /dev/sdb3
可以看到物理卷已建立
[root@localhost ~]# pvscan
PV /dev/sdb1 VG vg1 lvm2 [<5.00 GiB / 0 free]
PV /dev/sdc1 VG vg1 lvm2 [<5.00 GiB / 1016.00 MiB free]
PV /dev/sdb2 VG vg2 lvm2 [<5.00 GiB / 0 free]
PV /dev/sdc2 VG vg2 lvm2 [<5.00 GiB / 2.99 GiB free]
PV /dev/sda2 VG centos lvm2 [54.00 GiB / 4.00 MiB free]
PV /dev/sdb3 lvm2 [5.00 GiB]
Total: 6 [<78.99 GiB] / in use: 5 [<73.99 GiB] / in no VG: 1 [5.00 GiB]
往卷组中加物理卷:vgextend vg1 /dev/sdb3(往vg1中加入sdb3)
查看物理卷:可以发现sdb3加入到了vg1中
[root@localhost ~]# pvscan
PV /dev/sdb1 VG vg1 lvm2 [<5.00 GiB / <5.00 GiB free]
PV /dev/sdc1 VG vg1 lvm2 [<5.00 GiB / <5.00 GiB free]
PV /dev/sdb3 VG vg1 lvm2 [<5.00 GiB / <5.00 GiB free]
PV /dev/sdb2 VG vg2 lvm2 [<5.00 GiB / <5.00 GiB free]
PV /dev/sdc2 VG vg2 lvm2 [<5.00 GiB / <5.00 GiB free]
PV /dev/sda2 VG centos lvm2 [54.00 GiB / 4.00 MiB free]
Total: 6 [78.98 GiB] / in use: 6 [78.98 GiB] / in no VG: 0 [0 ]
# 建立逻辑卷,指定大小13G,可以看到是可以指定13G的,因为此时三个分区sdb1,sdc1,sdb3共有15G。
[root@localhost ~]# lvcreate -L 13G -n lv1 vg1
Logical volume "lv1" created.
[root@localhost ~]# lvscan
ACTIVE '/dev/vg1/lv1' [13.00 GiB] inherit
ACTIVE '/dev/vg2/lv2' [7.00 GiB] inherit
ACTIVE '/dev/centos/swap' [4.00 GiB] inherit
ACTIVE '/dev/centos/root' [50.00 GiB] inherit[root@localhost ~]# lvcreate -L 7G -n lv2 vg2
Logical volume "lv2" created.
三、创建文件系统并加载使用
3.1 使用xfs文件系统格式化逻辑卷
就相当于格式化:
mkfs.xfs /dev/vg1/lv1
[root@localhost ~]# mkfs.xfs /dev/vg1/lv1
meta-data=/dev/vg1/lv1 isize=512 agcount=4, agsize=851968 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=3407872, 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
[root@localhost ~]# mkfs.xfs /dev/vg2/lv2
同理:mkfs.xfs /dev/vg2/lv2
3.2 创建了文件系统以后,挂载
挂载:我们在/mnt下建立两个文件夹test1和test2,让lv1和lv2分别挂载上
mkdir /mnt/test{1,2}
挂载
mount /dev/vg1/lv1 /mnt/test1
mount /dev/vg2/lv2 /mnt/test2
查看文件系统的硬盘空间占用情况和挂载位置:df
-T显示文件系统类型。
-h显示大小,人性化
[root@localhost ~]# df -Th
文件系统 类型 容量 已用 可用 已用% 挂载点
devtmpfs devtmpfs 2.0G 0 2.0G 0% /dev
tmpfs tmpfs 2.0G 0 2.0G 0% /dev/shm
tmpfs tmpfs 2.0G 13M 2.0G 1% /run
tmpfs tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
/dev/mapper/centos-root xfs 50G 4.6G 46G 10% /
/dev/sda1 xfs 4.0G 171M 3.9G 5% /boot
tmpfs tmpfs 394M 4.0K 394M 1% /run/user/42
tmpfs tmpfs 394M 24K 394M 1% /run/user/0
/dev/mapper/vg1-lv1 xfs 13G 33M 13G 1% /mnt/test1
/dev/mapper/vg2-lv2 xfs 7.0G 33M 7.0G 1% /mnt/test2
可以看到两个逻辑卷均挂在上了。
mount 显示所有挂载情况。我们只看后两个
[root@localhost ~]# mount | tail -2
/dev/mapper/vg1-lv1 on /mnt/test1 type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
/dev/mapper/vg2-lv2 on /mnt/test2 type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
挂载上可以正常使用里面的磁盘空间了。test1目录下,用的是sdb1,sdc1,sdb3的空间。test2目录下用的是sdb2,sdc2的空间。
四、删除逻辑卷、卷组、物理卷
删除顺序(解挂载-->删除逻辑卷-->删除卷组-->删除物理卷)
四步:
1.解挂载:umount /mnt/test1;umount /mnt/test2
2.删除逻辑卷:lvremove /dev/vg1/lv1;lvremove /dev/vg2/lv2
3.删除卷组:vgremove vg1;vgremove vg2
4.删除物理卷:pvremove /dev/sdb1 /dev/sdb2 /dev/sdb3 /dev/sdc1 /dev/sdc2
可以试试,不解挂载能不能删除逻辑卷
[root@localhost ~]# mount | tail -2
/dev/mapper/vg1-lv1 on /mnt/test1 type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
/dev/mapper/vg2-lv2 on /mnt/test2 type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
[root@localhost ~]# lvremove /dev/vg1/lv1 # 不解挂载直接删除逻辑卷
Logical volume vg1/lv1 contains a filesystem in use. # 失败 有正在使用的文件系统,显然要先解挂载
1.解挂载
[root@localhost ~]# umount /mnt/test1[root@localhost ~]# umount /mnt/test2
2.删除逻辑卷
[root@localhost ~]# lvremove /dev/vg1/lv1 # 删除逻辑卷lv1
Do you really want to remove active logical volume vg1/lv1? [y/n]: y
Logical volume "lv1" successfully removed # 删除lv1成功
[root@localhost ~]# lvremove /dev/vg2/lv2 # 删除逻辑卷lv2
Do you really want to remove active logical volume vg2/lv2? [y/n]: y
Logical volume "lv2" successfully removed # 删除lv2成功3.删除卷组
[root@localhost ~]# vgremove vg1
Volume group "vg1" successfully removed[root@localhost ~]# vgremove vg2
Volume group "vg2" successfully removed4.删除物理卷
[root@localhost ~]# pvremove /dev/sdb1 /dev/sdb2 /dev/sdb3 /dev/sdc1 /dev/sdc2
Labels on physical volume "/dev/sdb1" successfully wiped.
Labels on physical volume "/dev/sdb2" successfully wiped.
Labels on physical volume "/dev/sdb3" successfully wiped.
Labels on physical volume "/dev/sdc1" successfully wiped.
Labels on physical volume "/dev/sdc2" successfully wiped.