运维利器之lvm实战相关的操作记录以及详细说明
还记得我退役后第一次到北京大首都进行面试,当时8个人进行的一次大会审,搞得我紧张的啥都忘了,只记得HR(应该是银行的一个大领导)的第一句话就是:你之前用过lvm吗?来,开始你的表演,当时我的脑子是一片的懵,好在当时面试还是通过了,但是薪资方面不是很理想,我依然选择了比这个肯多出1000大洋的东家了。
来人,给秀赐图
微臣有事启奏
它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。通过LVM系统管理员可以轻松管理磁盘分区,如:将若干个磁盘分区连接为一个整块的卷组(volume group),形成一个存储池。管理员可以在卷组上随意创建逻辑卷组(logical volumes),并进一步在逻辑卷组上创建文件系统。管理员通过LVM可以方便的调整存储卷组的大小,并且可以对磁盘存储按照组的方式进行命名、管理和分配。当系统添加了新的磁盘,通过LVM管理员就不必将磁盘的文件移动到新的磁盘上以充分利用新的存储空间,而是直接扩展文件系统跨越磁盘即可。
LVM(Logical Volume Manager),即逻辑卷管理,它是Linux环境下对磁盘分区进行管理的一种机制。
一般来说,物理磁盘或分区之间是分隔的,数据无法跨盘或分区,而各磁盘或分区的大小固定,重新调整比较麻烦。LVM可以将这些底层的物理磁盘或分区整合起来,抽象成容量资源池,以划分成逻辑卷的方式供上层使用,其最主要的功能即是可以在无需关机无需重新格式化(准确地说,原来的部分无需格式化,只格式化新增的部分)的情况下弹性调整逻辑卷的大小。
名词解释
- PE(physical extent):物理区域是物理卷中可用于分配的最小存储单元,物理区域大小在建立卷组时指定,一旦确定不能更改,同一卷组所有物理卷的物理区域大小需一致,新的pv加入到vg后,pe的大小自动更改为vg中定义的pe大小。
- PV(physical volume):物理卷在逻辑卷管理系统最底层,可为整个物理硬盘或实际物理硬盘上的分区。它只是在物理分区中划出了一个特殊的区域,用于记载与LVM相关的管理参数。
- VG(volume group):卷组建立在物理卷上,一卷组中至少要包括一物理卷,卷组建立后可动态的添加卷到卷组中,一个逻辑卷管理系统工程中可有多个卷组。
- LV(logical volume):逻辑卷建立在卷组基础上,卷组中未分配空间可用于建立新的逻辑卷,逻辑卷建立后可以动态扩展和缩小空间。
- LE(logical extent):逻辑区域是逻辑卷中可用于分配的最小存储单元,逻辑区域的大小取决于逻辑卷所在卷组中的物理区域的大小。由于受内核限制的原因,一个逻辑卷(Logic Volume)最多只能包含65536个PE(Physical Extent),所以一个PE的大小就决定了逻辑卷的最大容量,4 MB(默认) 的PE决定了单个逻辑卷最大容量为 256 GB,若希望使用大于256G的逻辑卷,则创建卷组时需要指定更大的PE。在Red Hat Enterprise Linux AS 4中PE大小范围为8 KB 到 16GB,并且必须总是 2 的倍数。
申请出战,直接开干
环境准备
两块20G的硬盘
检查有无lvm2安装
[root@localhost ~]# rpm -qa | grep lvm
lvm2-2.02.177-4.el7.x86_64
lvm2-libs-2.02.177-4.el7.x86_64
###如果灭有yum安装即可,命令:yum -y install lvm2
物理磁盘或者分区的初始化为pv
将各个物理磁盘或者是分区进行初始化为pv(physical volume,物理卷),这一阶段可使用的命令为pvcreate、pvremove、pvscan、pvdisplay(pvs)
命令 | 作用 | 用法 | 选项 |
---|---|---|---|
pvcreate | 创建物理卷 | pvcreate [option] DEVICE | -f:强制创建逻辑卷,不需用户确认 ;-u:指定设备的UUID; -y:所有问题都回答yes |
pvscan | 扫描当前系统上的所有物理卷 | pvscan [option] | -e:仅显示属于输出卷组的物理卷 ; -n:仅显示不属于任何卷组的物理卷;-u:显示UUID |
pvdisplay | 显示物理卷的属性 | pvdisplay [PV_DEVICE] | |
pvremove | 将物理卷信息删除,使其不再被视为一个物理卷 | pvremove [option] PV_DEVICE | -f:强制创建逻辑卷,不需用户确认 ;-u:指定设备的UUID; -y:所有问题都回答yes |
##将两个磁盘初始化为物理卷
[root@localhost ~]# pvcreate /dev/sd{b,c}
Physical volume "/dev/sdb" successfully created.
Physical volume "/dev/sdc" successfully created.
###扫描当前机器上面所有的物理卷
[root@localhost ~]# pvscan
PV /dev/sda2 VG centos lvm2 [<19.00 GiB / 0 free]
PV /dev/sdb lvm2 [20.00 GiB]
PV /dev/sdc lvm2 [20.00 GiB]
Total: 3 [<59.00 GiB] / in use: 1 [<19.00 GiB] / in no VG: 2 [40.00 GiB]
##简单的显示物理卷的属性
[root@localhost ~]# pvs ##显示全部的物理卷
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <19.00g 0
/dev/sdb lvm2 --- 20.00g 20.00g
/dev/sdc lvm2 --- 20.00g 20.00g
[root@localhost ~]# pvs /dev/sdb ##指定物理卷进行显示
PV VG Fmt Attr PSize PFree
/dev/sdb lvm2 --- 20.00g 20.00g
##详细显示物理卷的属性
[root@localhost ~]# pvdisplay ###显示全部物理卷
--- Physical volume ---
PV Name /dev/sda2
VG Name centos
PV Size <19.00 GiB / not usable 3.00 MiB
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 4863
Free PE 0
Allocated PE 4863
PV UUID BeXpiH-G0Nz-6LJO-O3uk-31De-rxkc-pg2brc
"/dev/sdb" is a new physical volume of "20.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdb
VG Name
PV Size 20.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID DhFFCI-H2ob-YBKm-H9PR-1ybM-e318-zbP9ID
"/dev/sdc" is a new physical volume of "20.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdc
VG Name
PV Size 20.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID wgU1g3-0g5i-vInU-5eHk-5k8I-k1LT-SqXVjD
[root@localhost ~]# pvdisplay /dev/sdb ###指定物理卷
"/dev/sdb" is a new physical volume of "20.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdb
VG Name
PV Size 20.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID DhFFCI-H2ob-YBKm-H9PR-1ybM-e318-zbP9ID
###删除物理卷信息
[root@localhost ~]# pvremove /dev/sdc
Labels on physical volume "/dev/sdc" successfully wiped.
[root@localhost ~]# pvscan ###已经查看不到/dev/sdc了
PV /dev/sda2 VG centos lvm2 [<19.00 GiB / 0 free]
PV /dev/sdb lvm2 [20.00 GiB]
Total: 2 [<39.00 GiB] / in use: 1 [<19.00 GiB] / in no VG: 1 [20.00 GiB]
[root@localhost ~]# pvcreate /dev/sdc ##再次创建初始化物理卷
Physical volume "/dev/sdc" successfully created.
创建VG
创建VG(volume group,卷组)。卷组将多个物理卷整合起来(屏蔽了底层细节),并划分PE(physical extend)。PE是物理卷中的最小存储单元,有点类似于文件系统中的block,PE大小可指定,默认为4M。这一阶段用到的命令有vgcreate、vgscan、vgdisplay、vgextend、vgreduce
命令 | 作用 | 用法 | 选项 |
---|---|---|---|
vgcreate | 创建卷组 | vgcreate [option] VG_NAME PV_DEVICE | -s:卷组中的物理卷的PE大小,默认为4M ;-l:卷组上允许创建的最大逻辑卷数;-p:卷级中允许添加的最大物理卷数 |
vgscan | 查找系统中存在的LVM卷组,并显示找到的卷组列表 | ||
vgdisplay | 显示卷组属性 | vgdisplay [option] [VG_NAME]] | -A:仅显示活动卷组的信息;-s:使用短格式输出信息 |
vgextend | 动态扩展LVM卷组,它通过向卷组中添加物理卷来增加卷组的容量 | vgextend VG_NAME PV_DEVICE | |
vgreduce | 通过删除LVM卷组中的物理卷来减少卷组容量,不能删除LVM卷组中剩余的最后一个物理卷 | vgreduce VG_NAME PV_DEVICE | |
vgremove | 删除卷组,其上的逻辑卷必须处于离线状态 | vgremove [-f] VG_NAME | |
vgchange | 常用来设置卷组的活动状态 | vgchange -a n/y VG_NAME | -a n为休眠状态,休眠之前要先确保其上的逻辑卷都离线; -a y为活动状态 |
##更改pe的大小为8M,使用sdb,sdc创建卷组
[root@localhost ~]# vgcreate -s 8M myvg /dev/sd{b,c}
Volume group "myvg" successfully created
##扫描当前机器上面的卷组
[root@localhost ~]# vgscan
Reading volume groups from cache.
Found volume group "myvg" using metadata type lvm2
Found volume group "centos" using metadata type lvm2
##查看卷组的详细信息
[root@localhost ~]# vgdisplay myvg
--- Volume group ---
VG Name myvg
System ID
Format lvm2
Metadata Areas 2
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 2
Act PV 2
VG Size 39.98 GiB
PE Size 8.00 MiB ###这里可以看到PE的大小已经被修改为8M了
Total PE 5118
Alloc PE / Size 0 / 0
Free PE / Size 5118 / 39.98 GiB
VG UUID SZRuYi-vq2Q-HgWk-vuGe-Wy4t-OKRR-BC0UpE
创建lv
在卷组上创建LV(logical volume,逻辑卷)。为了便于管理,逻辑卷对应的设备文件保存在卷组目录下,为/dev/VG_NAME/LV_NAME。LV中可以分配的最小存储单元称为LE(logical extend),在同一个卷组中,LE的大小和PE是一样的,且一一对应。这一阶段用到的命令有lvcreate、lvscan、lvdisplay、lvextend、lvreduce、lvresize
命令 | 作用 | 用法 | 选项 |
---|---|---|---|
lvcreate | 创建逻辑卷或快照 | lvcreate [选项] [参数] | -L:指定大小 -l:指定大小(LE数) -n:指定名称; -s:创建快照; -p r:设置为只读(该选项一般用于创建快照中) |
lvscan | 扫描当前系统中的所有逻辑卷,及其对应的设备文件 | ||
lvdisplay | 显示逻辑卷属性 | lvdisplay [/dev/VG_NAME/LV_NAME] | |
lvextend | 可在线扩展逻辑卷空间 | lvextend -L/-l 扩展的大小 /dev/VG_NAME/LV_NAME | -L:指定扩展(后)的大小。例如,-L +800M表示扩大800M,而-L 800M表示扩大至800M;-l:指定扩展(后)的大小(LE数) |
lvreduce | 缩减逻辑卷空间,一般离线使用 | lvexreduce -L/-l 缩减的大小 /dev/VG_NAME/LV_NAME | -L:指定缩减(后)的大小;-l:指定缩减(后)的大小(LE数) |
lvremove | 删除逻辑卷,需要处于离线(卸载)状态lvremove [-f] /dev/VG_NAME/LV_NAME | -f:强制删除 |
##创建大小为500M,名为mylv的逻辑卷
[root@localhost ~]# lvcreate -L 500M -n mylv myvg
Rounding up size to full physical extent 504.00 MiB
Logical volume "mylv" created.
##扫描当前机器上面的逻辑卷
[root@localhost ~]# lvscan
ACTIVE '/dev/myvg/mylv' [504.00 MiB] inherit
ACTIVE '/dev/centos/swap' [2.00 GiB] inherit
ACTIVE '/dev/centos/root' [<17.00 GiB] inherit
##显示逻辑卷的详细信息
[root@localhost ~]# lvdisplay /dev/myvg/mylv
--- Logical volume ---
LV Path /dev/myvg/mylv
LV Name mylv
VG Name myvg
LV UUID 0otzpE-t46m-Gck2-Ynco-bc9J-EFcf-xAgSte
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2021-11-20 00:24:25 +0800
LV Status available
# open 0
LV Size 504.00 MiB
Current LE 63
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:2
格式化逻辑卷并挂载
##格式化为ext4格式
[root@localhost ~]# mke2fs -t ext4 /dev/myvg/mylv
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=1024 (log=0)
分块大小=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
129024 inodes, 516096 blocks
25804 blocks (5.00%) reserved for the super user
第一个数据块=1
Maximum filesystem blocks=34078720
63 block groups
8192 blocks per group, 8192 fragments per group
2048 inodes per group
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409
Allocating group tables: 完成
正在写入inode表: 完成
Creating journal (8192 blocks): 完成
Writing superblocks and filesystem accounting information: 完成
##常见挂在目录
[root@localhost ~]# mkdir /data
##进行挂载操作
[root@localhost ~]# mount /dev/myvg/mylv /data
##查看挂载情况
[root@localhost ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 17G 1012M 16G 6% /
devtmpfs 476M 0 476M 0% /dev
tmpfs 488M 0 488M 0% /dev/shm
tmpfs 488M 7.7M 480M 2% /run
tmpfs 488M 0 488M 0% /sys/fs/cgroup
/dev/sda1 1014M 130M 885M 13% /boot
tmpfs 98M 0 98M 0% /run/user/0
/dev/mapper/myvg-mylv 481M 2.3M 449M 1% /data ##挂载成功
##写入测试文件
[root@localhost ~]# echo "hello word " > /data/a.txt
##正常写入和读取
[root@localhost ~]# cat /data/a.txt
hello word
[root@localhost ~]#
文件系统的扩展和缩减
文件系统在创建时是分成多个块组(block group)的,因此文件系统的增减实际上就是以增减块组的方式实现的。在linux中,ext系列格式的文件系统是可以扩展和缩减的,而xfs格式的目前只能扩展
还有就是要注意的是,逻辑卷有快照的时候是不能扩容和缩减的,除非先将快照删除
扩,使劲的扩
①先确定扩展的目标大小,并确保对应卷组中有足够的空闲空间可用。如果不够,可先通过vgextend命令扩大卷组容量
例如# vgextend myvg /dev/sdd
②扩展逻辑卷
例如# lvextend -L 4G /dev/myvg/mylv
③扩展文件系统
resize2fs为ext系列文件系统大小的调整工具用法为:resize2fs 文件系统所对应的设备文件名 [大小]
例如# resize2fs /dev/myvg/mylv
- 一般来说的化,lv逻辑卷大大小是受上层vg来进行影响的,如果Lv已经扩展到了
VG的大小,也就是说不能在扩了的话,可以考虑扩容vg后,在扩容lv
##扩容vg(将上面新添加的硬盘扩容到vg)
[root@localhost ~]# vgextend myvg /dev/sdd
Physical volume "/dev/sdd" successfully created. ###可以看到他会自动的进行pv初始化
Volume group "myvg" successfully extended
##查看vg扩容后结果
[root@localhost ~]# vgdisplay myvg
--- Volume group ---
VG Name myvg
System ID
Format lvm2
Metadata Areas 3
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 0
Max PV 0
Cur PV 3
Act PV 3
VG Size <59.98 GiB ###之前是40G
PE Size 8.00 MiB
Total PE 7677
Alloc PE / Size 63 / 504.00 MiB
Free PE / Size 7614 / 59.48 GiB
VG UUID SZRuYi-vq2Q-HgWk-vuGe-Wy4t-OKRR-BC0UpE
###vg扩容后在对lv进行扩容
###lv的扩容
##扩容300M
[root@localhost ~]# lvextend -L +300M /dev/myvg/mylv
Rounding size to boundary between physical extents: 304.00 MiB.
Size of logical volume myvg/mylv changed from 504.00 MiB (63 extents) to 808.00 MiB (101 extents).
Logical volume myvg/mylv successfully resized.
##df -h查看并没用扩容成功,那是因为还未对扩容的部分进行格式化
[root@localhost ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 17G 1011M 16G 6% /
devtmpfs 476M 0 476M 0% /dev
tmpfs 488M 0 488M 0% /dev/shm
tmpfs 488M 7.7M 480M 2% /run
tmpfs 488M 0 488M 0% /sys/fs/cgroup
/dev/sda1 1014M 130M 885M 13% /boot
tmpfs 98M 0 98M 0% /run/user/0
/dev/mapper/myvg-mylv 481M 2.3M 449M 1% /data
##对扩容部分进行格式化
[root@localhost ~]# resize2fs /dev/myvg/mylv
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/myvg/mylv is mounted on /data; on-line resizing required
old_desc_blocks = 4, new_desc_blocks = 7
The filesystem on /dev/myvg/mylv is now 827392 blocks long.
[root@localhost ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 17G 1011M 16G 6% /
devtmpfs 476M 0 476M 0% /dev
tmpfs 488M 0 488M 0% /dev/shm
tmpfs 488M 7.7M 480M 2% /run
tmpfs 488M 0 488M 0% /sys/fs/cgroup
/dev/sda1 1014M 130M 885M 13% /boot
tmpfs 98M 0 98M 0% /run/user/0
/dev/mapper/myvg-mylv 775M 2.5M 731M 1% /data
###查看文件
[root@localhost ~]# cat /data/a.txt
hello word ##数据无损
缩,一般用不到
这个一般用不到,数据只会越来越多,一般只会增加不会让你缩减的
缩减很危险,要离线
①先确定缩减后的目标大小,并确保对应的目标逻辑卷大小足够容纳原有数据
②先卸载文件系统,并要执行强制检测
例如# e2fsck -f
③缩减文件系统
例如#resize2fs DEVICE 例如,resize2fs /dev/myvg/mylv 3G 缩减至3G
④缩减逻辑卷
例如# lvreduce -L 3G /dev/myvg/mylv
##卸载逻辑卷
[root@localhost ~]# umount /data
##检测文件系统
[root@localhost ~]# e2fsck -f /dev/myvg/mylv
e2fsck 1.42.9 (28-Dec-2013)
第一步: 检查inode,块,和大小
第二步: 检查目录结构
第3步: 检查目录连接性
Pass 4: Checking reference counts
第5步: 检查簇概要信息
/dev/myvg/mylv: 12/206848 files (0.0% non-contiguous), 36877/827392 blocks
##缩减文件系统至500M
[root@localhost ~]# resize2fs /dev/myvg//mylv 500M
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/myvg//mylv to 512000 (1k) blocks.
The filesystem on /dev/myvg//mylv is now 512000 blocks long.
##缩减逻辑卷到500M
[root@localhost ~]# lvreduce -L 500M /dev/myvg/mylv
Rounding size to boundary between physical extents: 504.00 MiB.
WARNING: Reducing active logical volume to 504.00 MiB.
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce myvg/mylv? [y/n]: y
Size of logical volume myvg/mylv changed from 808.00 MiB (101 extents) to 504.00 MiB (63 extents).
Logical volume myvg/mylv successfully resized.
##重新挂载
[root@localhost ~]# mount /dev/myvg/mylv /data
##查看缩减后容量
[root@localhost ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 17G 1011M 16G 6% /
devtmpfs 476M 0 476M 0% /dev
tmpfs 488M 0 488M 0% /dev/shm
tmpfs 488M 7.7M 480M 2% /run
tmpfs 488M 0 488M 0% /sys/fs/cgroup
/dev/sda1 1014M 130M 885M 13% /boot
tmpfs 98M 0 98M 0% /run/user/0
/dev/mapper/myvg-mylv 477M 2.3M 447M 1% /data
##查看测试数据
[root@localhost ~]# cat /data/a.txt
hello word ###数据无丢失
休眠或者删除卷组(vg)
##卸载
[root@localhost ~]# umount /data
##休眠
[root@localhost ~]# vgchange -an myvg
0 logical volume(s) in volume group "myvg" now active
##激活
[root@localhost ~]# vgchange -ay myvg
1 logical volume(s) in volume group "myvg" now active
##删除
[root@localhost ~]# vgremove myvg
Do you really want to remove volume group "myvg" containing 1 logical volumes? [y/n]: y
Do you really want to remove active logical volume myvg/mylv? [y/n]: y
Logical volume "mylv" successfully removed
Volume group "myvg" successfully removed
结束语
打完收工,明天会更加美好