lvm逻辑卷与磁盘配额

1,566 阅读7分钟

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(扫描)pvscanvgscanlvscan
create(建立)pvcreatevgcreatelvcreate
display(显示)pvdisplayvgdisplaylvdisplay
remove(删除)pvremovevgremovelvremove
extend(扩展)————vgextendlvextend
reduce(减少)————vgreducelvreduce

建立逻辑卷

建立物理卷

[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": 超出磁盘限额