人生漫漫,我学linux之LVM逻辑卷

本文详细介绍LVM逻辑卷管理的原理与实践操作,包括如何将多块磁盘整合为逻辑卷,以及如何进行逻辑卷的扩容和缩小。通过具体步骤演示在CentOS环境下创建逻辑卷、挂载、调整大小等过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.简介

lvm提供了一种动态的磁盘逻辑卷管理方法。lvm逻辑卷管理可以把多个磁盘整合成一个磁盘,比如有4个磁盘,每个磁盘是5g内存,如果用单个磁盘来安装LOL,那肯定是安装不了的,现在lvm这个技术就可以把4个5g的磁盘整合成1个20g的磁盘,这样就可以把lol给安装上了,然后就可以愉快的玩耍了。

lvm有三个概念,分别是物理卷(PV,Physical Volume),卷组(VG,Volume Group),逻辑卷(LV,Logical Volume)。可以把物理卷当做面粉,把这些面粉和在一起就变成了面团(卷组),再从面团里面取一些出来做成包子(逻辑卷),而且每一个包子的重量(内存大小),必须是每一勺面粉(基本单位PE,Physical Extent)的倍数。

 

2.部署逻辑卷

基本命令

  • pvcreate                       建立物理卷
  • pvs                               查看已有的物理卷
  • pvdisplay                      详细显示每一个物理卷
  • pvremove                     删除物理卷
  • pvscan                         扫描物理卷

 

  • vgcreate                      建立卷组
  • vgs                              查看已有的卷组
  • vgdisplay                     详细显示
  • vgextend                     扩大卷组
  • vgremove                    删除卷组
  • vgreduce                     缩小卷组
  • vgscan                        扫描卷组

 

  • lvs                               查看已有的逻辑卷
  • lvcreate                       建立逻辑卷
  • lvdisplay                      详细查看逻辑卷
  • lvextend                      扩大逻辑卷
  • lvreduce                      缩小逻辑卷
  • lvscan                         扫描

实例:

1.在vmware环境中,创建一台centos7虚拟机,给该虚拟机两个20g磁盘,把这两个磁盘做成逻辑卷,挂载到/mylvm中,并实现对该逻辑卷的扩容和缩小。

##列出所有的磁盘
[root@localhost ~]# lsblk        
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0  100G  0 disk 
├─sda1            8:1    0  500M  0 part /boot
└─sda2            8:2    0 78.9G  0 part 
  ├─centos-root 253:0    0   70G  0 lvm  /
  ├─centos-swap 253:1    0  7.9G  0 lvm  [SWAP]
  └─centos-home 253:2    0    1G  0 lvm  /home
sdb               8:16   0   20G  0 disk          ##新的磁盘sdb
sdc               8:32   0   20G  0 disk          ##新的磁盘sdc
sr0              11:0    1    4G  0 rom  

##查看物理卷
[root@centos7 ~]# pvs
  PV         VG     Fmt  Attr PSize  PFree
  /dev/sda2  centos lvm2 a--  78.88g 4.00m

##让sdb和sdc支持lvm也就是创建物理卷
[root@centos7 ~]# pvcreate /dev/sdb /dev/sdc
  Physical volume "/dev/sdb" successfully created
  Physical volume "/dev/sdc" successfully created

##可以看到物理卷已经添加成功了
[root@centos7 ~]# pvs
  PV         VG     Fmt  Attr PSize  PFree 
  /dev/sda2  centos lvm2 a--  78.88g  4.00m
  /dev/sdb          lvm2 ---  20.00g 20.00g
  /dev/sdc          lvm2 ---  20.00g 20.00g

##创建storage卷组并把这两块磁盘添加到该卷组中
[root@centos7 ~]# vgcreate storage /dev/sd{b,c}  ##多块磁盘时可以简写为/dev/sd{b,c}形式,
  Volume group "storage" successfully created    ##和/dev/sdb /dev/sdc 形式相同
[root@centos7 ~]# vgs
  VG      #PV #LV #SN Attr   VSize  VFree 
  centos    1   3   0 wz--n- 78.88g  4.00m
  storage   2   0   0 wz--n- 39.99g 39.99g

##查看storage的详细情况
[root@centos7 ~]# vgdisplay  storage
  --- Volume group ---
  VG Name               storage
  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               39.99 GiB  ##该卷组的总大小
  PE Size               4.00 MiB   ##PE基本单位的大小,1PE就是4MiB
  Total PE              10238      ##总共有10238个PE
  Alloc PE / Size       0 / 0               
  Free  PE / Size       10238 / 39.99 GiB    ##剩余的磁盘大小
  VG UUID               c2OImr-ciP6-LWRx-B6t2-vD7u-yLiN-k6nAPD

##在storage卷组中创建大小为10g的逻辑卷vo1
[root@centos7 ~]# lvcreate -n vo1 -L 10g storage   ##-L 指定大小,-l指定PE的个数
  Logical volume "vo1" created.
[root@centos7 ~]# lvs
  LV   VG      Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  home centos  -wi-ao----  1.00g                                                    
  root centos  -wi-ao---- 70.00g                                                    
  swap centos  -wi-ao----  7.88g                                                    
  vo1  storage -wi-a----- 10.00g 

##格式化新建的逻辑卷vo1
[root@centos7 ~]# mkfs.ext4 /dev/storage/vo1 
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
655360 inodes, 2621440 blocks
131072 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2151677952
80 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

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done 

##创建/mylvm并把vo1挂载到该目录下
[root@centos7 ~]# mkdir /mylvm
[root@centos7 ~]# mount /dev/storage/vo1  /mylvm/

##用df查看挂载信息
[root@centos7 ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   70G  856M   70G   2% /
devtmpfs                 3.9G     0  3.9G   0% /dev
tmpfs                    3.9G     0  3.9G   0% /dev/shm
tmpfs                    3.9G  8.5M  3.9G   1% /run
tmpfs                    3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/mapper/centos-home 1014M   33M  982M   4% /home
/dev/sda1                497M  125M  373M  25% /boot
tmpfs                    781M     0  781M   0% /run/user/0
/dev/mapper/storage-vo1  9.8G   37M  9.2G   1% /mylvm


##用了一段时间后,发现/mylvm空间不够用了,需要给它扩容
##先卸载设备和挂载点的关联
[root@centos7 ~]# umount /mylvm/

##把vo1逻辑卷拓展到30g
[root@centos7 ~]# lvextend -L 30g /dev/storage/vo1         
  Size of logical volume storage/vo1 changed from 10.00 GiB (2560 extents) to 30.00 GiB (7680 extents).
  Logical volume vo1 successfully resized.
[root@centos7 ~]# lvs
  LV   VG      Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  home centos  -wi-ao----  1.00g                                                    
  root centos  -wi-ao---- 70.00g                                                    
  swap centos  -wi-ao----  7.88g                                                    
  vo1  storage -wi-a----- 30.00g    

##检查硬盘的完整性
[root@centos7 ~]# e2fsck -f /dev/storage/vo1 
e2fsck 1.42.9 (28-Dec-2013)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/storage/vo1: 11/655360 files (0.0% non-contiguous), 83137/2621440 blocks

##重置硬盘容量
[root@centos7 ~]# resize2fs  /dev/storage/vo1 
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/storage/vo1 to 7864320 (4k) blocks.
The filesystem on /dev/storage/vo1 is now 7864320 blocks long.

##重新挂载并查看挂载的状态
[root@centos7 ~]# mount /dev/storage/vo1  /mylvm/
[root@centos7 ~]# df -h 
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   70G  855M   70G   2% /
devtmpfs                 3.9G     0  3.9G   0% /dev
tmpfs                    3.9G     0  3.9G   0% /dev/shm
tmpfs                    3.9G  8.5M  3.9G   1% /run
tmpfs                    3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/mapper/centos-home 1014M   33M  982M   4% /home
/dev/sda1                497M  125M  373M  25% /boot
tmpfs                    781M     0  781M   0% /run/user/0
/dev/mapper/storage-vo1   30G   44M   28G   1% /mylvm       ##扩容成功



##用了之后发现好像又给多了,现在想给vo1减小到5g(→_→)
##和扩容不同的是要先检查文件系统的完整性,确认当前硬盘的大小,因为减小硬盘的大小,可能会使数据丢失,所以减小后的内存一定是要比已用内存大的。

##把文件系统卸载并检查文件系统的完整性
[root@centos7 ~]# umount /mylvm/
[root@centos7 ~]# e2fsck -f  /dev/storage/vo1 
e2fsck 1.42.9 (28-Dec-2013)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/storage/vo1: 11/1966080 files (0.0% non-contiguous), 167431/7864320 blocks

##把逻辑卷vo1的容量减少到25g,
[root@centos7 ~]# resize2fs /dev/storage/vo1  25g   ##25g这里要和下面的大小保持一致
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/storage/vo1 to 6553600 (4k) blocks.
The filesystem on /dev/storage/vo1 is now 6553600 blocks long.

[root@centos7 ~]# lvreduce -L 25g /dev/storage/vo1 
  WARNING: Reducing active logical volume to 25.00 GiB
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce vo1? [y/n]: y
  Size of logical volume storage/vo1 changed from 30.00 GiB (7680 extents) to 25.00 GiB (6400 extents).
  Logical volume vo1 successfully resized.

##挂载设备并查看挂载信息
[root@centos7 ~]# mount /dev/storage/vo1  /mylvm/
[root@centos7 ~]# df -h 
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   70G  855M   70G   2% /
devtmpfs                 3.9G     0  3.9G   0% /dev
tmpfs                    3.9G     0  3.9G   0% /dev/shm
tmpfs                    3.9G  8.5M  3.9G   1% /run
tmpfs                    3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/mapper/centos-home 1014M   33M  982M   4% /home
/dev/sda1                497M  125M  373M  25% /boot
tmpfs                    781M     0  781M   0% /run/user/0
/dev/mapper/storage-vo1   25G   44M   24G   1% /mylvm           ##缩小成功

2.在vmware环境中,创建一台centos7虚拟机,给该虚拟机根分区扩容。

##和上面的一样,创建两个物理卷
[root@centos7 ~]# pvcreate /dev/sdb /dev/sdc
  Physical volume "/dev/sdb" successfully created
  Physical volume "/dev/sdc" successfully created
##查看所有硬盘
[root@centos7 ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0  100G  0 disk 
├─sda1            8:1    0  500M  0 part /boot
└─sda2            8:2    0 78.9G  0 part 
  ├─centos-root 253:0    0   70G  0 lvm  /
  ├─centos-swap 253:1    0  7.9G  0 lvm  [SWAP]
  └─centos-home 253:2    0    1G  0 lvm  /home
sdb               8:16   0   20G  0 disk 
sdc               8:32   0   20G  0 disk 
sr0              11:0    1    4G  0 rom  
##通过上面的返回信息可以知道根分区的卷组是centos,逻辑卷是root。
##查看centos卷组信息
[root@centos7 ~]# vgdisplay centos
  --- Volume group ---
  VG Name               centos
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  4
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                3
  Open LV               3
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               78.88 GiB
  PE Size               4.00 MiB
  Total PE              20193
  Alloc PE / Size       20192 / 78.88 GiB
  Free  PE / Size       1 / 4.00 MiB
  VG UUID               H3RRDU-9Ptw-nLYP-VV2A-CXRL-tCEa-5FfmAi
##发现剩余容量不足了,接下来只要把新的两块物理卷添加到这个卷组,然后再给root逻辑卷扩容就好了

##把/dev/sdb和/dev/sdc添加到centos卷组
[root@centos7 ~]# vgextend  centos /dev/sdb  /dev/sdc
  Volume group "centos" successfully extended
[root@centos7 ~]# vgdisplay centos
  --- Volume group ---
  VG Name               centos
  System ID             
  Format                lvm2
  Metadata Areas        3
  Metadata Sequence No  5
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                3
  Open LV               3
  Max PV                0
  Cur PV                3
  Act PV                3
  VG Size               118.87 GiB     ##总容量增加了
  PE Size               4.00 MiB
  Total PE              30431
  Alloc PE / Size       20192 / 78.88 GiB
  Free  PE / Size       10239 / 40.00 GiB   
  VG UUID               H3RRDU-9Ptw-nLYP-VV2A-CXRL-tCEa-5FfmAi

##给根分区增加20g容量  
[root@centos7 ~]# lvextend -L +20g /dev/centos/root  
  Size of logical volume centos/root changed from 70.00 GiB (17920 extents) to 90.00 GiB (23040 extents).
  Logical volume root successfully resized.
[root@centos7 ~]# lvdisplay /dev/centos/root 
  --- Logical volume ---
  LV Path                /dev/centos/root
  LV Name                root
  VG Name                centos
  LV UUID                b0G0id-3sht-2L8f-me2g-D9ed-qrrt-jgP9lQ
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2019-04-12 06:02:08 +0800
  LV Status              available
  # open                 1
  LV Size                90.00 GiB     ##容量增大了
  Current LE             23040
  Segments               3
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0

##重新调整分区大小
##centos根分区默认使用的是xfs文件系统,所有用xfs_growfs命令重新调整分区
[root@centos7 ~]# xfs_growfs  /dev/centos/root  
meta-data=/dev/mapper/centos-root isize=256    agcount=4, agsize=4587520 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=0        finobt=0
data     =                       bsize=4096   blocks=18350080, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
log      =internal               bsize=4096   blocks=8960, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 18350080 to 23592960
[root@centos7 ~]# df -h 
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   90G  856M   90G   1% /    ##扩大了
devtmpfs                 3.9G     0  3.9G   0% /dev
tmpfs                    3.9G     0  3.9G   0% /dev/shm
tmpfs                    3.9G  8.5M  3.9G   1% /run
tmpfs                    3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/mapper/centos-home 1014M   33M  982M   4% /home
/dev/sda1                497M  125M  373M  25% /boot
tmpfs                    781M     0  781M   0% /run/user/0
##扩容成功
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值