Linux-LVM学习总结

概念

  1. LVM:【 Logical Volume Manager】逻辑卷管理的简写,它是Linux环境下对磁盘分区进行管理的一种机制,它由Heinz Mauelshagen在Linux 2.4内核上实现。
  2. LVM优势:逻辑卷和逻辑卷管理有助于更加轻松地管理磁盘空间。如果文件系统需要更多的空间 , 可以将其卷组的可用空间分配给逻辑卷 , 并且可以调整文件系统的大小。如果磁盘开始出现错误 , 可以通过卷组将替换磁盘注册为物理卷 , 并且逻辑卷的范围可迁移到新磁盘
  3. PV:【physical volumes】物理卷,处于LVM最底层,可以是分区、完整磁盘、 RAID 集或 SAN 磁盘物理硬盘或者分区,但是这些设备必须初始化为 LVM 物理卷分区类型 , 才能与 LVM 结合使用
  4. VG:【volume groups】卷组,建立在PV之上,是存储池 , 由一个或多个物理卷组成
  5. LV :【logical volumes】逻辑卷,建立在VG之上,相当于原来分区的概念。不过大小可以动态改变。在逻辑卷LV之上可以建立文件系统。
  6. PE:【physical extent】物理区域是物理卷中可用于分配的最小存储单元,物理区域大小在建立卷组时指定,一旦确定不能更改,同一卷组所有物理卷的物理区域大小需一致,新的pv加入到vg后,pe的大小自动更改为vg中定义的pe大小。
  7. LE:【logical extent】逻辑区域是逻辑卷中可用于分配的最小存储单元,逻辑区域的大小取决于逻辑卷所在卷组中的物理区域的大小。由于受内核限制的原因,一个lv最多只能包含65536个pe,所以一个pe的大小就决定了逻辑卷的最大容量,4 MB(默认) 的pe决定了单个逻辑卷最大容量为 256 GB,若希望使用大于256G的逻辑卷,则创建卷组时需要指定更大的pe。

PV管理

1. 创建PV

创建PV的设备必须是 LVM 物理卷分区类型,代码8e

  • 物理磁盘或分区的系统类型设为Linux LVM
[root@station ~]# fdisk /dev/vdb 
Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): 
Using default response p
Partition number (1-4, default 1): 
First sector (2048-2097151, default 2048): 
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-2097151, default 2097151): +100M
Partition 1 of type Linux and of size 100 MiB is set
#建立主分区vdb1 100M
Command (m for help): n
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): 
Using default response p
Partition number (2-4, default 2): 
First sector (206848-2097151, default 206848): 
Using default value 206848
Last sector, +sectors or +size{K,M,G} (206848-2097151, default 2097151): +100M
Partition 2 of type Linux and of size 100 MiB is set
#建立主分区vdb2 100M
Command (m for help): t
Partition number (1,2, default 2): 1
Hex code (type L to list all codes): 8e
Changed type of partition 'Linux' to 'Linux LVM'
#改变主分区vdb1类型为LVM
Command (m for help): t
Partition number (1,2, default 2): 2
Hex code (type L to list all codes): 8e
Changed type of partition 'Linux' to 'Linux LVM'
#改变主分区vdb2类型为LVM
Command (m for help): p
...
   Device Boot      Start         End      Blocks   Id  System
/dev/vdb1            2048      206847      102400   8e  Linux LVM
/dev/vdb2          206848      411647      102400   8e  Linux LVM
#显示信息
  • 物理磁盘或分区初始化为PV
pvcreate命令
pvcreate [option] disk|partition...		#可以PV多个设备或分区,用空格隔开即可
-f			#强制创建物理卷,不需要用户确认
-u			#指定设备的UUID
-y			#所有的问题都回答yes
-Z			#是否利用前4个扇区
[root@station ~]# pvcreate  /dev/vdb1
Physical volume "/dev/vdb1" successfully created.
[root@station ~]# pvcreate  /dev/vdb2
Physical volume "/dev/vdb2" successfully created.
[root@station ~]# pvcreate /dev/vdb3 /dev/vdb4
Physical volume "/dev/vdb3" successfully created.
Physical volume "/dev/vdb4" successfully created.
#建立pv:vdb1和vdb2,或多个一次建立如pv:vdb3/vdb4

2.显示PV信息

pvs					#用于输出格式化的物理卷信息报表,能得到物理卷的概要信息
pvscan [选项]		#扫描系统中连接的所有硬盘,列出找到的物理卷列表
-n				#仅显示不属于任何卷组的物理卷
-s				#短格式输出
-u				#显示UUID
pvdispaly [选项] [disk|partition]
#用于显示物理卷的属性,显示的物理卷信息包括:物理卷名称、所属的卷组、物理卷大小、PE大小、总PE数、可用PE数、已分配的PE数和UUID
-s				#以短格式输出
-m				#显示PE到LE的映射

[root@station ~]# pvs
  PV         VG   Fmt  Attr PSize   PFree  
  /dev/vdb1       lvm2 ---  100.00m 100.00m
  /dev/vdb2       lvm2 ---  100.00m 100.00m
[root@station ~]# pvscan
  PV /dev/vdb2                      lvm2 [100.00 MiB]
  PV /dev/vdb1                      lvm2 [100.00 MiB]
  Total: 3 [9.19 GiB] / in use: 1 [9.00 GiB] / in no VG: 2 [200.00 MiB]
[root@station ~]# pvdisplay 
  "/dev/vdb2" is a new physical volume of "100.00 MiB"
  --- NEW Physical volume ---
  PV Name               /dev/vdb2
  VG Name               
  PV Size               100.00 MiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               CDWaNG-AB9s-1IpQ-73dz-RWiF-BHCS-w214WQ
   
  "/dev/vdb1" is a new physical volume of "100.00 MiB"
  --- NEW Physical volume ---
  PV Name               /dev/vdb1
  VG Name               
  PV Size               100.00 MiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               APtFKl-Sj9H-CRTO-LgAt-HhVS-fWCs-n9dcwQ

3.删除PV

pvremove[选项] disk|partition	#用于删除一个存在的物理卷
-f				#强制删除
-y				#对提问回答yes
[root@station ~]# pvremove /dev/vdb1
  Labels on physical volume "/dev/vdb1" successfully wiped.
[root@station ~]# pvremove /dev/vdb2
  Labels on physical volume "/dev/vdb2" successfully wiped.

VG管理

1. 创建VG

创建的卷组目录保存在/dev下,为方便管理系统默认文件命名方式为/dev/VG_NAME

vgcreate [option] VG_name PV_device...			#vg创建格式,PV_device可以是多个,空行隔开即可
-l			#卷组上允许创建的最大逻辑卷数
-p			#卷组中允许添加的最大物理卷数
-s			#卷组上的物理卷的PE大小
[root@station ~]# vgcreate -s 8M test /dev/vdb1 /dev/vdb2
  Volume group "test" successfully created
#使用pv:vdb1和vdb2 联合创建了vg:test

2. 显示VG信息

vgs					#用于输出卷组信息报表,能得到卷组的概要信息
pvscan 				#查找系统中存在的LVM卷组,并显示找到的卷组列表,列表中仅显示找到的卷组的名称和LVM元数据类型
vgdisplay [选项] [VG_name]
#用于显示LVM卷组的详细的属性信息
-A			#仅显示活动卷组的属性;
-s			#使用短格式输出的信息。
[root@station ~]# vgs
  VG   #PV #LV #SN Attr   VSize   VFree  
  test   2   0   0 wz--n- 192.00m 192.00m
[root@station ~]# vgscan
  Reading volume groups from cache.
  Found volume group "test" using metadata type lvm2

3. 增加VG容量

vgextend [选项] VG_name PV_device...	#动态扩展LVM卷组,它通过向卷组中添加物理卷来增加卷组的容量
-t			#测试
[root@station ~]# vgextend test /dev/vdb3 /dev/vdb4
  Volume group "test" successfully extended
[root@station ~]# vgs
  VG   #PV #LV #SN Attr   VSize   VFree  
  test   4   0   0 wz--n- 384.00m 384.00m
#注意此处pv显示为4

4. 减少VG容量

vgreduce [选项] VG_name PV_device...	#通过删除LVM卷组中的物理卷来减少卷组容量;不能删除LVM卷组中剩余的最后一个物理卷
-a						#如果命令行中没有指定要删除的物理卷,则删除所有的空物理卷
--removemissing			#删除卷组中丢失的物理卷,使卷组恢复正常状态(vg中的分区在fdisk中直接被删除了)
1.减少vg容量
[root@station ~]# vgreduce test /dev/vdb3 /dev/vdb4
  Removed "/dev/vdb3" from volume group "test"
  Removed "/dev/vdb4" from volume group "test"
[root@station ~]# vgs
  VG   #PV #LV #SN Attr   VSize   VFree  
  test   2   0   0 wz--n- 192.00m 192.00m
#注意此处pv显示为2

2.选项-a的用法
[root@station ~]# vgreduce -a test
  Removed "/dev/vdb1" from volume group "test"
  Can't remove final physical volume "/dev/vdb2" from volume group "test"
#删除了空vdb1,但是不能删除剩下的最后一个vdb2,所以提示vdb2不能删除
[root@station ~]# vgs
  VG   #PV #LV #SN Attr   VSize  VFree 
  test   1   0   0 wz--n- 96.00m 96.00m
#就剩下了一个

3.选项--removemissing用法
[root@station ~]# vgs
  VG   #PV #LV #SN Attr   VSize   VFree  
  rhel   1   2   0 wz--n-   9.00g      0 
  test   4   0   0 wz--n- 384.00m 384.00m
[root@station ~]# fdisk /dev/vdb
...
Command (m for help): d
Partition number (1-4, default 4): 4
Partition 4 is deleted
...
#直接删除了vdb4
[root@station ~]# vgs
  WARNING: Device for PV S3Wlk3-Krdh-2mui-9rGw-SlAv-l6sY-jDbIA8 not found or rejected by a filter.
  VG   #PV #LV #SN Attr   VSize   VFree  
  test   4   0   0 wz-pn- 384.00m 384.00m
#提示报警错误了
[root@station ~]# vgreduce --removemissing test
  WARNING: Device for PV S3Wlk3-Krdh-2mui-9rGw-SlAv-l6sY-jDbIA8 not found or rejected by a filter.
  Wrote out consistent volume group test
#删除卷组中丢失的物理卷vdb4,使卷组恢复正常状态
[root@station ~]# vgs
  VG   #PV #LV #SN Attr   VSize   VFree  
  rhel   1   2   0 wz--n-   9.00g      0 
  test   3   0   0 wz--n- 288.00m 288.00m

5. 删除VG

vgremove[选项] VG_name	#用于删除一个存在的卷组
-f						#强制删除
[root@station ~]# vgremove test
  Volume group "test" successfully removed

LV管理

1.创建LV

创建的逻辑卷对应的设备文件保存在卷组目录下,为方便管理系统命名方为/dev/VG_NAME/LV_NAME。同时LV中可以分配的最小存储单元称为LE(logical extend),在同一个卷组中,LE的大小和PE是一样的,且一一对应

lvcreate [option]  VG_name					#在选用的VG卷组中创建lv,系统会默认命名lvol0、lvol1、lvoln以此类推
-L				#指定LV的大小,大小会按照最接近整数个LE的大小计算
-l				#指定LV的大小,以LE个数计算
-n				#指定LV命名
[root@station ~]# lvcreate -L 30M  test -n lv1
  Rounding up size to full physical extent 32.00 MiB
  Logical volume "lv1" created.
#创建了大小为32的lv1,因为le=pe=8同时lv大小必须为le的整数倍,所以为32

2.显示LV信息

lvs						#用于输出逻辑卷信息报表,能得到逻辑卷的概要信息
lvscan 					#查找系统中存在的LV卷,并显示找到的卷列表,列表中仅显示找到的逻辑卷及其对应的设备文件
lvdisplay [LV文件路径]	#用于显示LV卷的详细的属性信息
[root@station ~]# lvs
  LV   VG   Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert                                             
  lv1  test -wi-a----- 32.00m                                                    
[root@station ~]# lvscan
  ACTIVE            '/dev/test/lv1' [32.00 MiB] inherit
[root@station ~]# lvdisplay /dev/test/lv1 
  --- Logical volume ---
  LV Path                /dev/test/lv1
  LV Name                lv1
  VG Name                test
  LV UUID                ev8npY-bRn2-MeG6-QdEZ-7gdD-ebth-ImiCMt
  LV Write Access        read/write
  LV Creation host, time station.domain1.example.com, 2019-10-28 12:31:11 -0400
  LV Status              available
  # open                 0
  LV Size                32.00 MiB
  Current LE             4
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:2

3.扩大LV容量

lvextend [LV文件路径]	#动态扩展LV
-L	大小|+大小			#指定LV的扩充大小,没有加号指定扩充到多少,有加号表示增加多少
-l	数量|+数量			#指定LV的扩充大小,没有加号指定扩充到多少个,有加号表示增加多少个
[root@station ~]# lvextend -l +2 /dev/test/lv1
  Size of logical volume test/lv1 changed from 32.00 MiB (4 extents) to 48.00 MiB (6 extents).
  Logical volume test/lv1 successfully resized.
#lv1的le数量怎加2个
[root@station ~]# lvextend -l 7 /dev/test/lv1
  Size of logical volume test/lv1 changed from 48.00 MiB (6 extents) to 56.00 MiB (7 extents).
  Logical volume test/lv1 successfully resized.
#lv1的le数量增加到7个

注意:由于lv卷在被使用时,会先格式化文件系统然后挂载,所以在扩大lv后相应的文件系统也要调整

  • xfs格式仅可以扩大,不可以缩小
xfs_growfs lv文件路径			#重新调整lv的xfs文件系统
#例如:
xfs_growfs /dev/test/lv1
meta-data=/dev/mapper/test-lv1   isize=512    agcount=1, agsize=4096 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=4096, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=855, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 4096 to 12288
#提示数据块发生了改变
  • ext4格式可大可小
resize2fs命令			#重新设置大小
[root@station ~]# resize2fs /dev/test/lv1
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/test/lv1 is mounted on /mnt; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/test/lv1 is now 32768 blocks long.

4.减少LV容量

减小容量常涉及到,存储了的文件,注意文件内容安全
特别注意:增加则容量时,先怎加LV卷,然后调整文件格式,但是减少容量时相反,先减少格式化文件系统,然后操作LV卷
可以将lv想象为足球场,格式化为草皮,增大时,先扩地后埔草
而减少时,先铲草,后划地

lvreduce [LV文件路径]	#动态缩小LV
-L	大小|-大小		#指定LV的扩充大小,没有加号指定扩充到多少,有加号表示增加多少
-l	数量|-数量		#指定LV的扩充大小,没有加号指定扩充到多少个,有加号表示增加多少个
[root@station ~]# lvreduce -l -2 /dev/test/lv1
  WARNING: Reducing active and open logical volume to 40.00 MiB.
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce test/lv1? [y/n]: y
#确认信息
  Size of logical volume test/lv1 changed from 56.00 MiB (7 extents) to 40.00 MiB (5 extents).
  Logical volume test/lv1 successfully resized.
#减小2pe
[root@station ~]# lvreduce -l 2 /dev/test/lv1
  WARNING: Reducing active and open logical volume to 16.00 MiB.
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce test/lv1? [y/n]: y
  Size of logical volume test/lv1 changed from 40.00 MiB (5 extents) to 16.00 MiB (2 extents).
  Logical volume test/lv1 successfully resized.
#lv1的le数量减少到7个

5.删除LV

删除lv前,先执行卸载umount

lvremove[选项] lv文件路径	#用于删除一个存在的逻辑卷
-f							#强制删除
[root@station ~]# lvremove /dev/test/lv1
Do you really want to remove active logical volume test/lv1? [y/n]: y
#信息确认
  Logical volume "lv1" successfully removed
#回馈信息

LV快照

快照注意事项:

  1. 创建快照,对象必须为lv
  2. 使用过程注意,存储大小超过快照,快照会坏掉,直接重挂载目录中卸载掉
lvcreate -s	lv文件路径			#创建快照
#注:使用该命令创建逻辑卷时当然必须指明卷组,创建快照时必须指明针对哪个逻辑卷 
lvcreate -L 8M -n lv1_bak -s /dev/test/lv1
#创建lv1的快照文件lv1_bak,大小为8M

LVM逻辑顺序

创建LV是使用顺序

创建分区
创建pv
创建vg
创建lv
创建lv快照
挂载

销毁LV的顺序

卸载
删除lv快照
删除lv
删除vg
删除pv
删除分区
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值