Linux入门之磁盘管理(8)LVM逻辑卷的使用
在Linux中虽然有raid来保证数据的稳定以及磁盘性能的提高,但是其扩展性并不是很好,在很多生产环境中,都是数据正在使用中,在这时如果中断一段时间就会有很大的损失,因此Linux提供了LVM虚拟逻辑卷的概念,同样多个磁盘设备或分区设备组合在一起,但是,如果空间需要缩减或者扩展,可以很方便的进行动态改变,甚至进行数据快照。
逻辑卷管理器(LVM):
1、允许对卷进行方便操作的抽象层,包括重新定义文件系统的大小
2、允许在多个目录设备间重新组织文件系统
(1)将设备指定为物理卷
(2)用一个或多个物理卷来创建一个卷组
(3)物理卷是用来固定大小的物理区域(Physical Extent, PE)来定义的
(4)在物理卷上创建的逻辑卷是由物理区域(PE)组成的
(5)可以在逻辑卷上创建文件系统
LVM的需要:
dm: device mapper :将一个或多个底层块设备组成一个逻辑设备的模块
注意:内核必须支持此模块,否则无法使用lvm功能
设备名:/dev/dm-#
软连接:/dev/mapper/VG_NAME-LV_NAME
如:/dev/mapper/vol0-root
/dev/VG_NAME/LV_NAME
如:/dev/vol0/root
当pv被创建之后只有被加入指定创建的vg组,才会被划分PE,而Vg组管理每个pv设备,Lvm逻辑创建后指定大小使用的组不一定就是有序的,此时没有了各个分区以及各个设备的概念,然后扩展LV时就会向各个vg组中抽取PE使用,然后将PE标记为LE用于使用,如果缩减LV,也就是将LE移除变成PE。
Lvm逻辑卷管理相关命令
pv管理命令
pvcreate 创建pv物理卷
pvcreate /dev/dev_file... #将一个或多个磁盘设备创建为pv物理卷
pvremove 移除pv物理卷
pvremove /dev/dev_pvfile... #将一个或多个磁盘设备从pv物理卷移除
pvscan 扫描pv
pvs 列出pv列表
pvs /dev/pv_file #只列出指定pv
pvdisplay 查看pv详细信息
pvdisplay /dev/dev_pvfile #查询指定pv物理卷的详细信息
pvmove 迁移指定pv下的PE分配到其它pv的PE中
pvmove /dev/dev_pvfile #将指定pv中的PE迁移至其它pv中
vg管理命令
vgcreate 创建vg组
vgcreate VG_NAME [-s PE_SIZE] /dev/pv_file #将指定pv加入到名为VG_NAME的VG组中,分配PE
vgremove 移除vg组
vgremove /dev/vg_file
vgextend 扩展vg加入pv
vgextend VG_NAME /dev/new_pv_file #新增pv物理卷到指定VG组中
vgreduce 缩减vg移除pv
vgreduce VG_NAME /dev/pv_file #移除指定VG组中的pv成员
vgs 查看vg列表
vgs VG_NAME #只列出指定VG信息
vgdisplay 查看vg组详细信息
vgdisplay VG_NAME #示指定VG组的详细信息
lv管理命令
lvcreate 创建逻辑卷
lvcreate -n LV_NAME -L [SIZE] VG_NAME #创建指定大小逻辑卷,并从指定VG组中分配LE
lvcreate -n LV_NAME -L [SIZE] -p r -s /dev/vg/lv_file #创建基于指定lv逻辑卷的快照卷
lvextend 扩展逻辑卷
lvextend [[+]SIZE] /dev/vg/lv_file #扩展指定逻辑卷的大小,+SIZE为增加多少,SIZE为增加到多少
lvreduce 缩减逻辑卷
lvreduce [-[SIZE]] /dev/vg/lv_file #缩减指定逻辑卷的大小,-SIZE为缩减多少,SIZE为缩减到多少
lvresize 重置lv物理大小
lvresize -L SIZE /dev/vg/lvfile #重置逻辑卷的物理实际大小
其它命令
resizefs /dev/vg/lvfile SIZE #重置逻辑卷的物理实际大小,只适用于ext系列文件系统
lvextend -r -l +100%FREE /dev/myvg/lvtest #同时扩展物理大小和逻辑卷大小,使用剩余所有PE
xfs_growfs /dev/xfs_dev #专门用于扩展xfs文件系统类物理大小,使用所有剩余PE
使用案例-阶段1:
1、准备分区设备:
#准备lvm类型分区或设备
[root@mzf ~]# fdisk -l /dev/sdb 2> /dev/null | grep ‘^/.*‘ /dev/sdb1 1 132 1060258+ 8e Linux LVM /dev/sdb2 133 264 1060290 8e Linux LVM /dev/sdb3 265 396 1060290 8e Linux LVM /dev/sdb4 397 2610 17783955 5 Extended /dev/sdb5 397 528 1060258+ 8e Linux LVM /dev/sdb6 529 660 1060258+ 8e Linux LVM
#在使用fdisk中指定类型为Linux Lvm,设置为8e即可,可以使用以下命令来查看对应类型的code列表
[root@mzf ~]# echo -e ‘l\nq‘ | fdisk /dev/sdb 2> /dev/null | grep -i --color -o ‘..[[:space:]]\+linux.*lvm‘ 8e Linux LVM
2、新增PV卷:
#先选出3个分区设备创建为pv
[root@mzf ~]# pvcreate /dev/sdb{1,2,3} Physical volume "/dev/sdb1" successfully created Physical volume "/dev/sdb2" successfully created Physical volume "/dev/sdb3" successfully created
解析:pvcreate支持分组表示多个设备,suceessfully表示创建成功
#查看pv成员,显示有3个,各种1G,但是没有分配VG组
[root@mzf ~]# pvs PV VG Fmt Attr PSize PFree /dev/sdb1 lvm2 ---- 1.01g 1.01g /dev/sdb2 lvm2 ---- 1.01g 1.01g /dev/sdb3 lvm2 ---- 1.01g 1.01g
#重新扫描pv,这里为了再次确认pv卷列表中的PV设备
[root@mzf ~]# pvscan
PV /dev/sdb1 lvm2 [1.01 GiB]
PV /dev/sdb2 lvm2 [1.01 GiB]
PV /dev/sdb3 lvm2 [1.01 GiB]
Total: 3 [3.03 GiB] / in use: 0 [0 ] / in no VG: 3 [3.03 GiB]
#使用pvdisplay查看当前pv详细信息,信息过长,因此这里进行截取部分重要信息
#查看PV及对应设备
[root@mzf ~]# pvdisplay | grep ‘\<\(VG\|PV\)\>.*Name‘ PV Name /dev/sdb1 VG Name PV Name /dev/sdb2 VG Name PV Name /dev/sdb3 VG Name
注意:这里没有创建vg也就没有分配PE,下面创建vg组:
3、创建VG组,生成PE
#创建vg0组,名为myvg,分配pv卷sdb{1,2,3}3个,默认不指定PE块大小未4M
[root@mzf ~]# vgcreate myvg /dev/sdb{1,2,3} Volume group "myvg" successfully created
#查看vg组大小、PV个数
[root@mzf ~]# vgs VG #PV #LV #SN Attr VSize VFree myvg 3 0 0 wz--n- 3.02g 3.02g
#重新扫描vg组
[root@mzf ~]# vgscan Reading all physical volumes. This may take a while... Found volume group "myvg" using metadata type lvm2
#重新扫描pv,pv已经有了VG组,名为myvg
[root@mzf ~]# pvscan PV /dev/sdb1 VG myvg lvm2 [1.01 GiB / 1.01 GiB free] PV /dev/sdb2 VG myvg lvm2 [1.01 GiB / 1.01 GiB free] PV /dev/sdb3 VG myvg lvm2 [1.01 GiB / 1.01 GiB free] Total: 3 [3.02 GiB] / in use: 3 [3.02 GiB] / in no VG: 0 [0 ]
#查看PE大小分配
[root@mzf ~]# vgdisplay myvg | grep ‘PE.*‘ PE Size 4.00 MiB Total PE 774 Alloc PE / Size 0 / 0 Free PE / Size 774 / 3.02 GiB
解析:这里我们发现PE被划分4M一个,总共有774个PE,使用0个。
4、创建Lv逻辑卷
#创建30M的lv逻辑卷,名为lv0,从VG组myvg中的PV成员分配PE标记为LE空间表示lv逻辑卷的块
[root@mzf ~]# lvcreate -n lv0 -L 30M myvg Rounding up size to full physical extent 32.00 MiB Logical volume "lv0" created.
#查看lv信息,发现居然为32M,这里有小误差是正常的
[root@mzf ~]# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert lv0 myvg -wi-a----- 32.00m
#重新扫描lv
[root@mzf ~]# lvscan
ACTIVE ‘/dev/myvg/lv0‘ [32.00 MiB] inherit
#为lv0逻辑卷创建文件系统,类型为ext4
[root@mzf ~]# mke2fs -t ext4 /dev/myvg/lv0
#挂载lv0逻辑卷
[root@mzf ~]# mount /dev/myvg/lv0 /mnt/lv0
#查看挂载属性,确认挂载成功
[root@mzf ~]# mount | grep ‘lv0‘ /dev/mapper/myvg-lv0 on /mnt/lv0 type ext4 (rw)
#加入一个文本文件
[root@mzf ~]# cp /etc/issue /mnt/lv0/
#查看源文件内容
[root@mzf ~]# cat /mnt/lv0/issue CentOS release 6.8 (Final) Kernel \r on an \m
#修改文件内容
[root@mzf ~]# sed -i ‘$ a \add new line‘ /mnt/lv0/issue [root@mzf ~]# cat /mnt/lv0/issue CentOS release 6.8 (Final) Kernel \r on an \m add new line
使用案例-阶段2:
5、逻辑卷大小的动态调整解析:
在进行逻辑卷大小之前,需要知道一个简单的概念,逻辑卷在进行扩展时,是需要配合时间物理大小进行扩展的,扩展后的总大小不能超过物理卷实际总大小,而进行逻辑卷缩减时物理卷也要同步缩减,逻辑卷就包含于物理卷中,如下图:
6、扩展逻辑卷:
#查看此时逻辑卷大小,总大小为30M左右,剩余25M
[root@mzf ~]# df -h | grep ‘myvg-lv0‘ /dev/mapper/myvg-lv0 27M 397K 25M 2% /mnt/lv0
说明:第一列表示lv0设备映射文件,第2列表示总大小,为27M。
#查看myvg组中剩余PE
[root@mzf ~]# vgs myvg VG #PV #LV #SN Attr VSize VFree myvg 3 1 0 wz--n- 3.02g 2.99g
解析:这里剩余还有很多,因此扩展30M
#扩展lv0逻辑大小增加 30M
[root@mzf ~]# lvextend -L +30M /dev/myvg/lv0 Rounding size to boundary between physical extents: 32.00 MiB. Size of logical volume myvg/lv0 changed from 32.00 MiB (8 extents) to 64.00 MiB (16 extents). Logical volume lv0 successfully resized.
解析:这里显示扩展32M,最终为64M,此时我们检查lv大小
[root@mzf ~]# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert lv0 myvg -wi-ao---- 64.00m
解析:这里已经从32M变为64M,表示逻辑大小扩展成功
#最后一步,检查物理大小是否改变
[root@mzf ~]# df -h | grep ‘myvg.*lv0‘ /dev/mapper/myvg-lv0 27M 397K 25M 2% /mnt/lv0
#这里发现,任然没有改变,因此我们需要重新设置物理卷同步大小
[root@mzf ~]# resize2fs -p /dev/myvg/lv0 resize2fs 1.41.12 (17-May-2010) Filesystem at /dev/myvg/lv0 is mounted on /mnt/lv0; on-line resizing required old desc_blocks = 1, new_desc_blocks = 1 Performing an on-line resize of /dev/myvg/lv0 to 65536 (1k) blocks. The filesystem on /dev/myvg/lv0 is now 65536 blocks long.
#再次查看分逻辑物理大小,已经改变,已经从27M变成58M
[root@mzf ~]# df -h | grep ‘myvg.*lv0‘ /dev/mapper/myvg-lv0 58M 651K 55M 2% /mnt/lv0
#下面查看文件是否正常:
[root@mzf ~]# cat /mnt/lv0/issue CentOS release 6.8 (Final) Kernel \r on an \m add new line
7、缩减逻辑卷:
注意事项:
1、不能在线缩减,得先卸载;
2、确保缩减后的大小依然能存储原有的所有数据;
3、在缩减之前应该先前行检查文件系统,以确保文件系统处于停止状态
缩减操作:
#先查看物理空间大小,物理卷使用651K,剩余55M
[root@mzf ~]# df -lh | grep ‘myvg.*lv0‘ /dev/mapper/myvg-lv0 58M 651K 55M 2% /mnt/lv0
#卸载逻辑卷
[root@mzf ~]# umount /dev/myvg/lv0
#强行检查
[root@mzf ~]# e2fsck -f /dev/myvg/lv0 e2fsck 1.41.12 (17-May-2010) Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information /dev/myvg/lv0: 12/16384 files (8.3% non-contiguous), 6822/65536 blocks
#查看先在lv0大小
[root@mzf ~]# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert lv0 myvg -wi-a----- 64.00m
#要缩减30M,物理卷使用651K,剩余55M,因此要设置物理卷总大小不得小于651K
[root@mzf ~]# resize2fs /dev/myvg/lv0 28 resize2fs 1.41.12 (17-May-2010) resize2fs: New size smaller than minimum (8870)
#缩减逻辑卷
[root@mzf ~]# lvreduce -L -30M /dev/myvg/lv0 Rounding size to boundary between physical extents: 28.00 MiB. WARNING: Reducing active logical volume to 36.00 MiB. THIS MAY DESTROY YOUR DATA (filesystem etc.) Do you really want to reduce myvg/lv0? [y/n]: y Size of logical volume myvg/lv0 changed from 64.00 MiB (16 extents) to 36.00 MiB (9 extents). Logical volume lv0 successfully resized.
#再次挂载设备
[root@mzf ~]# df -lh | grep ‘/mnt/lv0‘ /dev/mapper/myvg-lv0 31M 445K 29M 2% /mnt/lv0
#再次查看文件
[root@mzf ~]# cat /mnt/lv0/issue CentOS release 6.8 (Final) Kernel \r on an \m add new line
注意事项:如果需要扩展,发现剩余pv不够用,可以先添加pv设备然后加入指定vg值,分配PE空间后再进行扩展,如果缩减必须先卸载设备,不然会损坏设备数据,然后强行检查,确认无误再进行操作,缩减必须先缩减物理卷再操作逻辑。如果移除逻辑卷,需要lvremove先移除,然后移除vg,最后移除pv,如果pv有数据,想移除pv,得先pvmove移动PE空间至其它PE
本文出自 “神剑特兰克斯” 博客,请务必保留此出处http://mengzhaofu.blog.51cto.com/10085198/1845365
原文地址:http://mengzhaofu.blog.51cto.com/10085198/1845365