Linux基础篇学习——Linux磁盘管理及维护之LVM逻辑卷

LVM相关概念

LVM是 Logical Volume Manager(逻辑卷管理)的简写,它是Linux环境下对磁盘分区进行管理的一种机制。LVM是在磁盘分区和文件系统之间添加的一个逻辑层,来为文件系统屏蔽下层磁盘分区布局,提供一个抽象的存储卷,在存储卷上建立文件系统。

/boot分区不能基于LVM创建,必须独立出来

LVM术语

  1. PE (Physical Extend) 每一个物理卷被划分为称为PE(Physical Extents)的基本单元,具有唯一编号的PE是可以被LVM寻址的最小单元。PE的大小是可配置的,默认为4MB。
  2. PV (Physical Volume) 物理卷就是指硬盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数。
  3. VG (Volume Group) LVM卷组类似于非LVM系统中的物理硬盘,其由物理卷组成。可以在卷组上创建一个或多个“LVM分区”(逻辑卷),LVM卷组由一个或多个物理卷组成。
  4. LV (Logical Volume) LVM的逻辑卷类似于非LVM系统中的硬盘分区,在逻辑卷之上可以建立文件系统(比如/home或者/usr等)。
  5. LE (Logical Extent) 逻辑卷也被划分为被称为LE(Logical Extents) 的可被寻址的基本单位。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。

LV取代分区,通过对逻辑卷进行格式化,然后进行挂载使用

术语 含义
PV 物理的磁盘分区
VG LVM中的物理的磁盘分区,PV必须加入VG
LV 从VG中划分的逻辑分区

在这里插入图片描述

LVM管理命令

PV相关命令

命令 含义
pvcreate 创建pv
pvs 查看pv的信息
pvdisplay 查看pv的详细信息
pvscan 在系统中扫描硬盘,列出找到的物理卷列表
pvremove 移除物理卷
pvmove 移除物理卷中的PE

vg相关命令

命令 含义
vgcreate 创建卷组
vgextend 向卷组中添加成员
vgreduce 从卷组中删除成员
cgremove 删除卷组
vgs 查看卷组信息
vgdisplay 查看卷组的详细信息
vgrename 更改卷组的名称
vgchange 改变卷组的工作状态
vgexport 导出卷组
vgimport 导入卷组

lv相关命令

命令 含义
lvcreate 创建逻辑卷
lvextend 扩展逻辑卷的大小
lvreduce 缩减逻辑卷的大小
lvrename 更改逻辑卷的名称
lvs 查看lv信息
lvdisplay 查看lv的详细信息
lvremove 删除逻辑卷
lvconvert 恢复快照,快照在恢复后被删除

创建LVM

  1. 准备物理磁盘
[root@localhost ~]# ll /dev/sdb{1,2,5}
brw-rw----. 1 root disk 8, 17 Nov 12 21:07 /dev/sdb1
brw-rw----. 1 root disk 8, 18 Nov 12 21:07 /dev/sdb2
brw-rw----. 1 root disk 8, 21 Nov 12 21:07 /dev/sdb5
  1. 创建PV

pvcreate

[root@localhost ~]# yum install lvm2 -y
[root@localhost ~]# pvcreate /dev/sdb1 /dev/sdb2
  Physical volume "/dev/sdb1" successfully created.
  Physical volume "/dev/sdb2" successfully created.
[root@localhost ~]# pvs
  PV         VG   Fmt  Attr PSize  PFree
  /dev/sdb1  myvg lvm2 a--  <5.00g <5.00g
  /dev/sdb2  myvg lvm2 a--  <5.00g <5.00g
[root@localhost ~]# pvscan
[root@localhost ~]# pvdisplay
  1. 创建vg

vgcreate

[root@localhost ~]# vgcreate  myvg /dev/sdb1 /dev/sdb2
  Volume group "myvg" successfully created
[root@localhost ~]# vgs
  VG   #PV #LV #SN Attr   VSize VFree
  myvg   2   0   0 wz--n- 9.99g 9.99g
[root@localhost ~]# vgscan
[root@localhost ~]# vgdisplay
  --- Volume group ---
……
  PE Size               4.00 MiB	;没有指定默认4M
……
  1. 创建lv

lvcreate

-n 指定逻辑卷的名称
-L 使用空间容量指定逻辑卷的大小 -L ## 绝对容量 ,-L +## 增量容量
-l 使用PE的个数指定逻辑卷的大小 -l ## 绝对数量 ,-l +## 增量个数,%##free,%##vg
-s 指明创建的逻辑卷为快照
-p 设置只读r属性

[root@localhost ~]# lvcreate -l 10 -n mylv1 myvg	;使用PE数量设置大小
  Logical volume "mylv1" created.
[root@localhost ~]# lvcreate -L 100M -n mylv2 myvg	;直接指定大小
  Logical volume "mylv2" created.
[root@localhost ~]# lvs                            
[root@localhost ~]# lvdisplay
[root@localhost ~]# lvscan
  ACTIVE            '/dev/myvg/mylv1' [40.00 MiB] inherit
  ACTIVE            '/dev/myvg/mylv2' [100.00 MiB] inherit
  1. 创建文件系统并挂载
[root@localhost ~]# mkfs.ext4 /dev/myvg/mylv1
[root@localhost ~]# mkfs.ext4 /dev/myvg/mylv2
[root@localhost ~]# mount /dev/myvg/mylv1 /mydir/mylv1
[root@localhost ~]# mount /dev/myvg/mylv2 /mydir/mylv2
[root@localhost ~]# df -Th
Filesystem             Type      Size  Used Avail Use% Mounted on
……
/dev/mapper/myvg-mylv1 ext4       35M  782K   32M   3% /mydir/mylv1
/dev/mapper/myvg-mylv2 ext4       93M  1.6M   85M   2% /mydir/mylv2

VG管理

1.vgextend 扩大VG(卷组)

[root@localhost ~]# pvcreate /dev/sdb5
  Physical volume "/dev/sdb5" successfully created.
[root@localhost ~]# vgextend myvg /dev/sdb5
  Volume group "myvg" successfully extended
[root@localhost ~]# vgs
  VG   #PV #LV #SN Attr   VSize   VFree
  myvg   3   2   0 wz--n- <14.99g 14.85g  

2.vgreduce 减小VG

[root@localhost ~]# pvs
  PV         VG   Fmt  Attr PSize  PFree
  /dev/sdb1  myvg lvm2 a--  <5.00g <4.86g
  /dev/sdb2  myvg lvm2 a--  <5.00g <5.00g
  /dev/sdb5  myvg lvm2 a--  <5.00g <5.00g
[root@localhost ~]#
[root@localhost ~]# dd if=/dev/zero of=/mydir/mylv1/file bs=1M count=20
20+0 records in
20+0 records out
20971520 bytes (21 MB) copied, 0.304384 s, 68.9 MB/s
[root@localhost ~]# pvs
  PV         VG   Fmt  Attr PSize  PFree
  /dev/sdb1  myvg lvm2 a--  <5.00g <4.86g
  /dev/sdb2  myvg lvm2 a--  <5.00g <5.00g
  /dev/sdb5  myvg lvm2 a--  <5.00g <5.00g
[root@localhost ~]# pvmove /dev/sdb1	;将数据挪到其他pv上
  /dev/sdb1: Moved: 28.57%
  /dev/sdb1: Moved: 100.00%
[root@localhost ~]# pvs
  PV         VG   Fmt  Attr PSize  PFree
  /dev/sdb1  myvg lvm2 a--  <5.00g <5.00g
  /dev/sdb2  myvg lvm2 a--  <5.00g <4.86g
  /dev/sdb5  myvg lvm2 a--  <5.00g <5.00g
[root@localhost ~]# vgreduce myvg /dev/sdb1
  Removed "/dev/sdb1" from volume group "myvg"
[root@localhost ~]# vgs
  VG   #PV #LV #SN Attr   VSize VFree
  myvg   2   2   0 wz--n- 9.99g <9.86g

lvextent LVM扩展

有足够的VG就可以来扩展lv

[root@localhost ~]# lvextend -L +60M /dev/myvg/mylv1
  Size of logical volume myvg/mylv1 changed from 40.00 MiB (10 extents) to 100.00 MiB (25 extents).
  Logical volume myvg/mylv1 successfully resized.
[root@localhost ~]# lvs
  LV    VG   Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  mylv1 myvg -wi-ao---- 100.00m                                                
  mylv2 myvg -wi-ao---- 100.00m                                                
[root@localhost ~]# df -h | grep mylv1
/dev/mapper/myvg-mylv1   35M   21M   12M  66% /mydir/mylv1	;虽然lv扩容了,但是挂载磁盘大小依然是40M,我们需要给新增的lv创建文件系统,这样系统才能识别
[root@localhost ~]# resize2fs /dev/myvg/mylv1
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/myvg/mylv1 is mounted on /mydir/mylv1; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/myvg/mylv1 is now 102400 blocks long.

[root@localhost ~]# df -h | grep mylv1
/dev/mapper/myvg-mylv1   93M   22M   66M  25% /mydir/mylv1

lvreduce LV缩减

注意:文件系统大小和逻辑卷大小一定要保持一致才行。如果逻辑卷大于文件系统,由于部分区域未格式化成文
件系统会造成空间的浪费。如果逻辑卷小于文件系统,哪数据就会出问题。

文件系统大小和逻辑卷一定要保持一致

  1. umount卸载逻辑卷 必须卸载逻辑卷才能缩减
[root@localhost ~]# umount /mnt/mylv1
[root@localhost ~]# df -h|grep mylv1
  1. 通过e2fsck命令检测逻辑卷上空余的空间
[root@localhost ~]# e2fsck -f /dev/myvg/mylv1	;必须强制检测,否则缩减的时候会提示
e2fsck 1.42.9 (28-Dec-2013)
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/mylv1: 12/26624 files (8.3% non-contiguous), 29494/102400 blocks
  1. 使用resize2fs将文件系统减少
[root@localhost ~]# resize2fs /dev/myvg/mylv1 50M
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/myvg/mylv1 to 51200 (1k) blocks.
The filesystem on /dev/myvg/mylv1 is now 51200 blocks long.
  1. 使用lvreduce命令将逻辑卷减少
[root@localhost ~]# lvreduce -L -50M /dev/myvg/mylv1
  Rounding size to boundary between physical extents: 48.00 MiB.
  WARNING: Reducing active logical volume to 252.00 MiB.
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce myvg/mylv1? [y/n]: y
  Size of logical volume myvg/mylv1 changed from 300.00 MiB (75 extents) to 252.00 MiB (63 extents).
  Logical volume myvg/mylv1 successfully resized.
  1. 挂载使用
[root@localhost ~]# mount /dev/myvg/mylv1 /mydir/mylv1
[root@localhost ~]# df -Th|grep mylv1
/dev/mapper/myvg-mylv1 ext4       45M   22M   21M  52% /mydir/mylv1

删除逻辑卷

  1. umount卸载逻辑卷
[root@localhost ~]# umount /mydir/mylv1
[root@localhost ~]# df -Th|grep mylv1
  1. 修改/etc/fstab里面逻辑卷的挂载信息(如有添加),否则系统有可能启动不起来。
  2. lvremove删除逻辑卷
[root@localhost ~]# lvremove /dev/myvg/mylv1
Do you really want to remove active logical volume myvg/mylv1? [y/n]: y
  Logical volume "mylv1" successfully removed
  1. vgremove删除卷组
[root@localhost ~]# vgremove myvg
  1. pvremove将物理卷转化成普通分区
[root@localhost ~]# pvremove /dev/sdb1 /dev/sdb2

LVM快照 lvm snapshot

注意事项

  1. VG中需要预留存放快照本身的空间
  2. 快照所在的VG必须与被备份的LV相同,即快照存放的位置必须与被照卷存放在同一个VG上,否则快照会失败
  3. 如果快照卷满了,自动失效
  1. 创建快照
[root@localhost ~]# lvcreate -L 20M -s -n mysnop /dev/myvg/mylv2
  Logical volume "mysnop" created.
[root@localhost ~]# lvdisplay
……
--- Logical volume ---
  LV Path                /dev/myvg/mysnop
  LV Name                mysnop
  VG Name                myvg
 ……
  COW-table size         20.00 MiB	;快照实际容量
  COW-table LE           5
  Allocated to snapshot  0.06%	;快照已使用百分比
  Snapshot chunk size    4.00 KiB
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:3
  1. 删除快照
[root@localhost ~]# lvremove /dev/myvg/mysnop
Do you really want to remove active logical volume myvg/mysnop? [y/n]: y
  Logical volume "mysnop" successfully removed

示例:创建快照并通过快照恢复数据

  1. 首先给创建好的lv中写入数据
[root@localhost ~]# cd /mydir/mylv2
[root@localhost mylv2]# echo "hello" > myspon_file
[root@localhost mylv2]# cat myspon_file
hello
  1. 创建快照
[root@localhost mylv2]# lvcreate -L 20M -s -n mysnop1 /dev/myvg/mylv2
  Logical volume "mysnop1" created.
  1. 原始卷中写入数据,快照卷的使用率会增加
[root@localhost mylv2]# lvdisplay |grep %
  Allocated to snapshot  0.29%
  Allocated to snapshot  0.06%
[root@localhost mylv2]# dd if=/dev/zero of=/mydir/mylv2/file bs=1M count=5
5+0 records in
5+0 records out
5242880 bytes (5.2 MB) copied, 0.00892103 s, 588 MB/s
[root@localhost mylv2]# lvdisplay |grep %
  Allocated to snapshot  0.31%
  Allocated to snapshot  0.10%
[root@localhost mylv2]# echo "hello" > myspon_file2
[root@localhost mylv2]# ls
file  lost+found  myspon_file  myspon_file2
  1. 恢复原始数据
[root@localhost ~]# umount /myfile/mylv2	;必须卸载
[root@localhost ~]# lvconvert --merge /dev/myvg/mysnop1
  Merging of volume myvg/mysnop1 started.
  myvg/mylv2: Merged: 99.86%
发布了43 篇原创文章 · 获赞 30 · 访问量 5935

猜你喜欢

转载自blog.csdn.net/qq_42049496/article/details/103099886