LVM逻辑卷

LVM概述

LVM(Logical Volume Manager) ,逻辑卷管理。它是 Linux 下对硬盘分区的一种管理机制。LVM 适合于管理大存储设备,并允许用户动态调整文件体系的巨细。此外,LVM 的快照功用能够协助咱们快速备份数据。LVM 为咱们提供了逻辑概念上的磁盘,使得文件体系不再关心底层物理磁盘的概念。

  • 物理卷(PV):就是真实的物理硬盘或分区。
  • 卷组(VG):将多个物理卷合起来就组成了卷组。组成同一个卷组的物理卷能够是同一块硬盘的不同分区,也能够是不同硬盘上的不同分区。咱们能够把卷组想象为一块逻辑硬盘。
  • 逻辑卷(LV):卷组是一块逻辑硬盘,硬盘有必要分区之后才干运用,咱们把这个分区称作逻辑卷。逻辑卷能够被格式化和写入数据。咱们能够把逻辑卷想象为分区。
  • 物理扩展(PE):PE 是用来保存数据的最小单元,咱们的数据实际上都是写入 PE 傍边的。PE 的巨细是能够配置的,默许是 4MB。

优缺陷

长处:

  1. 文件体系能够跨多个磁盘,因而文件体系巨细不会受物理磁盘的约束。

  2. 能够在体系运行的状态下动态的扩展文件体系的巨细。

  3. 能够增加新的磁盘到LVM的存储池中。

  4. 能够以镜像的方法冗余重要的数据到多个物理磁盘。

  5. 能够方便的导出整个卷组到另外一台机器。

缺陷:

  1. 在从卷组中移除一个磁盘的时分有必要运用reducevg指令(这个指令要求root权限,并且不允许在快照卷组中运用)。

  2. 当卷组中的一个磁盘损坏时,整个卷组都会受到影响。

  3. 由于加入了额定的操作,存贮功用受到影响。

安装LVM东西

yum install  lvm2 -y

指令

功用 pv(物理卷) vg(卷组) lv(逻辑卷)
scan(扫描) pvscan vgscan lvscan
create(树立) pvcreate vgcreate lvcreate
display(显现) pvdisplay vgdisplay lvdisplay
remove(删除) pvremove vgremove lvremove
extend(扩展) ———— vgextend lvextend
reduce(减少) ———— vgreduce lvreduce

树立逻辑卷

树立物理卷

[root@localhost ~]# pvcreate /dev/sdb1 /dev/sdc
  Physical volume "/dev/sdb1" successfully created.
  Physical volume "/dev/sdc" successfully created.
[root@localhost ~]# vgcreate km /dev/sd{b1,c}
  Volume group "km" successfully created
[root@localhost ~]# pvscan
  PV /dev/sda2   VG centos          lvm2 [54.00 GiB / 4.00 MiB free]
  PV /dev/sdb1   VG km              lvm2 [<10.00 GiB / <10.00 GiB free]
  PV /dev/sdc    VG km              lvm2 [<20.00 GiB / <20.00 GiB free]
  Total: 3 [<84.00 GiB] / in use: 3 [<84.00 GiB] / in no VG: 0 [0   ]
[root@localhost ~]# pvdisplay
  --- Physical volume ---
  PV Name               /dev/sda2
  VG Name               centos
  PV Size               <54.01 GiB / not usable 4.00 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              13825
  Free PE               1
  Allocated PE          13824
  PV UUID               JiWR9a-GOyJ-T2da-3ECl-zR5S-cBNw-tfVwHq
  --- Physical volume ---
  PV Name               /dev/sdb1
  VG Name               km
  PV Size               10.00 GiB / not usable 4.00 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              2559
  Free PE               2559
  Allocated PE          0
  PV UUID               Aixlpy-F8jB-61cd-IA8P-U1hJ-LSGp-r9B7J5
  --- Physical volume ---
  PV Name               /dev/sdc
  VG Name               km
  PV Size               20.00 GiB / not usable 4.00 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              5119
  Free PE               5119
  Allocated PE          0
  PV UUID               WjD18V-SdJ4-SWcu-14kQ-bXZK-AeY1-pKIJSk

树立卷组

[root@localhost ~]# pvcreate /dev/sd{b1,b2}
[root@localhost ~]# vgdisplay
  --- Volume group ---
  VG Name               centos
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  3
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                2
  Open LV               2
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               54.00 GiB
  PE Size               4.00 MiB
  Total PE              13825
  Alloc PE / Size       13824 / 54.00 GiB
  Free  PE / Size       1 / 4.00 MiB
  VG UUID               2dlq11-b0KU-p4qh-gEdR-q9QR-jcJ7-fDtkVd
  --- Volume group ---
  VG Name               km
  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               29.99 GiB
  PE Size               4.00 MiB
  Total PE              7678
  Alloc PE / Size       0 / 0   
  Free  PE / Size       7678 / 29.99 GiB
  VG UUID               A44e17-nva2-3SJ4-xVPW-muE7-x7vW-11YGGS

树立逻辑卷

[root@localhost ~]# lvcreate -n mysql -L 20G km
  Logical volume "mysql" created.
[root@localhost ~]# ll /dev/km/mysql
lrwxrwxrwx. 1 root root 7 9月  28 13:55 /dev/km/mysql -> ../dm-2
[root@localhost ~]# ll /dev/mapper/
总用量 0
lrwxrwxrwx. 1 root root       7 9月  27 21:42 centos-root -> ../dm-0
lrwxrwxrwx. 1 root root       7 9月  27 21:42 centos-swap -> ../dm-1
crw-------. 1 root root 10, 236 9月  27 21:42 control
lrwxrwxrwx. 1 root root       7 9月  28 13:55 km-mysql -> ../dm-2
[root@localhost ~]# lvdisplay
  --- Logical volume ---
  LV Path                /dev/centos/root
  LV Name                root
  VG Name                centos
  LV UUID                JQIV33-Sd3A-4IcR-dqUn-fsk8-JYWa-FoZgZB
  LV Write Access        read/write
  LV Creation host, time localhost, 2022-08-31 19:11:25 +0800
  LV Status              available
  # open                 1
  LV Size                50.00 GiB
  Current LE             12800
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0
  --- Logical volume ---
  LV Path                /dev/centos/swap
  LV Name                swap
  VG Name                centos
  LV UUID                ODQAxT-WAcL-BwW0-ltpr-hUf2-P3Kp-hHgCzq
  LV Write Access        read/write
  LV Creation host, time localhost, 2022-08-31 19:11:25 +0800
  LV Status              available
  # open                 2
  LV Size                4.00 GiB
  Current LE             1024
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:1
  --- Logical volume ---
  LV Path                /dev/km/mysql
  LV Name                mysql
  VG Name                km
  LV UUID                OlLW8J-jlrw-QXUj-DFyV-k0gG-0V1p-QHCbA2
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2022-09-28 13:55:16 +0800
  LV Status              available
  # open                 0
  LV Size                20.00 GiB
  Current LE             5120
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:2

逻辑卷树立成功但是无法运用,需求挂载

[root@localhost ~]# mkfs.ext4 /dev/km/mysql
mke2fs 1.42.9 (28-Dec-2013)
文件体系标签=
OS type: Linux
块巨细=4096 (log=2)
分块巨细=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
1310720 inodes, 5242880 blocks
262144 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=2153775104
160 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
	4096000
Allocating group tables: 完结                            
正在写入inode表: 完结                            
Creating journal (32768 blocks): 完结
Writing superblocks and filesystem accounting information: 完结   
[root@localhost ~]# mount /dev/km/mysql /mnt/
[root@localhost ~]# df -h
文件体系                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   50G  3.3G   47G    7% /
devtmpfs                 977M     0  977M    0% /dev
tmpfs                    993M     0  993M    0% /dev/shm
tmpfs                    993M  9.1M  984M    1% /run
tmpfs                    993M     0  993M    0% /sys/fs/cgroup
/dev/sda1                5.0G  161M  4.9G    4% /boot
tmpfs                    199M  4.0K  199M    1% /run/user/42
tmpfs                    199M   32K  199M    1% /run/user/0
/dev/sr0                 4.3G  4.3G     0  100% /run/media/root/CentOS 7 x86_64
/dev/mapper/km-mysql      20G   45M   19G    1% /mnt

逻辑卷扩容

[root@localhost ~]# mkfs.xfs /dev/km/tk
meta-data=/dev/km/tk             isize=512    agcount=4, agsize=327680 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=1310720, 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@localhost ~]# mount /dev/km/tk /opt/
[root@localhost ~]# df -h
文件体系                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   50G  3.3G   47G    7% /
devtmpfs                 977M     0  977M    0% /dev
tmpfs                    993M     0  993M    0% /dev/shm
tmpfs                    993M  9.1M  984M    1% /run
tmpfs                    993M     0  993M    0% /sys/fs/cgroup
/dev/sda1                5.0G  161M  4.9G    4% /boot
tmpfs                    199M  4.0K  199M    1% /run/user/42
tmpfs                    199M   32K  199M    1% /run/user/0
/dev/sr0                 4.3G  4.3G     0  100% /run/media/root/CentOS 7 x86_64
/dev/mapper/km-mysql      20G   45M   19G    1% /mnt
/dev/mapper/km-tk        5.0G   33M  5.0G    1% /opt
[root@localhost ~]# lvextend -L +2G /dev/km/tk -r
  Size of logical volume km/tk changed from 5.00 GiB (1280 extents) to 7.00 GiB (1792 extents).
  Logical volume km/tk successfully resized.
meta-data=/dev/mapper/km-tk      isize=512    agcount=4, agsize=327680 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=1310720, 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 1310720 to 1835008
[root@localhost ~]# df -h
文件体系                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   50G  3.3G   47G    7% /
devtmpfs                 977M     0  977M    0% /dev
tmpfs                    993M     0  993M    0% /dev/shm
tmpfs                    993M  9.1M  984M    1% /run
tmpfs                    993M     0  993M    0% /sys/fs/cgroup
/dev/sda1                5.0G  161M  4.9G    4% /boot
tmpfs                    199M  4.0K  199M    1% /run/user/42
tmpfs                    199M   32K  199M    1% /run/user/0
/dev/sr0                 4.3G  4.3G     0  100% /run/media/root/CentOS 7 x86_64
/dev/mapper/km-mysql      20G   45M   19G    1% /mnt
/dev/mapper/km-tk        7.0G   33M  7.0G    1% /opt

磁盘配额

条件

  1. 内核有必要支持磁盘配额。
  2. 体系中有必要安装了 Quota 东西。咱们的 Linux 中默许安装了 Quoted 东西
  3. 要支持磁盘配额的分区有必要敞开磁盘配额功用。这项功用能够手动敞开,不再是默许敞开的

特色

  • 效果范围:针对指定的文件体系(分区)
  • 约束目标:用户帐号、组帐号
  • 约束类型:磁盘容量、文件数量
  • 约束方法:软约束、硬约束
选项 效果
-x 启动专家形式
-c 直接调用管理指令
-u 指定用户账号目标
-g 指定组账号目标
xfs_quota -x -c "limit -u bsoft=N bhard=N isoft=N ihard=N 用户名" 挂载点

验证磁盘配额功用

[root@localhost ~]# chmod 777 /opt ##给/opt增加满权限 
[root@localhost ~]# Su km ##进入km用户 
[km@localhost root]$ cd /mnt 

检查磁盘配

report

选项 效果
-u 对用户检查
-g 对组检查
-a 检查一切可用分区的配额运用报告
-b 检查磁盘容量
-i 检查文件数
 xfs_quota -X -C ' report -a'   #检查一切可用分区的磁盘容量配额运用情况
 xfs_quota-X -C 'report -abih ' #检查磁盘容量和文件数的报告

验证磁盘容量超限

[can@localhost mnt]$ dd if=/dev/cm of=/mnt/test.txt bs=10M count=12  ##从/dev/cm仿制到/mnt下创立文件test.txt,巨细为10M,仿制12次
dd: 写入"/mnt/test.txt" 出错: 超出磁盘限额
记录了11+0 的读入
记录了10+0 的写出
104857600字节(105 MB)已仿制,0.0673266 秒,1.6 GB/秒

验证磁盘文件数超限

[mk@localhost mnt]$ touch {1.20}.txt ##创立1-20的txt文件
touch: 无法创立"{1.20}.txt": 超出磁盘限额