LVM 逻辑卷详细讲解

一、LVM:逻辑卷管理器

定义:LVM是Linux环境中对磁盘分区进行管理的一种机制, 是建立在硬盘和分区之上、文件系统之下的一个逻辑层,可提高磁盘分区管理的灵活性。RHEL5默认安装的分区格式就是LVM逻辑卷的格式, 需要注意的是/boot分区不能基于LVM创建,必须独立出来。

作用:生成逻辑卷,动态扩容文件空间的大小。

​ 基本的LVM术语:

PV :物理卷,是LVM的逻辑存储块,与磁盘分区是逻辑对应关系。

VG:卷组,是LVM的逻辑概念上的磁盘设备,由一个或多个物理卷组合形成。(物理的磁盘分区)

PE:物理长度,是逻辑上的最小存储单元,默认是 4MB。PE是将物理卷组合为卷组后,所划分的最小存储单元。

LE:LV上的最小存储单元,与PE大小对应。

LV:逻辑卷,物理意义上的分区。逻辑卷上可以建立文件系统(/home或/usr等)。

二、LVM 管理命令:

1、PV想关命令

​ pvcreate:创建PV(一个物理卷组)

[root@localhost ~]# pvcreate  /dev/sdb1 /dev/sdb2
  Physical volume "/dev/sdb1" successfully created
  Physical volume "/dev/sdb2" successfully created

​ pvs:查看PV信息

​ pvdisplay:查看PV的详细信息

​ pvremove:移除物理卷

[root@localhost ~]# pvremove /dev/sdb1 /dev/sdb2
  Labels on physical volume "/dev/sdb1" successfully wiped
  Labels on physical volume "/dev/sdb2" successfully wiped

​ pvscan:列出系统中的物理卷

       -e:仅显示属于卷组的物理卷

       -n:仅显示不属于任何卷组的物理卷

       -s:短格式输出

       -u:显示UiD

[root@localhost ~]# pvscan
  PV /dev/sdb1                      lvm2 [1.01 GiB]
  PV /dev/sdb2                      lvm2 [1.01 GiB]
  Total: 2 [2.02 GiB] / in use: 0 [0   ] / in no VG: 2 [2.02 GiB]

       pvmove:移除物理卷中的PE,即将硬盘上的数据移动到其他硬盘上(将原本PV上的数据移动到其他的PV上)。此命令存在的前提条件是LVM创建成功,可用于VG的缩减

2、vg相关命令:卷组

vgcreate:创建卷组

       vgcreate 创建卷组的名称 /dev/sd{c,d,e}

       -s:指定PE的大小

             vgcreate -s 8M vgname /dev/device

[root@localhost ~]# vgcreate  myvg /dev/sdb1 /dev/sdb2
  Volume group "myvg" successfully created
[root@localhost ~]# vgcreate -s 8M  myvg /dev/sdb1 /dev/sdb2
  Volume group "myvg" successfully created

vgextend:将物理卷添加到卷组中

       vgesxtend vgname pvname

vgreduce:删除卷组中的物理卷,缩减

[root@localhost ~]# vgreduce  myvg  /dev/sdb3

vgremove:删除卷组

       vgremove vgname

[root@localhost ~]# vgremove myvg
  Volume group "myvg" successfully removed

vgs:查看卷组

vgdisply:查看卷组的详细信息

vgrename:更改卷组名称

vgchange:改变卷组的工作状态

3、lv的相关命令

lvcreate:创建逻辑卷

       -n:指定逻辑卷名称

       -L:指定逻辑卷大小,以空间大小指定(小于卷组)

                   数字:表示绝对容量

                   +数字:新增容量(增量)

       -l:指定逻辑卷大小,是以 PE 为单位进行指定

       -s:指定创建逻辑卷快照

                   lvcreate -s -n 快照名 -L 大小 创建快照的逻辑卷 -p r

       -p:设置属性

                    r:只读属性

lvextend:扩展逻辑卷标大小

       resize2fs :给新增的 lv(逻辑卷)创建文件系统

lvreduce:缩减逻辑卷大小

lvs:查看信息

lvdisplay:查看LV的详细信息

lvrename:修改逻辑卷名称

lvremove:删除

lvconvert:恢复快照

       lvconvert --merge 快照路径

三、创建 LVM:

创建逻辑卷详细步骤:
1、分区

2、下载包
yum install lvm2

3、创建物理卷组pv
[root@localhost ~]# pvcreate /dev/sdb1 /dev/sdb2
  Physical volume "/dev/sdb1" successfully created.
  Physical volume "/dev/sdb2" successfully created.
[root@localhost ~]# pvs

4、创建卷组vg
[root@localhost ~]# vgcreate -s 10M myvg /dev/sdb1 /dev/sdb2
  Volume group "myvg" successfully created
[root@localhost ~]# vgs

5、创建逻辑卷lv
[root@localhost ~]# lvcreate -L 300M -n mylv myvg
  Logical volume "mylv" created.
[root@localhost ~]# lvs
[root@localhost ~]# lvscan
  ACTIVE            '/dev/myvg/mylv'  [1.49 GiB] inherit

6、格式化
[root@localhost ~]# mkfs.ext4 /dev/myvg/mylv

7、挂载
[root@localhost ~]# mkdir /tmp/mylv
[root@localhost ~]# mount /dev/myvg/mylv /tmp/mylv/

8、查看
[root@localhost ~]# df -h
/dev/mapper/myvg-mylv    283M  2.1M  262M   1% /tmp/mylv

四、vg 扩大和缩减:

//扩大vg
[root@localhost ~]# vgextend myvg /dev/sdb3
  Physical volume "/dev/sdb3" successfully created.
  Volume group "myvg" successfully extended
[root@localhost ~]# vgs

//减少vg
[root@localhost ~]# pvs
  PV         VG   Fmt  Attr PSize PFree
  /dev/sdb1  myvg lvm2 a--u 1.01g 8.00m
  /dev/sdb2  myvg lvm2 a--u 1.01g 1.01g
  /dev/sdb4  myvg lvm2 a--u 1.95g 1.95g

[root@localhost ~]# dd if=/dev/zero of=/mnt/mylv1/file bs=1M count=20
记录了20+0 的读入
记录了20+0 的写出
20971520字节(21 MB)已复制,0.159131 秒,132 MB/秒

[root@localhost ~]# pvs
  PV         VG   Fmt  Attr PSize PFree
  /dev/sdb1  myvg lvm2 a--u 1.01g 8.00m
  /dev/sdb2  myvg lvm2 a--u 1.01g 1.01g
  /dev/sdb4  myvg lvm2 a--u 1.95g 1.95g

[root@localhost ~]# pvmove /dev/sdb1
  /dev/sdb1: Moved: 1.6%
  /dev/sdb1: Moved: 76.6%
  /dev/sdb1: Moved: 100.0%
## 将数据移动到其他PV上

[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   1   0 wz--n- 2.96g 1.96g
## 将/dev/sdb1从myvg卷组中删除

五、lv 逻辑卷扩容:

保证有LV,拉伸LV,对文件系统进行拉伸

[root@localhost mylv]# lvextend -L +500M /dev/myvg/mylv
  Size of logical volume myvg/mylv changed from 500.00 MiB (50 extents) to 1000.00 MiB (100 extents).
  Logical volume myvg/mylv successfully resized.

[root@localhost mylv]# df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/myvg-mylv    477M  2.3M  445M   1% /tmp/mylv
## 虽然LV进行了扩容,但挂载磁盘大小依旧是477M,我们还需要给新增的LV创建文件系统,这样系统才能识别到。

[root@localhost ~]# resize2fs /dev/myvg/mylv
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/myvg/mylv is mounted on /tmp/mylv; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 13
The filesystem on /dev/myvg/mylv is now 1646592 blocks long.

[root@localhost ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/myvg-mylv    1.6G  2.7M  1.5G   1% /tmp/mylv

六、lv 缩减操作:

一定按照下面步骤一步步进行,一步错、步步错。

1、卸载逻辑卷

2、检查逻辑卷空间,使用 e2fsck 命令,

​ -f:强制执行检测

3、使用 resize2fs 命令,将文件系统大小缩减

4、使用 lvreduce 缩减逻辑卷大小

1、卸载逻辑卷
[root@localhost /]# umount /dev/myvg/mylv
[root@localhost /]# df -h

2、查看文件系统的大小,方便下面缩减计算
[root@localhost ~]# lvs 
  LV   VG     Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root centos -wi-ao---- <18.51g                                                 
  swap centos -wi-ao----   1.00g                                                 
  mylv myvg   -wi-a----- 800.00m   

3、检测逻辑卷空间
[root@localhost /]# e2fsck -f /dev/myvg/mylv	
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/mylv: 11/254000 files (0.0% non-contiguous), 42817/1024000 blocks

4、缩减文件系统大小
[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.

5、缩减逻辑卷大小
[root@localhost ~]# lvreduce -L 700M /dev/myvg/mylv		
  Rounding size to boundary between physical extents: 704.00 MiB.
  WARNING: Reducing active logical volume to 704.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 800.00 MiB (100 extents) to 704.00 MiB (88 extents).
  Logical volume myvg/mylv successfully resized.

6、查看逻辑卷的大小是否改变
[root@localhost ~]# lvs
  LV   VG     Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root centos -wi-ao---- <18.51g                                                 
  swap centos -wi-ao----   1.00g                                                 
  mylv myvg   -wi-ao---- 704.00m           
  
7、挂载使用
[root@localhost /]# mount /dev/myvg/mylv /tmp/mylv		

[root@localhost ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/myvg-mylv    481M  2.3M  454M   1% /tmp/mylv

注意:

       1、逻辑卷大小 >= 文件系统,可以用;逻辑卷大小 < 文件系统大小,数据会出问题。而当逻辑卷 > 文件系统时,由于部分区域未格式化成文件系统会造成空间的浪费。

       2、lvs命令查找到的是逻辑卷的大小;

              df -h:挂在后使用该命令,查到的是文件系统的大小

       3、在执行第5步的 lvreduce -L 参数,最好不要写减多少M 。因为PE计算时,存在数值差距。(eg:源文件系统大小800M,后将文件系统大小改为500M,此处执行lvreduce -L -300M,然后PE进行操作,逻辑卷大小本应是800-300=500M,但PE在运算后逻辑卷大小可能是499M(甚至更小),小于文件系统500M大小,(逻辑卷小于文件系统的大小)然后你再进行重新挂载时就会出现错误。)

       4、PE运算:

             以例题讲解:

       PE大小 8Mib,当文件系统大小为 100M 时,100/8 约等于12点多,有小数,所以PE将其按13进行运算,此时逻辑卷大小实际为13*8=104M。

       设定文件系统50M,PE大小依旧为 8Mib,50/8=7,需占用 8*7=56M空间,所以逻辑卷104-56=48M,48<56不能用了。

七、删除逻辑卷:

1、先通过 umount 命令卸载掉逻辑卷

2、修改 /etc/fstab 里面逻辑卷的挂载信息(如有添加)否则系统有可能启动不起来。

3、通过 lvremove 删除逻辑卷

4、通过 vgremove 删除卷组

5、通过 pvremove 将物理卷转化成普通分区。

[root@localhost /]# umount /dev/myvg/mylv

[root@localhost /]# lvremove /dev/myvg/mylv

[root@localhost /]# vgcreate myvg

[root@localhost /]# vgcreate /dev/myvg

[root@localhost /]# vgremove /dev/myvg

[root@localhost /]# pvremove /dev/sdb1 /dev/sdb2

八、制作快照步骤:

       Ivm快照有多种实现方法,其中一种是COW (Copy-On-Write) ,不用停止服务或将逻辑卷设为只读就可以进行备份,当一个snapshot创建的时候只是拷贝原始卷里的元数据,而不是物理上的数据,所以snapshot的创建特别快。原始卷写入数据snapshot记录哪些数据发生变化,并备份旧数据,当恢复的时候就可以把旧数据恢复到对应位置。

​ 注意三点:
​ 1、VG中需要预留存放快照本身的空间,不能全部被占满。
​ 2、快照所在的VG必须与被备份的LV相司,也就是说,快照存放的位置必须与被照卷存放在同个VG上。否则快照会失败。
​ 3、如果快照卷满了,则会自动失效,因为快照区记录的是数据变化前的数据,也就是说数据的修改量不能超过快照区的大小,否则这个快照就不能用了。

## 创建快照
[root@localhost ~]# lvcreate -L 20M -s -n mysnop /dev/myvg/mylv
  Logical volume "mysnop" created.

## 查看lv
[root@localhost ~]# lvdisplay
 --- Logical volume ---
  LV Path                /dev/myvg/mysnop
  LV Name                mysnop
  VG Name                myvg
  LV UUID                kodJE7-tcp8-l2u6-jAHq-Yvca-ZCKy-DTA2VM
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2019-08-10 23:18:23 +0800
  LV snapshot status     active destination for mylv
  LV Status              available
  # open                 0
  LV Size                500.00 MiB
  Current LE             50
  COW-table size         20.00 MiB  (#快照实际容量)
  COW-table LE           2
  Allocated to snapshot  0.00%	(#快照已使用百分比)
  Snapshot chunk size    4.00 KiB
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:5

## 删除快照
[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、分区
[root@localhost ~]# fdisk /dev/sdb
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     2099199     1048576   83  Linux
/dev/sdb2         2099200     4196351     1048576   83  Linux
/dev/sdb3         4196352     6293503     1048576   83  Linux
/dev/sdb4         6293504    10485759     2096128   83  Linux

2、创建物理卷
[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/sda2  centos lvm2 a--  12.00g 4.00m
  /dev/sdb1         lvm2 ---   1.00g 1.00g
  /dev/sdb2         lvm2 ---   1.00g 1.00g

3、创建卷组
[root@localhost ~]# vgcreate myvg /dev/sdb1 /dev/sdb2
  Volume group "myvg" successfully created
[root@localhost ~]# vgs
  VG     #PV #LV #SN Attr   VSize  VFree
  centos   1   2   0 wz--n- 12.00g 4.00m
  myvg     2   0   0 wz--n-  1.99g 1.99g
[root@localhost ~]# vgdisplay

4、创建逻辑卷
[root@localhost ~]# lvcreate -L 300M -n mylv myvg
  Logical volume "mylv" created.
[root@localhost ~]# lvs
  LV   VG     Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root centos -wi-ao----  10.00g                                                
  swap centos -wi-ao----   2.00g                                                
  mylv myvg   -wi-a----- 300.00m                                                
[root@localhost ~]# lvdisplay
 
5、格式化
[root@localhost ~]# mkfs.ext4 /dev/myvg/mylv

6、挂载
[root@localhost ~]# mkdir /tmp/mylv
[root@localhost ~]# mount /dev/myvg/mylv /tmp/mylv/
[root@localhost ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/myvg-mylv    283M  2.1M  262M   1% /tmp/mylv

7、进入逻辑卷挂载的路径下,并创建文件写入数据
[root@localhost ~]# cd /tmp/mylv/
[root@localhost mylv]# ls
lost+found
[root@localhost mylv]# echo "hello" > mysnop_file
[root@localhost mylv]# cat mysnop_file
hello
[root@localhost mylv]# ls
lost+found  mysnop_file

8、创建快照
[root@localhost mylv]# lvcreate -L 20M -s -n mysnop /dev/myvg/mylv
  Logical volume "mysnop" created.

[root@localhost mylv]# lvdisplay | grep %
  Allocated to snapshot  0.06%

[root@localhost mylv]# ll
total 14
drwx------. 2 root root 12288 Aug 12 22:17 lost+found
-rw-r--r--. 1 root root     6 Aug 12 22:18 mysnop_file

9、再次创建文件
[root@localhost mylv]# echo "hello" > mysnop_file1
[root@localhost mylv]# ls
lost+found  mysnop_file  mysnop_file1

10、退出当前目录,卸载逻辑卷
[root@localhost mylv]# cd ..
[root@localhost mylv]# umount /dev/myvg/mylv

11、恢复快照
[root@localhost tmp]# lvconvert --merge /dev/myvg/mysnop
  Merging of volume myvg/mysnop started.
  myvg/mylv: Merged: 100.00%
  
12、重新挂载逻辑卷,进入挂载目录下查看
[root@localhost ~]# mount /dev/myvg/mylv /tmp/mylv/

[root@localhost ~]# cd /tmp/mylv/

[root@localhost mylv]# ls
lost+found  mysnop_file

## 此时,原始卷的数据就恢复到备份前的状态

你可能感兴趣的:(实践类)