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

文章目录

  • 一、逻辑卷管理
    • 1. LVM介绍
    • 2. LVM基本概念
  • 二、逻辑卷LVM应用
    • 1.逻辑卷创建
      • 1)准备物理设备
      • 2)创建物理卷(pvcreate)
      • 3)创建卷组并将物理卷加入其中(vgcreate )
      • 4)创建逻辑卷(lvcreate)
      • 5)格式化逻辑卷(mkfs)
      • 6)挂载使用
    • 2. 逻辑卷动态扩容
      • 1)查看目录属于哪个卷组
      • 2)查看卷组剩余空间
      • 3)扩容逻辑卷所在卷组
        • 把扩展分区sdb3下的sdb5做成物理卷(PV)
        • 将物理卷加入到卷组中(卷组扩容 vgextend )
      • 4)扩容逻辑卷(lvextend)
      • 5)同步文件系统(resize2fs)
  • 三、逻辑卷相关命令(增、删、改)
    • 1. 创建卷
    • 2. 删除卷
    • 3. 扩容组
  • 四、逻辑卷实现条带化
    • 1. 什么是条带化?
    • 2.实现条带化
      • 1)创建物理卷
      • 2)创建卷组
      • 3)创建实现条带化的逻辑卷
      • 4)格式化挂载使用
  • 五、逻辑卷实现镜像
    • 1. 创建物理卷
    • 2. 将物理卷加入到卷组
    • 3. 创建实现镜像的逻辑卷
    • 4. 格式化,挂载使用
    • 5. 测试验证
  • 六、逻辑卷快照
    • 1. 创建挂载快照
    • 2. 修改原卷数据
    • 3. 快照实现自动扩容
  • 七、磁盘配额
    • 1. 启用磁盘配额
    • 2. 创建磁盘配额的数据库文件
    • 3. 启动磁盘配额
    • 4. 设置配额
      • 1)方法1(edquota)
      • 2)方法2
    • 3. 复制配额
    • 4. 查看配额
    • 5. xfs配额注意事项
  • 八、swap扩容
    • 1. 方法一(增加硬盘)
      • 1)格式化分区
      • 2)激活swap分区
    • 2. 方法2(使用dd命令)


一、逻辑卷管理

1. LVM介绍

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

特点:

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

2. LVM基本概念

真实的物理设备创建过程

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

Linux —— 1.5万字详解LVM逻辑卷管理_第1张图片

  • 物理卷(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)准备物理设备

Linux —— 1.5万字详解LVM逻辑卷管理_第2张图片

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

Linux —— 1.5万字详解LVM逻辑卷管理_第3张图片

Linux —— 1.5万字详解LVM逻辑卷管理_第4张图片
可以看到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/file{1..4}
[root@lamp u2]# mkdir /u2/dir{1..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 file{1..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

你可能感兴趣的:(Linux,linux,运维,服务器)