存储服务-LVM

LVM简介

什么是LVM

LVM全称:Logical Volume Manager,中文名为逻辑卷管理,是Linux环境下对磁盘分区进行管理的一种机制。
LVM是建立在硬盘和分区之上的一个逻辑层,可用来提高磁盘分区管理的灵活性。

LVM的名词

**PV(physical volume):**物理卷在逻辑卷管理系统最底层,可为整个物理硬盘或实际物理硬盘上的分区。它只是在物理分区中划出了一个特殊的区域,用于记载与LVM相关的管理参数。
**VG(volume group):**卷组建立在物理卷上,一卷组中至少要包括一物理卷,卷组建立后可动态的添加卷到卷组中,一个逻辑卷管理系统工程中可有多个卷组。
**LV(logical volume):**逻辑卷建立在卷组基础上,卷组中未分配空间可用于建立新的逻辑卷,逻辑卷建立后可以动态扩展和缩小空间。
**PE(physical extent):**物理区域是物理卷中可用于分配的最小存储单元,物理区域大小在建立卷组时指定,一旦确定不能更改,同一卷组所有物理卷的物理区域大小需一致,新的PV加入到vg后,pe的大小自动更改为vg中定义的pe大小。
**LE(logical extent):**逻辑区域是逻辑卷中可用于分配的最小存储单元,逻辑区域的大小取决于逻辑卷所在卷组中的物理区域的大小。

LVM工作原理

LVM在每个物理卷头部都维护了一个metadata,每个metadata中都包含了整个VG(volume group:卷组)的信息,包括每个VG的布局配置,PV(physical volume:物理卷)的编号,LV(logical volume:逻辑卷)的编号,以及每个PE(physical extends:物理扩展单元)到LE(logical extends:物理扩展单元)的映射关系。同一个VG中的每个PV头部的信息都是相同的,这样有利于故障时进行数据恢复。
LVM对上层文件系统提供LV层,隐藏了操作细节。对文件系统而言,对LV的操作与原先对partition的操作没有差别。当对LV进行写入操作的时候,LVM定位相应的LE,通过PV头部的映射表将数据写入到相应的PE上。LVM实现的关LVM最大的特点就是可以对磁盘进行动态管理。因为逻辑卷的大小是可以动态调整的,而且不会丢失现有的数据。我们如果新增加了硬盘,其也不会改变现有上层的逻辑卷。键在于PE和LE之间建立映射关系,不同的映射规则决定了不同的LVM存储模型。LVM支持多个PV 的stripe和mirror。
LVM最大的特点就是可以对磁盘进行动态管理,因为逻辑卷的大小是可以动态调整的,而且不会丢失现有的数据,如果我们增加了硬盘也不会改变现有的上层逻辑卷。

LVM特点

优点:

  1. 文件系统可以跨多个磁盘,因此文件系统大小不会受物理磁盘的限制。
  2. 可以在系统运行的状态下动态的扩展文件系统的大小。
  3. 可以增加新的磁盘到LVM的存储池中。
  4. 可以以镜像的方式冗余重要的数据到多个物理磁盘。
  5. 可以方便的导出整个卷组到另外一台机器。

缺点:

  1. 在从卷组中移除一个磁盘的时候必须使用reducevg命令(这个命令要求root权限,并且不允许在快照卷组中使用)。
  2. 当卷组中的一个磁盘损坏时,整个卷组都会受到影响。
  3. 因为加入了额外的操作,存贮性能受到影响。

LVM架构

LVM安装

yum install lvm2

LVM命令

常用命令

功能物理机管理卷组管理逻辑卷管理
扫描pvscanvgscanlvscan
创建pvcreatevgcreatelvcreate
显示pvdisplayvgdisplaylvdisplay
删除pvremovevgremovelvremove
扩展/vgextendlvextend
缩减/vgreducelvreduce
重命名/vgrenamelvrename

其他命令

df -T

只可以查看已经挂载的分区和文件系统类型

df -T
Filesystem              Type     1K-blocks    Used Available Use% Mounted on
devtmpfs                devtmpfs   1001888       0   1001888   0% /dev
tmpfs                   tmpfs      1013948       0   1013948   0% /dev/shm
tmpfs                   tmpfs      1013948    9720   1004228   1% /run
tmpfs                   tmpfs      1013948       0   1013948   0% /sys/fs/cgroup
/dev/mapper/centos-root xfs       48206852 1887256  46319596   4% /
/dev/sda1               xfs        2086912  140412   1946500   7% /boot
tmpfs                   tmpfs       202792       0    202792   0% /run/user/0

fdisk -l

可以显示出所有挂载和未挂载的分区,但不显示文件系统类型

fdisk -l

Disk /dev/sda: 53.7 GB, 53687091200 bytes, 104857600 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000c4e2e

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     4196351     2097152   83  Linux
/dev/sda2         4196352   104857599    50330624   8e  Linux LVM

Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/sdc: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/mapper/centos-root: 49.4 GB, 49387929600 bytes, 96460800 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/mapper/centos-swap: 2147 MB, 2147483648 bytes, 4194304 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

parted -l

可以查看未挂载的文件系统类型,以及哪些分区尚未格式化

parted -l
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sda: 53.7GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number  Start   End     Size    Type     File system  Flags
 1      1049kB  2149MB  2147MB  primary  xfs          boot
 2      2149MB  53.7GB  51.5GB  primary               lvm


Error: /dev/sdb: unrecognised disk label
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: unknown
Disk Flags:

Error: /dev/sdc: unrecognised disk label
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdc: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: unknown
Disk Flags:

Model: Linux device-mapper (linear) (dm)
Disk /dev/mapper/centos-swap: 2147MB
Sector size (logical/physical): 512B/512B
Partition Table: loop
Disk Flags:

Number  Start  End     Size    File system     Flags
 1      0.00B  2147MB  2147MB  linux-swap(v1)


Model: Linux device-mapper (linear) (dm)
Disk /dev/mapper/centos-root: 49.4GB
Sector size (logical/physical): 512B/512B
Partition Table: loop
Disk Flags:

Number  Start  End     Size    File system  Flags
 1      0.00B  49.4GB  49.4GB  xfs


Warning: Unable to open /dev/sr0 read-write (Read-only file system).  /dev/sr0
has been opened read-only.
Model: NECVMWar VMware IDE CDR10 (scsi)
Disk /dev/sr0: 4712MB
Sector size (logical/physical): 2048B/2048B
Partition Table: msdos
Disk Flags:

Number  Start   End     Size    Type     File system  Flags
 2      4973kB  41.0MB  36.0MB  primary

lsblk -f

也可以查看未挂载的文件系统类型

lsblk -f
NAME   FSTYPE   LABEL          UUID                                   MOUNTPOINT
sda
├─sda1 xfs                     38212902-5540-4514-8ec1-5971a40f925c   /boot
└─sda2 LVM2_mem                ExEuhE-oIw1-x3cm-5NFq-1tV4-00wb-Rbdamq
  ├─centos-root
       xfs                     68b61fd1-0248-459d-bc81-97d04df2bf2c   /
  └─centos-swap
       swap                    a71f384d-d2c4-4d1a-a44c-0f428e9bb030   [SWAP]
sdb    LVM2_mem                zP80fQ-JPzU-Owva-tr1j-AKHF-RE57-RsiaLl
sdc    LVM2_mem                IieEcX-5065-Haok-RWSy-pnhQ-yk8O-uG660E
sr0    iso9660  CentOS 7 x86_64
                               2020-11-04-11-36-43-00

mkfs.xfs

创建xfs文件系统

 mkfs.xfs /dev/vg_sdb/lv_sdb 
meta-data=/dev/vg_sdb/lv_sdb     isize=512    agcount=4, agsize=1304320 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=5217280, 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
mkfs.ext4

创建ext4文件系统

mkfs.ext4 /dev/sdc 
mke2fs 1.42.9 (28-Dec-2013)
/dev/sdc is entire device, not just one partition!
无论如何也要继续? (y,n) y
文件系统标签=
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: 完成
xfs_growfs

xfs文件系统扩容

xfs_growfs /dev/vg_sdb/lv_sdb 
meta-data=/dev/mapper/vg_sdb-lv_sdb isize=512    agcount=4, agsize=1304320 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=5217280, 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 5217280 to 10460160
resize2fs

ext4文件系统扩容

resize2fs /dev/sdc 
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/sdc is mounted on /root/www; on-line resizing required
old_desc_blocks = 3, new_desc_blocks = 7
The filesystem on /dev/sdc is now 13107200 blocks long.

LVM应用

创建LVM

创建流程

添加磁盘

添加磁盘
image.png
查看磁盘信息

fdisk -l
创建PV

创建pv

pvcreate /dev/sdb

查看pv

pvs
  PV         VG     Fmt  Attr PSize   PFree 
  /dev/sda2  centos lvm2 a--  <48.00g     0 
  /dev/sdb          lvm2 ---   20.00g 20.00g

pvdisplay /dev/sdb 
  "/dev/sdb" is a new physical volume of "20.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb
  VG Name               
  PV Size               20.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               RlZ0ss-3qI2-s0Cm-34LV-Etz8-Ikmn-AhTNyq
创建VG

创建vg

vgcreate vg_sdb /dev/sdb

查看vg

vgs
  VG     #PV #LV #SN Attr   VSize   VFree  
  centos   1   2   0 wz--n- <48.00g      0 
  vg_sdb   1   0   0 wz--n- <20.00g <20.00g

vgdisplay vg_sdb
  --- Volume group ---
  VG Name               vg_sdb
  System ID             
  Format                lvm2
  Metadata Areas        1
  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                1
  Act PV                1
  VG Size               <20.00 GiB
  PE Size               4.00 MiB
  Total PE              5119
  Alloc PE / Size       0 / 0   
  Free  PE / Size       5119 / <20.00 GiB
  VG UUID               26HhHL-qiH1-jkXX-eNXM-ZS2z-aGXt-DViCGv
创建LV

创建lv

lvcreate -L 20G -n lv_sdb vg_sdb

查看lv

lvs
  LV     VG     Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root   centos -wi-ao---- <46.00g                                                    
  swap   centos -wi-ao----   2.00g                                                    
  lv_sdb vg_sdb -wi-a-----  19.90g 

lvdisplay vg_sdb
  --- Logical volume ---
  LV Path                /dev/vg_sdb/lv_sdb
  LV Name                lv_sdb
  VG Name                vg_sdb
  LV UUID                5Au4dM-IqMY-RgZp-ZsdO-ndqi-f5rP-CQKwjr
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2023-04-06 09:56:29 +0800
  LV Status              available
  # open                 0
  LV Size                19.90 GiB
  Current LE             5095
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:2
挂载磁盘

创建目录

mkdir /www

格式化磁盘

mkfs.xfs /dev/vg_sdb/lv_sdb 
meta-data=/dev/vg_sdb/lv_sdb     isize=512    agcount=4, agsize=1304320 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=5217280, 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

挂载磁盘

mount /dev/vg_sdb/lv_sdb /www/
echo "/dev/vg_sdb/lv_sdb      /www/                   xfs     default         0 0" >> /etc/fstab

删除LVM

删除流程

取消挂载
umount /dev/vg_sdb/lv_sdb
sed -i "s@/dev/vg_sdb/lv_sdb@#/dev/vg_sdb/lv_sdb@g" /etc/fstab
删除LV

查看lv

lvdisplay /dev/vg_sdb/lv_sdb 
  --- Logical volume ---
  LV Path                /dev/vg_sdb/lv_sdb
  LV Name                lv_sdb
  VG Name                vg_sdb
  LV UUID                5Au4dM-IqMY-RgZp-ZsdO-ndqi-f5rP-CQKwjr
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2023-04-06 09:56:29 +0800
  LV Status              available
  # open                 0
  LV Size                39.90 GiB
  Current LE             10215
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:2

删除lv

lvremove /dev/vg_sdb/lv_sdb

查看lv

lvs
删除VG

查看vg

vgdisplay vg_sdb
  --- Volume group ---
  VG Name               vg_sdb
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  5
  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               39.99 GiB
  PE Size               4.00 MiB
  Total PE              10238
  Alloc PE / Size       0 / 0   
  Free  PE / Size       10238 / 39.99 GiB
  VG UUID               26HhHL-qiH1-jkXX-eNXM-ZS2z-aGXt-DViCGv

删除vg

vgremove vg_sdb

查看vg

vgs
删除PV

查看pv

 pvdisplay /dev/sdc 
  "/dev/sdc" is a new physical volume of "20.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdc
  VG Name               
  PV Size               20.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               1tOtY3-lxYL-GExc-YlxH-gNza-8BZl-9Y1XDh

删除pv

pvremove /dev/sdc

查看pv

pvs
删除磁盘

扩容LVM

扩容流程

添加磁盘

添加磁盘
image.png
查看磁盘信息

fdisk -l
创建PV

创建pv

pvcreate /dev/sdc

查看pv

pvs
  PV         VG     Fmt  Attr PSize   PFree 
  /dev/sda2  centos lvm2 a--  <48.00g     0 
  /dev/sdb   vg_sdb lvm2 a--  <20.00g 96.00m
  /dev/sdc          lvm2 ---   20.00g 20.00g

pvdisplay /dev/sdc 
  "/dev/sdc" is a new physical volume of "20.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdc
  VG Name               
  PV Size               20.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               1tOtY3-lxYL-GExc-YlxH-gNza-8BZl-9Y1XDh
扩容VG

扩容vg

vgextend vg_sdb /dev/sdc 

查看vg

vgs
  VG     #PV #LV #SN Attr   VSize   VFree  
  centos   1   2   0 wz--n- <48.00g      0 
  vg_sdb   2   1   0 wz--n-  39.99g <20.09g

vgdisplay vg_sdb
  --- Volume group ---
  VG Name               vg_sdb
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  3
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               39.99 GiB
  PE Size               4.00 MiB
  Total PE              10238
  Alloc PE / Size       5095 / 19.90 GiB
  Free  PE / Size       5143 / <20.09 GiB
  VG UUID               26HhHL-qiH1-jkXX-eNXM-ZS2z-aGXt-DViCGv
扩容LV

扩容lv

lvextend -L +20G /dev/vg_sdb/lv_sdb

查看lv

lvs
  LV     VG     Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root   centos -wi-ao---- <46.00g                                                    
  swap   centos -wi-ao----   2.00g                                                    
  lv_sdb vg_sdb -wi-ao----  39.90g 

lvdisplay /dev/vg_sdb/lv_sdb 
  --- Logical volume ---
  LV Path                /dev/vg_sdb/lv_sdb
  LV Name                lv_sdb
  VG Name                vg_sdb
  LV UUID                5Au4dM-IqMY-RgZp-ZsdO-ndqi-f5rP-CQKwjr
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2023-04-06 09:56:29 +0800
  LV Status              available
  # open                 1
  LV Size                39.90 GiB
  Current LE             10215
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:2
扩容磁盘

查看磁盘大小

df -h
文件系统                   容量  已用  可用 已用% 挂载点
devtmpfs                   979M     0  979M    0% /dev
tmpfs                      991M     0  991M    0% /dev/shm
tmpfs                      991M  9.5M  981M    1% /run
tmpfs                      991M     0  991M    0% /sys/fs/cgroup
/dev/mapper/centos-root     46G  1.9G   45G    4% /
/dev/sda1                  2.0G  138M  1.9G    7% /boot
tmpfs                      199M     0  199M    0% /run/user/0
/dev/mapper/vg_sdb-lv_sdb   20G   33M   20G    1% /www

查看原磁盘文件系统

lsblk -f
NAME            FSTYPE      LABEL           UUID                                   MOUNTPOINT
sda                                                                                
├─sda1          xfs                         38212902-5540-4514-8ec1-5971a40f925c   /boot
└─sda2          LVM2_member                 ExEuhE-oIw1-x3cm-5NFq-1tV4-00wb-Rbdamq 
  ├─centos-root xfs                         68b61fd1-0248-459d-bc81-97d04df2bf2c   /
  └─centos-swap swap                        a71f384d-d2c4-4d1a-a44c-0f428e9bb030   [SWAP]
sdb             LVM2_member                 RlZ0ss-3qI2-s0Cm-34LV-Etz8-Ikmn-AhTNyq 
└─vg_sdb-lv_sdb xfs                         f9bd84f7-332a-4323-b1c2-597df5ccbba7   /www
sdc             LVM2_member                 1tOtY3-lxYL-GExc-YlxH-gNza-8BZl-9Y1XDh 
└─vg_sdb-lv_sdb xfs                         f9bd84f7-332a-4323-b1c2-597df5ccbba7   /www
sr0             iso9660     CentOS 7 x86_64 2020-11-04-11-36-43-00

扩容磁盘

xfs_growfs /dev/vg_sdb/lv_sdb

查看磁盘大小

 df -h
文件系统                   容量  已用  可用 已用% 挂载点
devtmpfs                   979M     0  979M    0% /dev
tmpfs                      991M     0  991M    0% /dev/shm
tmpfs                      991M  9.5M  981M    1% /run
tmpfs                      991M     0  991M    0% /sys/fs/cgroup
/dev/mapper/centos-root     46G  1.9G   45G    4% /
/dev/sda1                  2.0G  138M  1.9G    7% /boot
tmpfs                      199M     0  199M    0% /run/user/0
/dev/mapper/vg_sdb-lv_sdb   40G   33M   40G    1% /www
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值