1.LVM原理
LVM 逻辑卷管理通过将底层物理硬盘抽象封装起来,以逻辑卷的形式表现给上层系统,
逻辑卷的大小可以动态调整,而且不会丢失现有的数据,新增的硬盘也不会改变现有上层的逻辑卷
(1)物理磁盘被格式化为PV,空间被分为多个PE
(2)不同的PV加入同个VG,不同的PV的PE全部加入VG的PE池内(卷组)
(3)LV现在就直接可以格式化后被挂载使用
(4)LV的扩展缩减实际上就是增加或减少组成该LV的PE数量,其过程不丢失原来数据
PE为卷组池最小单位,默认4MiB
2.LVM的创建与扩展删除
创建LVM (逻辑卷是PE的整数倍)
(1)将物理磁盘设备初始化为物理卷
现在我为LINUX系统新增了两块物理硬盘,sdb(20G) sdc(10G)
************创建
先创建一块磁盘的物理卷 sdb(20G)
[root@localhost ~]# pvcreate /dev/sdb
[root@localhost ~]# pvcreate /dev/sdb /dev/sdc #创建出多块直接后面跟上就可以了
: -ff 初始硬盘
************查看结果
pvs #简单查看
pvdisplay #详细查看
[root@localhost ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <39.00g 4.00m
/dev/sdb lvm2 --- 20.00g 20.00g
有两个物理卷 系统自带和sdb(20G)
(2)创建卷组,并将PV加入卷组池 中
*************创建卷组
[root@localhost ~]# vgcreate linuxbc /dev/sdb #创建一个卷组池,可以是一块物理卷,也可以是多块物理卷组成
[root@localhost ~]# vgcreate linuxbc /dev/sdb /dev/sdc #多块数据卷组成一个卷组池(必须是初始化为数据卷且没被其他卷组池使用的硬盘)
*************查看结果
vgs #简单查看
vgdisplay #详细查看
--- Volume group ---
VG Name linuxbc #创建时设置的卷组名称
System ID
Format lvm2 #版本
Metadata Areas 1
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size <20.00 GiB #卷组池大小
PE Size 4.00 MiB #PE大小
Total PE 5119 #PE个数
Alloc PE / Size 0 / 0 #使用情况
(3)基于卷组创建逻辑卷
*********创建逻辑卷
[root@localhost ~]# lvcreate -n mylv1 -L 5G linuxbc #在linuxbc卷组池(总大小为20G,不能超过或者等于)下创建一个大小为5G的mylv1的逻辑卷 一个卷组池可以创建多个逻辑卷
*************查看结果
lvs #简单查看
lvdisplay #详细查看
--- Logical volume ---
LV Path /dev/centos/root
LV Name root
VG Name centos
LV UUID bHa8AU-wBz5-VOuM-soqI-ZdCe-0qF9-y6Z6GG
LV Write Access read/write
LV Creation host, time localhost, 2022-03-28 13:52:18 +0800
LV Status available
# open 1
LV Size <35.12 GiB
Current LE 8990
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:0
--- Logical volume ---
LV Path /dev/linuxbc/mylv1
LV Name mylv1
VG Name linuxbc
LV UUID Gyin0l-4Sxg-2EHP-rOFq-rXlF-T6JN-Md8rl3
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2022-04-02 16:22:41 +0800
LV Status available
# open 0
LV Size 5.00 GiB
Current LE 1280
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:2
(4)为创建好的逻辑卷创建文件系统
*********格式化创建好的逻辑卷为文件系统
[root@localhost ~]# mkfs.ext4 /dev/linuxbc/mylv1
(5)将格式化好的逻辑卷挂载使用
*********挂载使用文件系统
[root@localhost ~]# mount /dev/linuxbc/mylv1 /data/
*********查看
[root@localhost ~]# df -h /data/
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/linuxbc-mylv1 4.8G 20M 4.6G 1% /data
**********查看
细心点会发现一个问题 文件系统的目录和我们创建出来的逻辑卷不一致 /dev/mapper/linuxbc-mylv1
这是因为系统为了方便为文件做了目录映射
查看目录就知道了
[root@localhost linuxbc]# ls -l
总用量 0
lrwxrwxrwx. 1 root root 7 4月 2 16:30 mylv1 -> ../dm-2 #实际位置
[root@localhost linuxbc]# cd /dev/mapper/
[root@localhost mapper]# ls
centos-root centos-swap control linuxbc-mylv1
不应管他~
(6)删除
***在删除操作中是有顺序要求的,不能直接删除存在逻辑卷的卷组池,也不能直接删除存在卷组池的,物理卷***
(1)先将逻辑卷卸载
[root@localhost ~]# umount -v /data
umount: /data (/dev/mapper/linuxbc-mylv1) 已卸载
(2)删除逻辑卷
[root@localhost ~]# lvremove /dev/linuxbc/mylv1
Do you really want to remove active logical volume linuxbc/mylv1? [y/n]: y
Logical volume "mylv1" successfully removed
(3)根据需求需要才删,删除卷组池
[root@localhost ~]# vgremove linuxbc
Volume group "linuxbc" successfully removed
(4)根据需求删除,删除物理卷
[root@localhost ~]# pvremove /dev/sdb
Labels on physical volume "/dev/sdb" successfully wiped.
1~4 越到后面删除的范围越广泛,生产环境注意合理使用删除命令
3.LVM的拉升与缩小
1.拉伸一个逻辑卷 (当卷组池有额外空闲的空间)
创建好的逻辑卷相当于传统磁盘里面划分好的分区,可以格式化后进行挂载使用,
以后当我的逻辑卷空间不足时便可以在卷组池中为他划分更多的PE,
当卷组池不够时可以使用更多的硬盘组合该卷组池,
实现了服务运行状态下进行分区扩展
优点:逻辑卷的拉伸可以在线执行,不需要卸载逻辑卷
1.保证VG(卷组池)有足够的空闲空间
[root@localhost data]# vgdisplay
[root@localhost data]# lvs ####查看逻辑卷 mylv1 linuxbc
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root centos -wi-ao---- <35.12g
swap centos -wi-ao---- <3.88g
mylv1 linuxbc -wi-ao---- 5.00g
[root@localhost data]# lsblk ####查看挂在情况(/data)
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 40G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 39G 0 part
├─centos-root 253:0 0 35.1G 0 lvm /
└─centos-swap 253:1 0 3.9G 0 lvm [SWAP]
sdb 8:16 0 20G 0 disk
└─linuxbc-mylv1 253:2 0 5G 0 lvm /data
sdc 8:32 0 10G 0 disk
sr0 11:0 1 1024M 0 rom
[root@localhost data]# df -h /data/ ####查看挂载情况
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/linuxbc-mylv1 4.8G 20M 4.6G 1% /data
[root@localhost data]# ls -l ####目录下有数据
总用量 20
-rw-r--r--. 1 root root 23 4月 2 16:55 aa.txt
drwx------. 2 root root 16384 4月 2 16:30 lost+found
[root@localhost data]#
**********现在直接在线拉伸,看看数据是否会丢失
[root@localhost data]# lvs ####查看发现原来mylv1逻辑卷只有5G
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root centos -wi-ao---- <35.12g
swap centos -wi-ao---- <3.88g
mylv1 linuxbc -wi-ao---- <5.01g
[root@localhost data]# lvextend -L +5G /dev/linuxbc/mylv1 #####扩展+5G
Size of logical volume linuxbc/mylv1 changed from <5.01 GiB (1282 extents) to <10.01 GiB (2562 extents).
Logical volume linuxbc/mylv1 successfully resized.
[root@localhost data]# lvs #####再次查看mylv1 为10G
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root centos -wi-ao---- <35.12g
swap centos -wi-ao---- <3.88g
mylv1 linuxbc -wi-ao---- <10.01g
[root@localhost data]# ls
aa.txt lost+found
[root@localhost data]# cat aa.txt #####查看文件还是存在,证明在线扩展数据没有丢失
wedfijqbfdecuqbrvcqvbc
[root@localhost data]#
[root@localhost data]# df -h /data/ ######发现逻辑卷扩展了但是文件系统还未更新
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/linuxbc-mylv1 4.8G 20M 4.6G 1% /data
[root@localhost data]# resize2fs /dev/linuxbc/mylv1 ##########更新文件系统大小
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/linuxbc/mylv1 is mounted on /data; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 2
The filesystem on /dev/linuxbc/mylv1 is now 2623488 blocks long.
[root@localhost data]# df -h /data/ ########## 容量10G,现在正常了,到现在额外扩展的空间才可以使用
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/linuxbc-mylv1 9.8G 23M 9.3G 1% /data
[root@localhost data]#
报错:找不到有效的文件系统超级块.
[root@vip data]# resize2fs /dev/centos/root
resize2fs 1.42.9 (28-Dec-2013)
resize2fs: Bad magic number in super-block 当尝试打开 /dev/centos/root 时
找不到有效的文件系统超级块.
[root@vip data]# resize2fs /dev/centos/root
resize2fs 1.42.9 (28-Dec-2013)
resize2fs: Bad magic number in super-block 当尝试打开 /dev/centos/root 时
找不到有效的文件系统超级块.
解决:
查看:
[root@vip data]# cat /etc/fstab | grep centos
/dev/mapper/centos-root / xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
挂载:
[root@vip data]# mount /dev/centos/root /
mount: /dev/mapper/centos-root 已经挂载或 / 忙
/dev/mapper/centos-root 已经挂载到 / 上
/dev/mapper/centos-root 已经挂载到 /var/lib/docker/containers 上
/dev/mapper/centos-root 已经挂载到 /var/lib/docker/overlay2 上
[root@vip data]# df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 1.4G 0 1.4G 0% /dev
tmpfs 1.4G 0 1.4G 0% /dev/shm
tmpfs 1.4G 11M 1.4G 1% /run
tmpfs 1.4G 0 1.4G 0% /sys/fs/cgroup
/dev/mapper/centos-root 17G 15G 2.5G 86% / #容量17G使用86%
/dev/sda1 1014M 239M 776M 24% /boot
tmpfs 283M 12K 283M 1% /run/user/42
tmpfs 283M 0 283M 0% /run/user/0
#执行xfs_growfs命令进行扩磁盘空间
[root@vip data]# xfs_growfs /dev/centos/root
meta-data=/dev/mapper/centos-root isize=512 agcount=4, agsize=1113856 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=4455424, 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 4455424 to 6814720
[root@vip data]# df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 1.4G 0 1.4G 0% /dev
tmpfs 1.4G 0 1.4G 0% /dev/shm
tmpfs 1.4G 11M 1.4G 1% /run
tmpfs 1.4G 0 1.4G 0% /sys/fs/cgroup
/dev/mapper/centos-root 26G 15G 12G 56% / #完成扩容
/dev/sda1 1014M 239M 776M 24% /boot
tmpfs 283M 12K 283M 1% /run/user/42
tmpfs 283M 0 283M 0% /run/user/0
2.拉伸一个卷组 (当卷组池没有额外空闲的空间时,为卷组池新增硬盘)
1.新增硬盘,加入卷组池
我们之前创建的sdc(10G) 空闲硬盘可以使用了
[root@localhost data]# fdisk -l ####查看
磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区 #新增的/dev/sdb:20 GB
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘 /dev/sda:42.9 GB, 42949672960 字节,83886080 个扇区 #系统硬盘
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x0009accb
设备 Boot Start End Blocks Id System
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 83886079 40893440 8e Linux LVM
磁盘 /dev/sdc:10.7 GB, 10737418240 字节,20971520 个扇区 #新增的/dev/sdc:10 GB
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
2.加入卷组池
[root@localhost data]# pvcreate /dev/sdc #### 将新的硬盘初始化成物理卷
Physical volume "/dev/sdc" successfully created.
[root@localhost data]# pvs #### 查看物理卷,有一块sdc(10G)为分配
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <39.00g 4.00m
/dev/sdb linuxbc lvm2 a-- <20.00g <9.99g #### 现在"linuxbc"卷组池总大小为20G
/dev/sdc lvm2 --- 10.00g 10.00g
[root@localhost data]# vgextend linuxbc /dev/sdc #### 将sdc(10G)加入"linuxbc" 卷组池
Volume group "linuxbc" successfully extended
[root@localhost data]# vgs #### 查看卷组池
VG #PV #LV #SN Attr VSize VFree
centos 1 2 0 wz--n- <39.00g 4.00m
linuxbc 2 1 0 wz--n- 29.99g 19.98g #### "linuxbc"卷组池总大小由原来的20G变为了30G,#PV数量为2
3.缩小一个逻辑卷 (必须是离线状态,并按照顺序操作)
缩小一个逻辑卷(危险操作,需谨慎处理,按照步骤,先备份,测试)
1.卸载已经挂载的逻辑卷
[root@localhost /]# df -h /data/
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/linuxbc-mylv1 9.8G 23M 9.3G 1% /data
[root@localhost /]# umount -v /data ####文件系统
umount: /data (/dev/mapper/linuxbc-mylv1) 已卸载
[root@localhost /]# lvs ####当前mylv1逻辑卷大小为10G
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root centos -wi-ao---- <35.12g
swap centos -wi-ao---- <3.88g
mylv1 linuxbc -wi-a----- <10.01g
2.缩小文件系统
[root@localhost /]# e2fsck -f /dev/linuxbc/mylv1 ####磁盘检查
e2fsck 1.42.9 (28-Dec-2013)
第一步: 检查inode,块,和大小
第二步: 检查目录结构
第3步: 检查目录连接性
Pass 4: Checking reference counts
第5步: 检查簇概要信息
/dev/linuxbc/mylv1: 12/663552 files (0.0% non-contiguous), 80178/2623488 blocks
[root@localhost /]# resize2fs /dev/linuxbc/mylv1 5G ####将mylv1文件系统大小设置为 5G ("注意:此处的5G不是减少5G,而是为他定义新的空间大小为5G")
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/linuxbc/mylv1 to 1310720 (4k) blocks.
The filesystem on /dev/linuxbc/mylv1 is now 1310720 blocks long.
3.缩小LV,并查看结果
####缩小LV (之前将mylv1文件系统大小设置为 5G,那么会多出5G空间,这5G是我们可以减少的,为了避免剩下的空间不足5G,导致逻辑卷损坏,文件丢失我们只抽走4G,留下容错空间)
注意注意注意
[root@localhost /]# lvreduce -L -4G /dev/linuxbc/mylv1 ####预留容错空间
WARNING: Reducing active logical volume to <6.01 GiB.
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce linuxbc/mylv1? [y/n]: y #y
Size of logical volume linuxbc/mylv1 changed from <10.01 GiB (2562 extents) to <6.01 GiB (1538 extents).
Logical volume linuxbc/mylv1 successfully resized.
[root@localhost /]# lvdisplay ####查看逻辑卷大小
--- Logical volume ---
LV Path /dev/linuxbc/mylv1
LV Name mylv1
VG Name linuxbc
LV UUID Gyin0l-4Sxg-2EHP-rOFq-rXlF-T6JN-Md8rl3
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2022-04-02 16:22:41 +0800
LV Status available
open 0
LV Size <6.01 GiB ####变为了6G
Current LE 1538
Segments 1
Allocation inherit
Read ahead sectors auto
currently set to 8192
Block device 253:2
4.挂载
[root@localhost /]# mount /dev/linuxbc/mylv1 /data/ ####重新挂载逻辑卷
[root@localhost /]# ls /data/
aa.txt lost+found
[root@localhost /]# cat /data/aa.txt ####查看数据还在
wedfijqbfdecuqbrvcqvbc
[root@localhost /]# df -h /data/ ####空间为5G是正常的,我们有1G容错空间没启用,生产环境可以不用留那么大
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/linuxbc-mylv1 4.8G 20M 4.6G 1% /data
4.缩小卷组 (抽出多余空间的硬盘)
注意:在缩小前查看,VG(卷组池)的空闲空间,空闲空间必须大于抽出的磁盘空间,才能将硬盘成功抽离
[root@localhost /]# vgs #### 查看空间 剩余空间VFree:23.98G 大于我们要抽离的sdc(10G) 可以抽离
VG #PV #LV #SN Attr VSize VFree
centos 1 2 0 wz--n- <39.00g 4.00m
linuxbc 2 1 0 wz--n- 29.99g 23.98g #### 卷组池由两个PV组成
[root@localhost /]# vgreduce linuxbc /dev/sdc #### 抽离sdc硬盘 ***一定要仔细别搞错***
Removed "/dev/sdc" from volume group "linuxbc"
[root@localhost /]# vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 2 0 wz--n- <39.00g 4.00m
linuxbc 1 1 0 wz--n- <20.00g <13.99g #### 查看卷组池 空闲空间VFree少了10G PV变为了一个
[root@localhost /]# pvs #### 查看物理卷已经变为空闲,可以删除物理卷
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <39.00g 4.00m
/dev/sdb linuxbc lvm2 a-- <20.00g <13.99g
/dev/sdc lvm2 --- 10.00g 10.00g
[root@localhost /]# pvremove /dev/sdc #### 删除物理卷
Labels on physical volume "/dev/sdc" successfully wiped.
[root@localhost /]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <39.00g 4.00m
/dev/sdb linuxbc lvm2 a-- <20.00g <13.99g
[root@localhost /]# ls /data/ #### 数据存在
aa.txt lost+found
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
- 最新
- 最热
只看作者