LVM:(logical volume manager )逻辑卷管理,功能:动态卷管理功能
老系统弊端:根目录固定化(容量是固定的,极有可能出现容量用完的情况)。
因为之前的老系统(centOS 7之前的版本)根“/”目录是一个标准的分区,那么当根目录空间用完以后,我们只能删除根目录上没有用的文件,来释放一定的空间,让我们的linux可以正常操作。
LVM的基本构成:
一个或多个PV(物理卷)---------->VG(卷组)--------------->一个或多个LV(逻辑卷)
组成 分出
物理卷:物理磁盘存储空间。
VG的总容量等于组成卷组的PV(磁盘)容量之和,VG可以使用自身的容量划分为多个LV来供操作系统使用。我们的Linux从CentOS 7之后才默认使用LVM。
PV:物理卷
PV是组成VG的一个最重要的结构模块,他提供VG存储空间供其使用,并让VG使用由PV 所提供的存储空间创建LV(逻辑卷)。所以PV是LVM的物理组成。
PV的基本信息查询
pvscan --PV的基本信息查询
结果:
PV /dev/sda2(PV是从哪个磁盘或者分区来)
VG centos(他所属的VG)
lvm2 [79.53 GiB / 4.00 MiB free] (PV被使用LVM2的方式进行定义化 总空间 79.53G,还有 4MB可以使用)
Total: 1[79.53 GiB] /in use: 1 [79.53 GiB] /in no VG: 0 [0 ](PV上所有的空间已经被使用了(VG:centos))
pvdisplay --更详细的pv信息详解
--- Physical volume ---
PV Name /dev/sda2 --PV名称
VG Name centos --PV所属的VG
PV Size 79.53.GiB /not usable 3.00 MiB --PV的大小 not usable 3.00 MiB (不可用空间3MB)
Allocatable yes --分配状态,yes代表可用-空间可分配
PE Size 4.00 MiB --PE是组成PV最基本的读写单元,相当于oracle数据块,或者文件系统块。
Total PE 20360 --一共由20360块
Free PE 1 --现在还可以1块(现在还有一个PE块没有被使用)
Allocated PE 20359 --已使用 20359块
PV UUID ik3n3r-uozJ-IySu-tVft-71I6-cheL-Aq7oGP --PV的设备唯一编号
echo "20360*4" | bc -l
结果: 81440
echo "81440/1024" | bc -l
结果:79.53125000000000000000
pvdisplay -v
Wiping internal VG cache --擦除内被VG缓存
Wiping cache of LVM -capable devices --参数支持LVM的设备的缓存
--- Physical volume ---
PV Name /dev/sda2 --PV名称
VG Name centos --PV所属的VG
PV Size 79.53.GiB /not usable 3.00 MiB --PV的大小 not usable 3.00 MiB (不可用空间3MB)
Allocatable yes --分配状态,yes代表可用-空间可分配
PE Size 4.00 MiB --PE是组成PV最基本的读写单元,相当于oracle数据块,或者文件系统块。
Total PE 20360 --一共由20360块
Free PE 1 --现在还可以1块(现在还有一个PE块没有被使用)
Allocated PE 20359 --已使用 20359块
PV UUID ik3n3r-uozJ-IySu-tVft-71I6-cheL-Aq7oGP --PV的设备唯一编号
pvdisplay /dev/sda2 --查询指定的pv,当pv过多的时候,我们可以查询指定的pv
PV的创建和删除
PV既可以使用一块单独的硬盘,也可以使用某个磁盘的分区
fdisk /dev/sdc 创建一个主分区 /dev/sdc1
--创建PV
pvcreate /dev/sdd
pvcreate /dev/sdc1
--查看PV
pvdisplay -v /dev/sdc --结果:
Wiping internal VG cache
Wiping cache of LVM -capable devices
--- Physical volume ---
PV Name /dev/sdc
VG Name
PV Size 20.00 GiB
Allocatable NO --因为该PV还没有分配给某个VG
... ...
--删除PV
pvremove /dev/sdc
pvremove /dev/sdc1
VG:卷组,他是由PV组成基本的物理存储空间,在该存储空间上可以划分出逻辑空间给LV(逻辑卷使用),所以他是LVM的核心。
1.查看VG的基本信息
vgscan
结果: Reading volume groups from cache. --从VG缓存中读取
Found volume group "centos" using metadata type lvm2
--找到一个叫centos的VG,该VG的元数据使用LVM2的协议类型。
vgdispaly --查看VG的详细命令
------------Volume group-------------
VG Name centos --VG名
System ID
Format lvm2 --协议方式
Metadata Areas 1 --元数据域
Metadata Sequeuence No 3 --元数据序列号
VG Access read/write --VG可读写
VG Status resizable --该VG可调整大小
MAX LV 0 --
Cur LV 2 --该VG有2个LV
Open LV 2 --这两个LV都在open状态(可用)
Max PV 0 --
Cur PV 1 --该VG由一个PV组成
Act PV 1 --该PV是活动状态(可用状态)
VG Size 79.53 GiB --VG的大小为79.53G
PE Size 4.00 MiB --PE的大小为4MB
Total PE 20360 --总共包含20360个PE
Alloc PE/Size 20359 / <79.53 GiB --已分配给VG 20359个PE
Free PE/Size 1 / 4.00 MiB --还有一个PE并未分配(可用)
VG UUID gNnmND-uucY-5s5H-ssJJ-qHmc-LyMN-Z&%dkB
--设备唯一编号
vgdisplay -v --查看vg的超详细信息
--Current LE LE(逻辑单元),一个LE的大小是4MB,其实LE就是将PE进行了逻辑化,某整体程度上说LE就是PE
2.VG的创建和删除
--创建VG
vgcreate datavg /dev/sdc --vgcreate VG名称 PV名称
结果: Volume group "datavg" successfully created --datavg创建成功
--删除VG : vgremove vg名称
vgremove datavg
结果:Volume greoup "datavg" successfully removed .
vgdisplay datavg --查看单独的一个VG
vgdisplay -v datavg --查看单独的一个VG(带有pv的详细信息)
vgdisplay -v --查看所有的VG
3.VG的扩容与缩容
---VG扩容: vgextend VG名称 PV名称
vgextend datavg /dev/sdd1
结果:Volume group "datavg" successfully extended --datavg 扩容成功
--VG缩容: vgreduce VG名称 PV名称
vgreduce datavg /dev/sdd1
结果:Removed "/dev/sdd1" from volume group "datavg" --PV /data/sdd1 被从datavg下移除
LV-逻辑卷:逻辑卷指的是从VG上划分逻辑空间供用户使用,使用的前提是LV需要先按照所需的文件系统格式化,然后再去进行目录的挂载,那么上面我们已经提过了,LV的逻辑单元-LE实际上就是PV的物理单元-PE。
1.查看LV信息
lvscan
结果: ACTIVE '/dev/centos/swap' [<7.63 GiB] inherit
--LV状态是激活状态的,并且使用空间小于7.63G
ACTIVE '/dev/centos/root' [<71.90 GiB] inherit
--LV状态是激活状态的,并且使用空间小于71.90G
lvdisplay
结果:
------------ logical volume ----------------
LV Path /dev/centos/swap
LV Name /swap
VG Name centos
LV UUID eq0jES-nQHg-T7MX-n3W9-n3W9-elan-BdQaAt
LV Write Access read/write
LV Creation host,time oracle,2022-03-06 21:42:07 +0800
LV Status available
#open 2
LV Size <7.63 GiB
Current LE 1953
Segments 1
Allocation inherit
Read ahead sector auto8192
- currently set to 8192
Block device 253:1
------------ logical volume ----------------
LV Path /dev/centos/root
LV Name /root
VG Name centos
LV UUID G2vqzd-33S2-T7MX-n3W9-n3W9-elan-BdQaAt
LV Write Access read/write
LV Creation host,time oracle,2022-03-06 21:42:07 +0800
LV Status available
... ...
lvdisplay -v --查看lv的详细信息
lvdisplay -v /dev/centos/swap --查看单独的一个lv
lvdisplay -v /dev/centos/root --查看单独的一个lv
2.LV的创建与删除
–LV 空间的分配规则:由于LV是由PV上的PE通过VG经过逻辑化所转化的,所以LE也要遵循PE的大小进行分配,不能将一个完整的PE分隔开。也就是说要遵循PE的整数倍进行空间的划拨与分配。本例中我们的PE大小为4MB,所以我们的LE也得是4MB。如果你不够一个PE分配的话,他也会给你一个完整的PE进行LE的逻辑转化。我们从上面可以看出,我要建立的LV大小为97M,所以他大于96MB(24个PE的大小),但是他小于100M(25个PE大小),所以直接按照25个PE的大小进行PE的分配,最终转换成25个LE也就是100M的空间。
第一种创建LV
定义:lvcreate -L lv的大小(M|G) -n LV的名字 VG名称
lvcreate -L 97M -n lv01 datavg
结果显示:Rounding up size to full physical extend 100.00 MiB
Logical volume "lv01" create.
第二种创建LV:给出他具体LE的数量
定义:lvcreate -l LE的数量 -n LV的名字 VG的名称 (这种方式是错误的)
lvcreate -L 25 -n lv01 datavg --大写的L,是按照空间分配的
Rounding up size to full physical extend 28.00 MiB
--28M是7个PE,那么这里的25他是按照25M进行计算的,24MB是6个PE)
Logical volume "lv01" create.
lvcreate -l 25 -n lv02 datavg --小写的l,是按照块来分配的
Logical volume "lv02" create --直接创建好了,压根没说什么空间的事
--使用lvscan命令查看
lvscan
ACTIVE '/dev/datavg/lv01' [28.00 MiB] inherit
ACTIVE '/dev/datavg/lv02' [100.00 MiB] inherit
--这里显示100M,25个LE(PE),说明成功了,说明是小写的l才是有效的
第三种创建LV:lvcreate -l 数字比例(剩余空间)free -n lv名字 vg名称
--根据你所提供的百分比自动分配剩余空间,那么这里代表创建lv后,剩余空间=100%-90%=10%,
也就是说剩余的空闲空间只有原来总空间的10%,而其余90%的空间被拿去建立了lv
lvcreate -l 90%free -n lv02 datavg --90%是已经利用的空间,10%是空闲空间
--LV删除:
lvremove LV名称 VG名称 --最常见的错误 vg找不到,然后胡搞
lvremove lv01 datavg
lvremove vg名称 lv名称 -- 最常见的错误,虽然找到了vg,但是也瞎搞
lvremove datavg lv01
--最棒的方式:优先找到各个lv的路径: lvremove lv的名称(lv的绝对路径) 进行删除
lvscan
ACTIVE '/dev/datavg/lv02' [96.00 MiB] inherit
ACTIVE '/dev/datavg/lv03' [92.00 MiB] inherit
ACTIVE '/dev/centos/swap' [7.63 GiB] inherit
ACTIVE '/dev/centos/root' [71.90 GiB] inherit
lvremove /dev/datavg/lv03
结果:DO you rellay want to remove active logical volume datavg/lv03?[y/n]:y
Logical volume "lv03" successfully remove
LV的使用(XFS文件系统)
绝对路径:/dev/你创建VG的名字/LV的名字
1.先创建一个lv01
lvcreate -L 10G -n lv01 datavg
Logical volume "lv01" created
2.将创建出来的lv01进行格式化
mkfs.xfs /dev/datavg/lv01
lv的名称(绝对路径)
meta-data=/dev/datavg/lv01 isize=512 agcount=4,agsize=655360 blks
= secrsz=512 attr=2,projid32bit=1
= crc=1 finobt=0,sparse=0
data = bsize=4096 blocks=2621440,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
3.挂载你的LV
在根目录下创建 mkdir /ordata
df -h
Filesystem
/dev/mapper/centos-root 72G 11G 62G 15% /
devtmpfs 3.9G 0 3.9G 0% /dev
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 3.9G 8.9M 3.9G 1% /run
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/sdb1 100G 33M 100G 1% /data
/dev/sda1 473M 152M 321M 33% /boot
tmpfs 799M 12k 799M 1% /run/user/42
tmpfs 799M 0 799M 0% /run/user/0
mount /dev/datavg/lv01 /ordata --挂载lv
df -h
Filesystem
/dev/mapper/centos-root 72G 11G 62G 15% /
devtmpfs 3.9G 0 3.9G 0% /dev
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 3.9G 8.9M 3.9G 1% /run
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/sdb1 100G 33M 100G 1% /data
/dev/sda1 473M 152M 321M 33% /boot
tmpfs 799M 12k 799M 1% /run/user/42
tmpfs 799M 0 799M 0% /run/user/0
/dev/mapper/datavg-lv01 10G 33M 10G 1% /ordata
umount /ordata --手动摘除LV
df -h
Filesystem
/dev/mapper/centos-root 72G 11G 62G 15% /
devtmpfs 3.9G 0 3.9G 0% /dev
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 3.9G 8.9M 3.9G 1% /run
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/sdb1 100G 33M 100G 1% /data
/dev/sda1 473M 152M 321M 33% /boot
tmpfs 799M 12k 799M 1% /run/user/42
tmpfs 799M 0 799M 0% /run/user/0
mount /dev/datavg/lv01 /ordata --挂载lv
df -h
Filesystem
/dev/mapper/centos-root 72G 11G 62G 15% /
devtmpfs 3.9G 0 3.9G 0% /dev
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 3.9G 8.9M 3.9G 1% /run
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/sdb1 100G 33M 100G 1% /data
/dev/sda1 473M 152M 321M 33% /boot
tmpfs 799M 12k 799M 1% /run/user/42
tmpfs 799M 0 799M 0% /run/user/0
/dev/mapper/datavg-lv01 10G 33M 10G 1% /ordata
shutdown -r now
df -h
Filesystem
/dev/mapper/centos-root 72G 11G 62G 15% /
devtmpfs 3.9G 0 3.9G 0% /dev
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 3.9G 8.9M 3.9G 1% /run
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/sdb1 100G 33M 100G 1% /data
/dev/sda1 473M 152M 321M 33% /boot
tmpfs 799M 12k 799M 1% /run/user/42
tmpfs 799M 0 799M 0% /run/user/0
--开机自动挂载LV
vi /etc/fstab
在这个文件中添加:/dev/datavg/lv01 /ordata xfs defaults 0 0
LV的名称(绝对路径) 挂载目录 文件格式 默认 默认
保存
shutdown -r now
df -h
Filesystem
/dev/mapper/centos-root 72G 11G 62G 15% /
devtmpfs 3.9G 0 3.9G 0% /dev
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 3.9G 8.9M 3.9G 1% /run
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/sdb1 100G 33M 100G 1% /data
/dev/sda1 473M 152M 321M 33% /boot
tmpfs 799M 12k 799M 1% /run/user/42
tmpfs 799M 0 799M 0% /run/user/0
/dev/mapper/datavg-lv01 10G 33M 10G 1% /ordata
/dev/mapper/datavg-lv01 这个软连接其实就是这个目录/dev/datavg/lv01,然后映射到/dev/dm-2,我们不要去管他。
Linux两大常见的文件系统:
EXT4(CENTOS 6/RHEL 6):EXT4是第四代扩展文件系统(FOURTH EXTENDED FILESYSTEM)是LINUVX下的日志文件系统。是EXT3(CENTOS5 /RHEL5)的升级版本。EXT4比EXT3更加先进,它是一个日志文件系统,意味着他会对文件在磁盘的位置以及任何其他对磁盘记录的更改做到更完善的记录。
ext4系统容量到1EB(1024PB),而单文件容量支持到(16TB)。对一般的工作站,服务器以及个人台式电脑来说是非常重要的,而且他很好的支持了RAID(磁盘阵列)。
ext3只支持32000个子目录,extt4已经测底的取消了限制,理论是实现了无限个子目录。
XFS(CENTOS 7/RHEL 7 以及以后的版本):XFS是一种非常优秀的日志文件系统,他是SGI公司设计的,XFS被业界称为更新进的最具可升级性的文件系统。
XFS很多方面做的比ext4更好,ext4受限于磁盘结构和兼容性问题。某些可扩展性确实不如XFS。另外XFS各种文件锁或者文件内事务锁的细化做的也很到位。
每个XFS文件系统最大支持8EB,单个文件最大16TB。
那么当然了XFS也有缺陷(现阶段),比如说他不能压缩,当大量删除文件的时候性能会很差,目前RHEL 7/CENTOS 7默认的文件系统就是XFS。
LV的使用(EXT4文件系统)
1.创建一个vg
vgcreate data2vg /dev/sdd1
Volume group "data2vg" successfully created
2.创建一个lv
lvcreate -L 10G -n lvext401 data2vg
vgdisplay -v data2vg
结果发现创建成功了。
3.格式化lv
mkfs.ext4 /dev/data2vg/lvext401
mkdir /ordata2
4.挂载lv
mount /dev/data2vg/lvext401 /ordata2
df -h
结果发现挂载成功
5.开机自动挂载lv
vi /etc/rc.d/rc.local
在这个文件中添加: mount /dev/data2vg/lvext401 /ordata2 保存
shutdown -r now
df -h
结果发现:
... ... ...
/dev/mapper/data2vg-lvext401 9.8G 37M 9.2G 1% /ordata2
6.开机自动挂载lv(第5步的另一种方式)
vi /etc/fstab
在这个文件中添加:
/dev/mapper/data2vg-lvext401 /ordata2 ext4 defaults 0 0
保存
shutdown -r now
df -h
结果发现:
... ... ...
/dev/mapper/data2vg-lvext401 9.8G 37M 9.2G 1% /ordata2
LV的扩容(XFS文件系统)
1.增加LV的容量(动态增加)
第一种lv扩容的方式: lvextend -L 容量(M|G) lv的名称
cd /orafdata
vi 3.txt --在文件中添加内容(很多内容)
第一种lv扩容的方式: lvextend -L 容量(M|G) lv的名称
lvextend -L +2G /dev/datavg/lv01
结果:Size of logical volume datavg/lv01 changed from 10.00 GiB(2560 extents) to 12.00 GiB(3072 extents).
--lv的容量从10G变成了12G
Logical volume datavg/lv01 successfuly resized.
df -h
... ... ...
/dev/mapper/datavg-lv01 10G 33M 10G 1% /oradata
结果发现lv的容量没有改变
--只执行上一步的话,LV的容量是不会马上改变的,我们还需要让我们的xfs文件系统重新适应一下新的容量,也就是说进行xfs文件系统的数据更新。
--进行xfs文件系统的元数据更新
xfs_growfs /dev/datavg/lv01
df -h
... .... ...
/dev/mapper/datavg-lv01 12G 33M 12G 1% /oradata
第二种扩容方式:lvextend -l +指定的LE(PE)个数 lv的名称
lvextend -l +512 /dev/datavg/lv01 --2G=2048M/4=512
xfs_growfs /dev/datavg/lv01 --进行xfs文件系统的元数据更新
df -h
... .... ...
/dev/mapper/datavg-lv01 12G 33M 12G 1% /oradata
cd /oradata
vi 3.txt --发现文件不受影响
第三种扩容方式:
vgdisplay -v datavg
结果:
... ... ...
Total PE/Free PE 5119 / 1535
--扩容
lvextend -l 5119 /dev/datavg/lv01
--重新定义你的lv的大小,切记重新定义的值不可以小于当前值。
xfs_growfs /dev/datavg/lv01
LV的扩容(EXT4文件系统)
--扩容
lvextend -L +2G /dev/data2vg/lvext401
--给ext4扩容,元数据更新
resize2fs /dev/data2vg/lvext401
df -h
... ... ...
/dev/mapper/data2vg-lvext401 12G 41M 12G 1% /oradata2
LV的缩容(XFS文件系统)
lvreduce -容量(M|G) lv的名称
如果你的LV被格式化成XFS文件系统的话,千万不要执行缩容操作,最好只做扩容操作。LV缩容操作极度危险!!!!!!!
lvreduce -L -4G /dev/datavg/lv01
LV的缩容(EXT4 文件系统)
cd /oradata2/
vi 1.txt --在文件中添加很多内容
EXT4文件系统的缩容:
1.从目录下将 LV卸载
umount /oradata2
2.检查磁盘的完整性
e2fsck -f /dev/data2vg/lvext401 --检查磁盘的完整性
3.
resize2fs /dev/data2vg/lvext401 8G
4.操作一下lv
lvreduce -L -4G /dev/data2vg/lvext401
5.验证
vgdisplay -v data2vg
df -h
结果显示缩容成功,但是具体缩减的值要根据你的实际情况而定。
缩容很危险,所以我们一般都不要去操作缩容!!!!!!!!