LVM详解及创建过程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LVM详解及创建过程相关的知识,希望对你有一定的参考价值。

参考技术A vg可以由多个pv在组成,如果随着时间的推移vg不够用了,就可增加一些pv到vg里面。如果vg太大,感觉用不完浪费掉了,就可以减少一些pv,并保证里面数据不会受到影响。

Vg和lv:vg可以近似看成计算机上的一个完整的硬盘,把vg划分成多个lv的过程类似于把计算机的一个硬盘划分成多个分区的过程,同样lv也像硬盘分区那样格式化后才能使用。

如果非要拿硬盘和LVM作比较的话,拿我的计算机来说,vg相当于硬盘/dev/sda,lv相当于/dev/sda1,/dev/sda2,/dev/sda3等,lv一般也要格式化后才能使用。

Lv:如果lv里的数据增多,lv的空间不够用了,vg就可以增加一些空间给lv,如果空间太多就给lv缩减空间。前面提到的pe,就是lv的基本组成单元,假如一个pe大小为4M,如果要创建一个4G的lv,vg就会分1000个pe给lv。如果后来lv的空间最多使用量不足2G,为了节省磁盘,vg就从lv取下500个pe,这样就可以节省2G空间了,并且不会损坏原有数据。

优点:调整分区十分快捷方便,随意增减分区大小而对数据几乎不产生影响.

缺点:如果碰上百年不遇的霉运,数据损坏,想要找回数据却极为困难.

dm:device mapper将底层块设备组织成一个逻辑设备模块

像扩展分区,不能直接格式化使用,必须化分成lv才能格式化使用pe默认4M,一个lv是一个文件系统

Lv设备路径:

Lv设备路径有两种表达方式

以我的电脑举例就分别是:

testvg是我的电脑的一个vg名字,testlv是testvg上的一个lv,也是一个独立文件系统。

命令详解:

pvdisplay:查看所有pv的详细信息。后可加设备名查看某个pv的详细信息

扩展逻辑卷:注意,要先扩展物理边界再扩展逻辑边界

扩展lv物理边界为5G(给lv增加pe数量),+3G表示在原来基础上增加3G

缩减逻辑卷lvreduce 注意,要先缩减逻辑边界再缩减物理边界

原理:

正常备份数据的时候数据不能发生变化,否则备份出来的数据的是不完整的。但对于1T的数据做备份需要半个小时以上,这期间数据很难保持不变,为了解决这个问题,快照卷应运而生。

快照是在一瞬间记录下要备份的内容的元数据,然后监控这些元数据,如果元数据即将发生变化,就把将要变化的内容备份到快照里面,这样,快照里就存储着变化前的数据的备份。

快照和原文件应该属于同一个卷组vg,通过快照访问未变化的数据时,就像通过一个硬链接直接进入原文件访问。所以创建快照卷时不用格式化。

-s指明创建的是快照卷,-L指明快照卷大小,-n指明快照卷的名字,-p权限 最后面指定是谁的快照

1、创建一个至少有两个pv组成的大小为20G的名为testvg,要求PE大小为16M

然后在卷组中创建大小为5G的逻辑卷testlv挂在至/users下

2、新建用户archlinux,要求家目录为/users/archlinux,然后用archlinux用户,复制/etc/pam.d至自己家目录

3、扩展testlv至7G,要求archlinux用户文件不能丢失

4、收缩至3G,文件不能丢失

5、对testlv创建快照,基于快照备份数据,验证快照功能

dd命令比较底层,比cp效率更高

用于磁盘拷贝:

备份MBR:

破坏MBR中的bootloader:

link

Linux —— 1.5万字详解LVM逻辑卷管理

文章目录


一、逻辑卷管理

1. LVM介绍

逻辑卷(LVM):它是Linux环境下对磁盘分区进行管理的一种机制,它是建立在物理存储设备之上的一个抽象层,优点在于灵活管理。

特点:

  1. 动态在线扩容(关键)
  2. 离线裁剪
  3. 数据条带化
  4. 数据镜像

2. LVM基本概念

真实的物理设备创建过程

  1. 逻辑上(命令创建)
  2. 物理卷(pv)
  3. 卷组(vg)
  4. 逻辑卷(lv)
  5. 逻辑卷格式化
  6. 最后挂载使用

  • 物理卷(Physical Volume,PV)
    物理卷是底层真正提供容量,存放数据的设备,它可以是整个硬盘、硬盘上的分区等。

  • 卷组(Volume Group, VG)
    卷组建立在物理卷之上,它由一个或多个物理卷组成。即把物理卷整合起来提供容量分配。
    一个LVM系统中可以只有一个卷组,也可以包含多个卷组。

  • 逻辑卷(Logical Volume, LV)
    逻辑卷建立在卷组之上,它是从卷组中“切出”的一块空间。它是最终用户使用的逻辑设备。逻辑卷创建之后,其大小可以伸缩

  • 物理区域 PE(physical extent)
    每一个物理卷被划分为称为PE(Physical Extents)的基本单元,具有唯一编号的PE是能被LVM寻址的最小单元。PE的大小可指定,默认为4 MB。 PE的大小一旦确定将不能改变,同一个卷组中的所有物理卷的PE的大小是一致的。
    4MB=4096kb=4096kb/4kb=1024个block

注意:

  1. 硬盘读取数据最小单位1个扇区512字节
  2. 操作读取数据最小单位1个数据块=8*512字节=4096字节=4KB
  3. lvm寻址最小单位1个PE=4MB
  • 逻辑区域 LE(logical extent)
    逻辑卷也被划分为被称为LE(Logical Extents) 的可被寻址的基本单位。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。

二、逻辑卷LVM应用

1.逻辑卷创建

创建过程:

  1. 准备物理设备磁盘
  2. 将物理设备做成物理卷
  3. 创建卷组并将物理卷加入其中
  4. 创建逻辑卷
  5. 格式化逻辑卷
  6. 挂载使用

1)准备物理设备

fdisk对磁盘进行分区

sdb               8:16   0   10G  0 disk 
├─sdb1            8:17   0    2G  0 part 
├─sdb2            8:18   0    2G  0 part 
├─sdb3            8:19   0    1K  0 part 
├─sdb5            8:21   0    2G  0 part 
├─sdb6            8:22   0    2G  0 part 
└─sdb7            8:23   0    2G  0 part 

2)创建物理卷(pvcreate)

通过pvcreate命令来创建物理卷

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

通过pvs查看物理卷,详细查看pvdisplay [设备]

[root@lamp ~]# pvs
  PV         VG     Fmt  Attr PSize   PFree
  /dev/sda2  centos lvm2 a--  <19.00g    0 
  /dev/sdb1         lvm2 ---    2.00g 2.00g
  /dev/sdb2         lvm2 ---    2.00g 2.00g
# 详细查看
[root@lamp ~]# pvdisplay /dev/sdb1
  "/dev/sdb1" is a new physical volume of "2.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb1
  VG Name               
  PV Size               2.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               6nfyXO-5VFf-Wh8H-vu3r-byxX-4AIa-mSNrYP

3)创建卷组并将物理卷加入其中(vgcreate )

创建卷组命令:vgcreate [卷组名] [物理卷路径]

[root@lamp ~]# vgcreate vg01 /dev/sdb1 /dev/sdb2
  Volume group "vg01" successfully created

查看卷组信息命令:vgs,详细查看vgdisplay
那么卷组VG的大小就等于sdb1+sdb2

[root@lamp ~]# vgs vg01
  VG   #PV #LV #SN Attr   VSize VFree
  vg01   2   0   0 wz--n- 3.99g 3.99g
[root@lamp ~]# vgdisplay vg01
  --- Volume group ---
  VG Name               vg01
  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               3.99 GiB
  PE Size               4.00 MiB
  Total PE              1022
  Alloc PE / Size       0 / 0   
  Free  PE / Size       1022 / 3.99 GiB
  VG UUID               cfaFGf-tB6g-IYgK-SVPc-JWeE-Uom8-Rk6CJ

4)创建逻辑卷(lvcreate)

使用lvcreate创建逻辑卷
命令:lvcreate -n [逻辑卷名] -L [逻辑卷大小] [指定从哪个卷组创建]
常用选项:

  • -n:指定逻辑卷名字
  • -L:指定逻辑卷大小
  • -l:通过PF或者百分比指定逻辑卷大小

注意:逻辑卷的大小不能超过卷组的大小

[root@lamp ~]# vgs vg01
  VG   #PV #LV #SN Attr   VSize VFree
  vg01   2   0   0 wz--n- 3.99g 3.99g
[root@lamp ~]# lvcreate -n lv01 -L 2.5G vg01
  Logical volume "lv01" created.
[root@lamp ~]# vgs vg01
  VG   #PV #LV #SN Attr   VSize VFree
  vg01   2   1   0 wz--n- 3.99g 1.49g

在操作系统层面映射两个地方:

[root@lamp ~]# ll /dev/mapper/vg01-lv01 
lrwxrwxrwx 1 root root 7 Jul 24 17:06 /dev/mapper/vg01-lv01 -> ../dm-2
[root@lamp ~]# ll /dev/vg01/lv01
lrwxrwxrwx 1 root root 7 Jul 24 17:06 /dev/vg01/lv01 -> ../dm-2

查看逻辑卷信息:
通过命令:lvdisplay [逻辑卷完整路径]

[root@lamp ~]# lvdisplay /dev/vg01/lv01
  --- Logical volume ---
  LV Path                /dev/vg01/lv01
  LV Name                lv01
  VG Name                vg01
  LV UUID                9z7lEI-L2eP-MlLd-c3rv-t1z9-2Zc9-K3rCng
  LV Write Access        read/write
  LV Creation host, time lamp, 2022-07-24 17:06:22 +0800
  LV Status              available
  # open                 0
  LV Size                2.50 GiB
  Current LE             640
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:2

示例:创建大小为200M的逻辑卷lv02;每个PE为4M,-l100指定100个PE,大小为400M

[root@lamp ~]# lvcreate -n lv02 -l100 vg01
  Logical volume "lv02" created.
# 一个
[root@lamp ~]# lvs /dev/vg01/lv02
  LV   VG   Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv02 vg01 -wi-a----- 400.00m

示例:

创建大小为剩余卷组vg01空间的50%的逻辑卷lv03
当前卷组大小为1.1G,50%就是564M左右

通过-l50%free选项指定大小为卷组的50%大小

[root@lamp ~]# vgs vg01
  VG   #PV #LV #SN Attr   VSize VFree
  vg01   2   2   0 wz--n- 3.99g 1.10g
[root@lamp ~]# lvcreate -n lv03 -l50%free vg01
  Logical volume "lv03" created.

[root@lamp ~]# lvs /dev/vg01/lv03
  LV   VG   Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv03 vg01 -wi-a----- 564.00m                                                    

5)格式化逻辑卷(mkfs)

命令:mkfs.[类型] [逻辑卷完整路径]

[root@lamp ~]# mkfs.xfs /dev/vg01/lv01
meta-data=/dev/vg01/lv01         isize=512    agcount=4, agsize=163840 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=655360, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@lamp ~]# blkid /dev/vg01/lv01
# 通过 blkid查看设备有信息说明查看成功
/dev/vg01/lv01: UUID="6e86c1ba-d4fb-4d32-a5b7-8a4b2164eba9" TYPE="xfs"

6)挂载使用

创建一个挂载点(目录)

[root@lamp ~]# mkdir /u01
[root@lamp ~]# mount /dev/vg01/lv01 /u01
[root@lamp ~]# lsblk

sdb               8:16   0   10G  0 disk 
├─sdb1            8:17   0    2G  0 part 
│ └─vg01-lv01   253:2    0  2.5G  0 lvm  /u01
├─sdb2            8:18   0    2G  0 part 
│ ├─vg01-lv01   253:2    0  2.5G  0 lvm  /u01
│ ├─vg01-lv02   253:3    0  400M  0 lvm  
│ └─vg01-lv03   253:4    0  564M  0 lvm  
├─sdb3            8:19   0    1K  0 part 
├─sdb5            8:21   0    2G  0 part 
├─sdb6            8:22   0    2G  0 part 
└─sdb7            8:23   0    2G  0 part 
sr0              11:0    1  4.3G  0 rom 

2. 逻辑卷动态扩容

示例:将/u01目录动态扩容到4G
思路:

  1. 查看/u01目录所对应的逻辑卷是哪一个
  2. 查看当前逻辑卷所在的卷组vg01剩余空间是否足够
  3. 如果vg01空间不够,得先扩容卷组,再扩容逻辑卷
  4. 如果vg01空间足够,直接扩容逻辑卷

1)查看目录属于哪个卷组

通过命令查看目录/u1属于哪个卷组

[root@lamp ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/vg01-lv01    2.5G   33M  2.5G   2% /u01

[root@lamp ~]# lvs /dev/vg01/lv01
  LV   VG   Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv01 vg01 -wi-ao---- 2.50g 

2)查看卷组剩余空间

vg01的卷组空间已经不足我扩容2G

[root@lamp ~]# vgs
  VG     #PV #LV #SN Attr   VSize   VFree  
  vg01     2   3   0 wz--n-   3.99g 564.00m

3)扩容逻辑卷所在卷组

[root@lamp ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sdb               8:16   0   10G  0 disk 
├─sdb1            8:17   0    2G  0 part 
│ └─vg01-lv01   253:2    0  2.5G  0 lvm  /u01
├─sdb2            8:18   0    2G  0 part 
│ ├─vg01-lv01   253:2    0  2.5G  0 lvm  /u01
│ ├─vg01-lv02   253:3    0  400M  0 lvm  
│ └─vg01-lv03   253:4    0  564M  0 lvm  
├─sdb3            8:19   0    1K  0 part 
├─sdb5            8:21   0    2G  0 part 
├─sdb6            8:22   0    2G  0 part 
└─sdb7            8:23   0    2G  0 part 

把扩展分区sdb3下的sdb5做成物理卷(PV)

[root@lamp ~]# pvcreate /dev/sdb5
  Physical volume "/dev/sdb5" successfully created.
[root@lamp ~]# pvs
  PV         VG     Fmt  Attr PSize   PFree  
  /dev/sdb1  vg01   lvm2 a--   <2.00g      0 
  /dev/sdb2  vg01   lvm2 a--   <2.00g 564.00m
  /dev/sdb5         lvm2 ---    2.00g   2.00g
[root@lamp ~]# 

将物理卷加入到卷组中(卷组扩容 vgextend )

vgextend 命令实现卷组扩容

[root@lamp ~]# vgextend vg01 /dev/sdb5
  Volume group "vg01" successfully extended
[root@lamp ~]# pvs
  PV         VG     Fmt  Attr PSize   PFree  
  /dev/sda2  centos lvm2 a--  <19.00g      0 
  /dev/sdb1  vg01   lvm2 a--   <2.00g      0 
  /dev/sdb2  vg01   lvm2 a--   <2.00g 564.00m
  /dev/sdb5  vg01   lvm2 a--   <2.00g  <2.00g

注意:
正常情况下,应该先将/dev/sdb5物理设备创建为物理卷再加入到卷组中;如果直接加入卷组,系统会自动帮你将其做成物理卷

4)扩容逻辑卷(lvextend)

从2.5G扩容到4G
lvextend -L 4G /dev/vg01/lv01

  • -L:表示扩容到4G
    等价于 lvextend -L +1.5G /dev/vg01/lv01
[root@lamp ~]# lvs /dev/vg01/lv01
  LV   VG   Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv01 vg01 -wi-ao---- 2.50g                                                    
[root@lamp ~]# lvextend -L 4G /dev/vg01/lv01
  Size of logical volume vg01/lv01 changed from 2.50 GiB (640 extents) to 4.00 GiB (1024 extents).
  Logical volume vg01/lv01 successfully resized.
[root@lamp ~]# lvs /dev/vg01/lv01
  LV   VG   Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv01 vg01 -wi-ao---- 4.00g

但是检查发现实际容量并没有改变

[root@lamp ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/vg01-lv01    2.5G   33M  2.5G   2% /u01

5)同步文件系统(resize2fs)

先查看文件系统类型

[root@lamp ~]# mount | grep lv01
/dev/mapper/vg01-lv01 on /u01 type xfs (rw,relatime,attr2,inode64,noquota)

如果是ext4就用:resize2fs [逻辑卷路径]同步文件系统
如果是xfs就用:xfs_growfs [逻辑卷路径]同步文件系统

[root@lamp ~]# xfs_growfs /dev/vg01/lv01
meta-data=/dev/mapper/vg01-lv01  isize=512    agcount=4, agsize=163840 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=655360, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 655360 to 1048576

# 同步之后就 正常了
[root@lamp ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/vg01-lv01    4.0G   33M  4.0G   1% /u01

三、逻辑卷相关命令(增、删、改)

1. 创建卷

创建物理卷:pvcreate
pvcreate /dev/sdb1
创建卷组:vgcreate
vgcreate vg01 /de/sdb1
创建逻辑卷:lvcreate		
lvcreate -n lv01 -L 1G vg01 # 指定为1G
lvcreate -n lv01 -l 100 vg01 # 指定为100*PE大小
lvcreate -n lv01 -l 100%free vg01 #指定为卷组剩余大小

2. 删除卷

删除逻辑卷:lvremove
lvremove /dev/vg01/lv01
删除卷组:vgremove
vgremove vg01
说明:卷组里的物理卷没有被使用才可以直接删除卷组
删除物理卷:pvremove 
pvremove /dev/sdb1

3. 扩容组

扩容卷组:vgextend
vgextend vg01 /dev/sdb2
扩容逻辑卷:lvextend
lvextend /dev/vg01/lv01 -L +2G
同步文件系统:
resize2fs /dev/vg01/lv01

四、逻辑卷实现条带化

1. 什么是条带化?

把保存到逻辑卷的数据分成n等分,分别写到不同的物理卷,可以提高数据的读写效率;这就是条带化。
如果任何一个涉及到的物理卷出现故障,数据都会无法恢复。

2.实现条带化

准备好一个磁盘,两个分区

sdc               8:32   0   20G  0 disk 
├─sdc1            8:33   0    2G  0 part 
└─sdc2            8:34   0    2G  0 part

1)创建物理卷

把sdc1和sdc2都创建为物理卷
命令:pvcreate /dev/sdc[12]

[root@lamp ~]# pvcreate /dev/sdc[12]
  Physical volume "/dev/sdc1" successfully created.
  Physical volume "/dev/sdc2" successfully created.
[root@lamp ~]# pvs
  PV         VG     Fmt  Attr PSize   PFree  
  /dev/sdc1         lvm2 ---    2.00g   2.00g
  /dev/sdc2         lvm2 ---    2.00g   2.00g

2)创建卷组

创建卷组名为vg02,并把物理卷sdc1和sdc2加入到卷组中
命令:vgcreate vg02 /dev/sdc[12]

[root@lamp ~]# vgcreate vg02 /dev/sdc[12]
  Volume group "vg02" successfully created
[root@lamp ~]# pvs /dev/sdc[12]
  PV         VG   Fmt  Attr PSize  PFree 
  /dev/sdc1  vg02 lvm2 a--  <2.00g <2.00g
  /dev/sdc2  vg02 lvm2 a--  <2.00g <2.00g

3)创建实现条带化的逻辑卷

命令:lvcreate -n lv01 -L 1G vg02 -i 2 /dev/sdc1 /dev/sdc2

  • -i:给出条带化的数量
    在卷组vg02中创建一个名为lv01的逻辑卷,这个逻辑卷有条带化功能,分别把数据分成2等份分别写到sdc1sdc2
[root@lamp ~]# lvcreate -n lv01 -L 1G vg02 -i 2 /dev/sdc1 /dev/sdc2
  Using default stripesize 64.00 KiB.
  Logical volume "lv01" created.
# lv01逻辑卷大小为1G                                                 
[root@lamp ~]# lvs /dev/vg02/lv01
  LV   VG   Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv01 vg02 -wi-a----- 1.00g

可以看到sdc1sdc2都少了500M的空间,也就是各自分配了500M给lv01逻辑卷

[root@lamp ~]# pvs /dev/sdc[12]
  PV         VG   Fmt  Attr PSize  PFree 
  /dev/sdc1  vg02 lvm2 a--  <2.00g <1.50g
  /dev/sdc2  vg02 lvm2 a--  <2.00g <1.50g

4)格式化挂载使用

[root@lamp ~]# mkfs.xfs /dev/vg02/lv01

[root@lamp ~]# mount /dev/vg02/lv01 /u2

测试
iostat命令可以监控磁盘的使用情况
安装:yum -y install sysstat

使用iostat命令监控:iostat -m -d /dev/sdc[12] 2

  • -d:查看磁盘
  • -m:什么速度显示,每M秒
  • 2:每隔2秒显示
  • 还可以在接一个数字参数,表示显示几次

模拟写数据,往lv01的挂载目录/u2写1000M的数据
命令:dd if=/dev/zero of=/u2/test bs=1M count=1000


可以看到sdc1sdc2各自用了500M

[root@lamp ~]# pvs /dev/sdc[12]
  PV         VG   Fmt  Attr PSize  PFree 
  /dev/sdc1  vg02 lvm2 a--  <2.00g <1.50g
  /dev/sdc2  vg02 lvm2 a--  <2.00g <1.50g

五、逻辑卷实现镜像

对某个逻辑卷的数据做镜像,起到数据备份的作用
当前环境

├─sdc5            8:37   0    3G  0 part 
└─sdc6            8:38   0    3G  0 part

1. 创建物理卷

[root@lamp ~]# pvcreate /dev/sdc[56]
[root@lamp ~]# pvs /dev/sdc[56]
  PV         VG Fmt  Attr PSize PFree
  /dev/sdc5     lvm2 ---  3.00g 3.00g
  /dev/sdc6     lvm2 ---  3.00g 3.00g

2. 将物理卷加入到卷组

[root@lamp ~]# vgextend vg02 /dev/sdc[56]
  Volume group "vg02" successfully extended

[root@lamp ~]# vgs vg02
  VG   #PV #LV #SN Attr   VSize  VFree 
  vg02   6   1   0 wz--n- 13.97g 12.97g


3. 创建实现镜像的逻辑卷

[root@lamp ~]# lvcreate -n lv02 -L 2G vg02 -m 1 /dev/sdc[56]
  Logical volume "lv02" created.

-m:给出镜像个数,1表示1个镜像

创建2G镜像逻辑卷后,sdc5和sdc6各自少了2G

[root@lamp ~]# pvs /dev/sdc[56]
  PV         VG   Fmt  Attr PSize  PFree   
  /dev/sdc5  vg02 lvm2 a--  <3.00g 1016.00m
  /dev/sdc6  vg02 lvm2 a--  <3.00g 1016.00m

4. 格式化,挂载使用

[root@lamp ~]# mkfs.xfs /dev/vg02/lv02
[root@lamp u2]# mount /dev/mapper/vg02-lv02 /u2

/u2:目录创建文件

[root@lamp u2]# touch /u2/file1..4
[root@lamp u2]# mkdir /u2/dir1..4

5. 测试验证

损坏一个磁盘(sdc5),测试数据是否在第二个物理卷中

[root@lamp u2]# dd if=/dev/zero of=/dev/sdc5 bs=1M count=100

再次查看物理卷发现有一个unknown Device

[root@lamp u2]# pvs
/dev/sdc6  vg02   lvm2 a--   <3.00g 1016.00m
  [unknown]  vg02   lvm2 a-m   <3.00g 1016.00m

将损坏的磁盘从卷组中移除
命令:vgreduce vg02 --removemissing --force
vg02卷组中损坏的磁盘移除,也就是损坏的sdc5

再次查看挂载点/u2数据依然存在

[root@lamp u2]# ls
dir1  dir2  dir3  dir4  file1  file2  file3  file4

六、逻辑卷快照

注意:挂载快照,尽量使用ro的方式,将不会破坏快照卷中的数据

1. 创建挂载快照

给vg02卷组下的的逻辑卷lv02创建快照

[root@lamp u2]# lvcreate -L 128M -s -n lv02_snap /dev/vg02/lv02
  Logical volume "lv02_snap" created.
  
[root@lamp u2]# lsblk
vg02-lv02_rmeta_0      253:6    0    4M  0 lvm  
└─vg02-lv02-real       253:11   0    2G  0 lvm  
  ├─vg02-lv02          253:10   0    2G  0 lvm  /u2
  └─vg02-lv02_snap     253:13   0    2G  0 lvm  

挂载快照到/mnt/lv02_snap/

如果是xfs文件系统:mount -o nouuid,ro /dev/vg02/lv02_snap /mnt/lv02_snap/
如果是ext4文件系统:mount -o ro /dev/vg02/lv02_snap /mnt/lv02_snap/

扫描快照

[root@lamp mnt]# lvscan
  ACTIVE   Original '/dev/vg02/lv02' [2.00 GiB] inherit
  ACTIVE   Snapshot '/dev/vg02/lv02_snap' [128.00 MiB] inherit
[root@lamp mnt]# dmsetup ls --tree

vg02-lv02_snap (253:13)
 ├─vg02-lv02_snap-cow (253:12) 保存原卷改变前的数据
 │  └─ (8:33)
 └─vg02-lv02-real (253:11) 真实的逻辑卷(原卷)
    ├─vg02-lv02_rimage_1 (253:9)
    │  └─ (8:38)
    ├─vg02-lv02_rmeta_1 (253:8)
    │  └─ (8:38)
    ├─vg02-lv02_rimage_0 (253:7)
    └─vg02-lv02_rmeta_0 (253:6)

2. 修改原卷数据

[root@lamp mnt]# lvs /dev/vg02/lv02_snap
  LV        VG   Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv02_snap vg02 swi-aos--- 128.00m      lv02   1.58                         
            
[root@lamp mnt]# dd if=/dev/zero of=/u2/test bs=1M count=50
# Data% 发生变化
[root@lamp mnt]# lvs /dev/vg02/lv02_snap
  LV        VG   Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv02_snap vg02 swi-aos--- 128.00m      lv02   40.80 

对比快照和原卷数据

[root@lamp lv02_snap]# ls
dir1  dir2  dir3  dir4  file1  file2  file3  file4
[root@lamp lv02_snap]# ls /u2/
dir1  dir2  dir3  dir4  file1  file2  file3  file4  test

3. 快照实现自动扩容

修改配置文件:vim /etc/lvm/lvm.conf

snapshot_autoextend_threshold = 80 # 1396行
snapshot_autoextend_percent = 20 # 1409行

//当快照使用到80%时,自动扩容20%;当snapshot_autoextend_threshold = 100表示关闭自动扩容

七、磁盘配额

磁盘配额的作用就是,限制用户或组对磁盘空间的使用,例如文件服务器,邮件服务器…

1. 启用磁盘配额

让文件系统支持配额
临时启用

[root@lamp ~]# mount -o rw,usrquota,grpquota /dev/vg01/lv01 /u01
[root@lamp ~]# mount | grep vg01
/dev/mapper/vg01-lv01 on /u01 type xfs (rw,relatime,attr2,inode64,usrquota,grpquota)


永久启动
修改配置文件vim /etc/fstab

/dev/vg01/lv01          /u01                    xfs     defaults,usrquota,grpquota      0 0

2. 创建磁盘配额的数据库文件

注意: 建议停用SELinux

安装quota:yum -y install quota

[root@lamp ~]# quotacheck -cug /u1
[root@lamp ~]# ll /u1
total 32
-rw------- 1 root root  6144 Jul 25 15:03 aquota.group
-rw------- 1 root root  6144 Jul 25 15:03 aquota.user
drwx------ 2 root root 16384 Jul 25 15:02 lost+found

3. 启动磁盘配额

quotaon -a			//启动所有分区的磁盘配额

4. 设置配额

1)方法1(edquota)

为test用户设置配额
命令:edquota -u stu1

Disk quotas for user test (uid 1000):
  Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/mapper/vg01-lv01             0      10240      15360          0        3        5

soft:又称软限制,当用户到达这个限制以后,系统会给予警告,但仍可写入。
hard:又称硬限制,到达这个限制,就完全禁止任何写入

以下三个为磁盘空间的限制设置:
blocks:已使用空间,无需要设置
soft:用户空间使用限制,为软限制,需要设置
hard:用户空间使用限制,为硬限制,需要设置
以下三个为总文件个数的限制:
inodes:已有文件总数,无需要设置
soft:文件总数限制,为软限制,需要设置
hard:文件总数限制,为硬限制,需要设置

测试

[root@lamp ~]# chmod 777 /u1
[root@lamp ~]# su test
[test@lamp root]$ cd /u1
[test@lamp u1]$ touch file1..10
dm-2: warning, user file quota exceeded.
dm-2: write failed, user file limit reached.
touch: cannot touch ‘file6’: Disk quota exceeded
touch: cannot touch ‘file7’: Disk quota exceeded
touch: cannot touch ‘file8’: Disk quota exceeded
touch: cannot touch ‘file9’: Disk quota exceeded
touch: cannot touch ‘file10’: Disk quota exceeded
# 只能创建5个文件(硬性设置)
[test@lamp u1]$ ll
total 32
-rw------- 1 root root  7168 Jul 25 15:03 aquota.group
-rw------- 1 root root  7168 Jul 25 15:03 aquota.user
-rw-rw-r-- 1 test test     0 Jul 25 15:27 file1
-rw-rw-r-- 1 test test     0 Jul 25 15:27 file2
-rw-rw-r-- 1 test test     0 Jul 25 15:27 file3
-rw-rw-r-- 1 test test     0 Jul 25 15:27 file4
-rw-rw-r-- 1 test test     0 Jul 25 15:27 file5
drwx------ 2 root root 16384 Jul 25 15:02 lost+found
[test@lamp u1]$

大小,超过10M就会警告(软性设置),不能超过15M

[test@lamp u1]$ dd if=/dev/zero of=/u1/file1 bs=1M count=13
dm-2: warning, user block quota exceeded.
13+0 records in
13+0 records out
13631488 bytes (14 MB) copied, 0.021021 s, 648 MB/s
[test@lamp u1]$ dd if=/dev/zero of=/u1/file1 bs=1M count=5
5+0 records in
5+0 records out
5242880 bytes (5.2 MB) copied, 0.007817 s, 671 MB/s

2)方法2

# setquota -u username block软限制 block硬限制 inode软限制 inode硬限制 分区
# setquota -u jack 80000 100000 15 20 /dev/sda2
# quota jack

3. 复制配额

# edquota -p testtom robin user1 user2 user3
将test的配额方案复制给后面所有用户

4. 查看配额

查看单个用户的配额:	    # quota jack
查看所有用户的配额:	    # repquota -a

5. xfs配额注意事项

注意:
1、不需要手动执行quotacheck命令对xfs文件系统进行检查,它会在mount的时候自动执行
2、不需要在xfs文件系统的根下生成quota数据文件

八、swap扩容

查看swap空间大小命令:free -m

1. 方法一(增加硬盘)

sdb               8:16   0   10G  0 disk 
├─sdb1            8:17   0    2G  0 part 
│ └─vg01-lv01   253:2    0    1G  0 lvm  /u1
├─sdb2            8:18   0    2G  0 part 
└─sdb3            8:19   0    2G  0 part

1)格式化分区

格式化为swap文件系统

[root@lamp ~]# mkswap /dev/sdb3
Setting up swapspace version 1, size = 2097148 KiB
no label, UUID=7c2ca810-0ad7-4879-b4d4-045797c4958d
[root@lamp ~]# blkid /dev/sdb3
/dev/sdb3: UUID="7c2ca810-0ad7-4879-b4d4-045797c4958d" TYPE="swap" 

2)激活swap分区

[root@lamp ~]# swapon /dev/sdb3
[root@lamp ~]# swapon -s
Filename				Type		Size	Used	Priority
/dev/dm-1                              	partition	2097148	0	-2
/dev/sdb3                              	partition	2097148	0	-3

2. 方法2(使用dd命令)

dd命令可以复制块设备文件

[root@server ~]# dd if=/dev/sr0 of=/rhel6.iso
[root@server ~]# dd if=/dev/sda1 of=/tmp/bak.boot
[root@server ~]# 
[root@server ~]# dd if=/dev/zero of=/dev/sda1 bs=1M count=100  //不要执行

if=源文件
of=目标文件
bs=复制数据的大小
count=复制的个数

注意:
1. 一般可以使用dd命令做块设备文件的备份
2. /dev/zero 特殊设备,一般用来模拟一个大文件,源源不断的二进制的bit流;
   /dev/null  空设备,类似黑洞

步骤:
1. 使用dd命令模拟大文件
# dd if=/dev/zero of=/tmp/swapfile bs=1M count=1024
2. 格式化大文件
[root@server ~]# mkswap /tmp/swapfile 

3.激活大文件
[root@server ~]# swapon -p 1 /tmp/swapfile
-p:指定优先级,数字越大优先级越高,0-32767
4. 查看
[root@server ~]# swapon -s
Filename				Type		Size	Used	Priority
/tmp/swapfile                           file		1048568	0	1

如果开机自动挂载,需要修改文件:/etc/fstab
/swap_file	swap swap defautls,pri=1 0 0

以上是关于LVM详解及创建过程的主要内容,如果未能解决你的问题,请参考以下文章

Linux LVM逻辑卷配置过程详解

Linux LVM逻辑卷配置过程详解

lvm 逻辑卷的创建删除扩增及快照的创建

Linux系统下lvm逻辑卷逻辑卷快照及虚拟数据优化器vdo详解

LVM创建过程

Linux: LVM 创建