逻辑卷--LVM详解

背景

        今天这篇文章还是来记录一下linux的基础类容,前面跟大家介绍过,作者目前所在的公司是做国产操作系统的,因此呢我们平时的办公电脑都是我们公司的系统,今天临近下班前,企业微信上一位产品经理发来消息:“哈喽,我的办公电脑用的我们公司的专业版系统,现在数据盘满了,刚刚新加了一块盘,我怎么扩容我的数据盘呀!看你的企微名片是运维,所以来咨询下”。头上一百个问号,为啥这些事前也找到运维头上来了呢?哎!不过出于礼貌,在加上该位产品是个小姐姐,所以咱们得帮他看看。(......省略若干步骤),分区不是逻辑卷,没办法扩容,我也无能为力了。

         跟大家闲聊了半天,现在回归正题,说说我们今天的主角---逻辑卷LVM!

介绍

1.  什么是逻辑卷?

        LVM是 Logical Volume Manager(逻辑卷管理)的简写,LVM将若干个磁盘或者磁盘分区连接为一个整块的卷组,形成一个存储池。管理员可以在卷组上任意创建逻辑卷,并进一步在逻辑卷上创建文件系统。管理员通过LVM可以方便的调整存储卷组的大小,并且可以对磁盘存储按照组的方式进行命名、管理和分配。

2.  基本组成

2.1  物理卷---PV(Physical Volume):

        物理卷在逻辑卷管理中处于最底层,它可以是实际物理硬盘上的分区,也可以是整个物理硬盘;它是LVM的基本存储逻辑块,但和基本的物理分区相比,逻辑卷包含LVM相关的管理参数。

2.2  卷组--------VG(Volumne Group):

       它可以看成单独的逻辑磁盘,建立在PV之上,一个卷组中至少要包括一个物理卷,在卷组建立之后可动态添加物理卷到卷组中。一个逻辑卷管理系统工程中可以只有一个卷组,也可以拥有多个卷组。

2.3    逻辑卷-----LV(Logical Volume):

        逻辑卷建立在卷组之上,卷组中的未分配空间可以用于建立新的逻辑卷,逻辑卷建立后可以动态地扩展和缩小空间。系统中的多个逻辑卷要以属于同一个卷组,也可以属于不同的多个卷组。

2.4  物理区域--PE(Physical Extent):
        物理区域是物理卷中可用于分配的最小存储单元,物理区域的大小可根据实际情况在建立物理卷时指定。物理区域大小一旦确定将不能更改,同一卷组中的所有物理卷的物理区域大小需要一致。


2.5、 逻辑区域―LE(Logical Extent):
        逻辑区域是逻辑卷中可用于分配的最小存储单元,逻辑区域的大小取决于逻辑卷所在卷组中的物理区域的大小。

3.  逻辑卷的优点

3.1  可以将多块硬盘逻辑上划分为一块大的硬盘(实际生产中我们是通过Raid将多块硬盘组合在一起);

3.2  可动态调整逻辑卷的大小,物理是扩展还是收缩;

3.3   在调整逻辑卷(LV)大小时可以不用考虑逻辑卷在硬盘上的位置,不用担心没有可用的连续空间。

实验操作

        这里使用的是我们公司的国产服务器操作系统,实际上就是Debian的内核,操作命令与Ubuntu没有任何区别。

        记住创建lvm的步骤:物理硬盘/分区--->物理卷(PV)--->卷组(VG)--->逻辑卷(LVM)--->格式化成文件系统

创建LVM

1.  环境准备:

 1.1      开启一个虚拟机,添加三块为使用的硬盘。

root@uso-PC:~# lsblk 
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0   70G  0 disk 
├─sda1   8:1    0  512M  0 part /boot
├─sda2   8:2    0    1K  0 part 
├─sda3   8:3    0   21G  0 part /recovery
├─sda4   8:4    0   11G  0 part [SWAP]
├─sda5   8:5    0   20G  0 part /
└─sda6   8:6    0 17.5G  0 part /deepin/userdata
sdb      8:16   0   10G  0 disk 
sdc      8:32   0   10G  0 disk 
sdd      8:48   0   10G  0 disk 
sr0     11:0    1  3.5G  0 rom

1.2        将一块盘正常分区,另外两块盘不分区,在这里验证上面所说的物理卷(PV)可以是实际物理硬盘上的分区,也可以是整个物理硬盘。

root@uso-PC:~# fdisk 
fdisk: bad usage
Try 'fdisk --help' for more information.
root@uso-PC:~# lsblk 
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0   70G  0 disk 
├─sda1   8:1    0  512M  0 part /boot
├─sda2   8:2    0    1K  0 part 
├─sda3   8:3    0   21G  0 part /recovery
├─sda4   8:4    0   11G  0 part [SWAP]
├─sda5   8:5    0   20G  0 part /
└─sda6   8:6    0 17.5G  0 part /deepin/userdata
sdb      8:16   0   10G  0 disk 
└─sdb1   8:17   0   10G  0 part 
sdc      8:32   0   10G  0 disk 
sdd      8:48   0   10G  0 disk 
sr0     11:0    1  3.5G  0 rom 

2.  创建PV

       将/dev/sdb1,/dev/sdc,/dev/sdd创建为物理卷PV

##创建物理卷pv
root@uso-PC:~# pvcreate /dev/sdb1 /dev/sdc 
  Physical volume "/dev/sdb1" successfully created.
  Physical volume "/dev/sdc" successfully created.
root@uso-PC:~# 
root@uso-PC:~# pvcreate /dev/sdd 
  Physical volume "/dev/sdd" successfully created.

##查看创建的物理卷PV
root@uso-PC:~# pvs
  PV         VG Fmt  Attr PSize   PFree  
  /dev/sdb1     lvm2 ---  <10.00g <10.00g
  /dev/sdc      lvm2 ---   10.00g  10.00g
  /dev/sdd      lvm2 ---   10.00g  10.00g

3.  创建卷组(VG)

        将/dev/sdb1和/dev/sdc添加到一个卷组中,将/dev/sdd添加到另外一个卷组中

#创建vg 语法:
vgcreate   vg_name   /dev/disk ...


# 创建vg
vgcreate  vg1   /dev/sdb1   /dev/sdc

或者在创建vg1的时候添加一个物理卷,然后通过vgextend追加一个物理卷到vg中
root@uso-PC:~# vgcreate vg1 /dev/sdb1 
  Volume group "vg1" successfully created
root@uso-PC:~# vgextend vg1 /dev/sdc
  Volume group "vg1" successfully extended
root@uso-PC:~# vgcreate vg2 /dev/sdd 
  Volume group "vg2" successfully created


##查看创建的VG
root@uso-PC:~# vgs
  VG  #PV #LV #SN Attr   VSize   VFree  
  vg1   2   0   0 wz--n-  19.99g  19.99g
  vg2   1   0   0 wz--n- <10.00g <10.00g


##  通过vgdisplay查看vg的详细信息

4.  创建逻辑卷(LVM)

## 创建LVM
root@uso-PC:~# lvcreate -L 15G -n lv1 vg1 
  Logical volume "lv1" created.
root@uso-PC:~# lvs
  LV   VG  Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv1  vg1 -wi-a----- 15.00g                                                    
root@uso-PC:~# 
root@uso-PC:~# 
root@uso-PC:~# lvcreate -L 9.9G -n lv2 vg2
  Rounding up size to full physical extent 9.90 GiB
  Logical volume "lv2" created.

root@uso-PC:~# lvs
  LV   VG  Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv1  vg1 -wi-a----- 15.00g                                                    
  lv2  vg2 -wi-a-----  9.90g 

5. 格式化LVM并挂载

## 格式化类型任意选择,跟格式化硬盘一样
root@uso-PC:~# mkfs.ext4 /dev/vg1/lv1 
mke2fs 1.44.5 (15-Dec-2018)
Creating filesystem with 3932160 4k blocks and 983040 inodes
Filesystem UUID: 2c104e35-30db-4efd-a0eb-e14ba970fc1e
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208

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

root@uso-PC:~# 

root@uso-PC:~# mount /dev/vg1/lv1 /data1/
root@uso-PC:~# df -h
文件系统             容量  已用  可用 已用% 挂载点
udev                 3.9G     0  3.9G    0% /dev
tmpfs                796M  1.4M  795M    1% /run
/dev/sda5             20G  7.7G   13G   39% /
tmpfs                3.9G  5.9M  3.9G    1% /dev/shm
tmpfs                5.0M  4.0K  5.0M    1% /run/lock
tmpfs                3.9G     0  3.9G    0% /sys/fs/cgroup
/dev/sda3             21G  8.5G   11G   44% /recovery
/dev/sda1            488M  119M  335M   27% /boot
/dev/sda6             18G  1.7G   16G   10% /deepin/userdata
tmpfs                796M  4.0K  796M    1% /run/user/106
tmpfs                796M     0  796M    0% /run/user/0
/dev/mapper/vg1-lv1   15G   41M   14G    1% /data1

##  持久化存储一样的通过blkid /dev/mapper/vg1-lv1 ;获取uuid后写入到/ets/fstab中

动态扩容lvm

   扩容前先梳理一下步骤:

       1.  确认需要扩容的lvm所在哪个vg组;

        2.  确认该vg是否有足够的空间可以去扩容lvm;

                2.1  当该vg中空间充足时,直接执行第三步扩容LVM

                2.2   当该vg中空间不足时,先通过vgextend向该vg中添加pv物理卷,确保空间足够。

        3.    lvextend命令扩容lvm;

        4.  将新加的lvm空间格式化到lvm中。

(3,4步合并一起才算是扩容lvm)

1.  查看到VG1的空间还有4.99G

root@uso-PC:/data1# vgs
  VG  #PV #LV #SN Attr   VSize   VFree 
  vg1   2   1   0 wz--n-  19.99g  4.99g
  vg2   1   1   0 wz--n- <10.00g 96.00m

2.  直接扩容LVM

##  扩容钱vg1的剩余空间为4.99G
root@uso-PC:~# vgs
  VG  #PV #LV #SN Attr   VSize  VFree 
  vg1   2   1   0 wz--n- 19.99g  4.99g
  vg2   2   1   0 wz--n- 19.99g 96.00m
root@uso-PC:~#

##  扩容vg1下面的lv1
root@uso-PC:~# lvextend -L +4G /dev/vg1/lv1 
  Size of logical volume vg1/lv1 changed from 15.00 GiB (3840 extents) to 19.00 GiB (4864 extents).
  Logical volume vg1/lv1 successfully resized.
root@uso-PC:~# 


## 扩容后vg1下的剩余空间
root@uso-PC:~# vgs
  VG  #PV #LV #SN Attr   VSize  VFree   
  vg1   2   1   0 wz--n- 19.99g 1016.00m
  vg2   2   1   0 wz--n- 19.99g   96.00m
root@uso-PC:~#

3.  lvm扩容之后,再将扩容的增加的空间格式化。

        使用 resize2fs或xfs_growfs 对挂载目录在线扩容 resize2fs 针对文件系统ext2 ext3 ext4
xfs_growfs 针对文件系统xfs

##  查看lv1的文件系统类型为ext4
root@uso-PC:~# blkid /dev/mapper/vg1-lv1 
/dev/mapper/vg1-lv1: UUID="2c104e35-30db-4efd-a0eb-e14ba970fc1e" TYPE="ext4"
root@uso-PC:~# 


## 扩容格式化化前,挂载目录的空间
root@uso-PC:~# df -h
文件系统             容量  已用  可用 已用% 挂载点
udev                 3.9G     0  3.9G    0% /dev
tmpfs                796M  1.4M  795M    1% /run
/dev/sda5             20G  7.7G   13G   39% /
tmpfs                3.9G  5.9M  3.9G    1% /dev/shm
tmpfs                5.0M  4.0K  5.0M    1% /run/lock
tmpfs                3.9G     0  3.9G    0% /sys/fs/cgroup
/dev/sda3             21G  8.5G   11G   44% /recovery
/dev/sda1            488M  119M  335M   27% /boot
/dev/sda6             18G  1.7G   16G   10% /deepin/userdata
tmpfs                796M  4.0K  796M    1% /run/user/106
tmpfs                796M     0  796M    0% /run/user/0
/dev/mapper/vg1-lv1   15G   41M   14G    1% /data1    <==============
/dev/mapper/vg2-lv2   20G   56M   20G    1% /data2

# 格式化扩容
root@uso-PC:~# resize2fs /dev/mapper/vg1-lv1 
resize2fs 1.44.5 (15-Dec-2018)
Filesystem at /dev/mapper/vg1-lv1 is mounted on /data1; on-line resizing required
old_desc_blocks = 2, new_desc_blocks = 3
The filesystem on /dev/mapper/vg1-lv1 is now 4980736 (4k) blocks long.

root@uso-PC:~#

## 扩容后挂载目录的空间
root@uso-PC:~# df -h
文件系统             容量  已用  可用 已用% 挂载点
udev                 3.9G     0  3.9G    0% /dev
tmpfs                796M  1.4M  795M    1% /run
/dev/sda5             20G  7.7G   13G   39% /
tmpfs                3.9G  5.9M  3.9G    1% /dev/shm
tmpfs                5.0M  4.0K  5.0M    1% /run/lock
tmpfs                3.9G     0  3.9G    0% /sys/fs/cgroup
/dev/sda3             21G  8.5G   11G   44% /recovery
/dev/sda1            488M  119M  335M   27% /boot
/dev/sda6             18G  1.7G   16G   10% /deepin/userdata
tmpfs                796M  4.0K  796M    1% /run/user/106
tmpfs                796M     0  796M    0% /run/user/0
/dev/mapper/vg1-lv1   19G   44M   18G    1% /data1                    <=================
/dev/mapper/vg2-lv2   20G   56M   20G    1% /data2

至此扩容结束......

裁剪LVM大小

        逻辑卷裁剪不支持在线裁剪,必须先取消挂载

1.  裁剪前检查文件系统大小和vg大小

## 裁剪前文件系统大小
root@uso-PC:~# df -hT
文件系统            类型      容量  已用  可用 已用% 挂载点
udev                devtmpfs  3.9G     0  3.9G    0% /dev
tmpfs               tmpfs     796M  1.4M  795M    1% /run
/dev/sda5           xfs        20G  7.7G   13G   39% /
tmpfs               tmpfs     3.9G  5.9M  3.9G    1% /dev/shm
tmpfs               tmpfs     5.0M  4.0K  5.0M    1% /run/lock
tmpfs               tmpfs     3.9G     0  3.9G    0% /sys/fs/cgroup
/dev/sda3           ext4       21G  8.5G   11G   44% /recovery
/dev/sda1           ext4      488M  119M  335M   27% /boot
/dev/sda6           xfs        18G  1.7G   16G   10% /deepin/userdata
tmpfs               tmpfs     796M  4.0K  796M    1% /run/user/106
tmpfs               tmpfs     796M     0  796M    0% /run/user/0
/dev/mapper/vg1-lv1 ext4       19G   44M   18G    1% /data1               <========
/dev/mapper/vg2-lv2 xfs        20G   56M   20G    1% /data2      

## 裁剪前vg剩余大小
root@uso-PC:~# vgs
  VG  #PV #LV #SN Attr   VSize  VFree   
  vg1   2   1   0 wz--n- 19.99g 1016.00m                         <====================
  vg2   2   1   0 wz--n- 19.99g   96.00m                   

##  取消挂载
root@uso-PC:~# umount   /data1

2.  校验文件系统

##校验文件系统
root@uso-PC:~# e2fsck -f /dev/vg1/lv1 
e2fsck 1.44.5 (15-Dec-2018)
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/vg1/lv1: 12/1245184 files (0.0% non-contiguous), 105815/4980736 blocks
root@uso-PC:~#

3.  裁剪文件系统

# 裁剪文件系统
root@uso-PC:~# resize2fs /dev/vg1/lv1  10G
resize2fs 1.44.5 (15-Dec-2018)
Resizing the filesystem on /dev/vg1/lv1 to 2621440 (4k) blocks.
The filesystem on /dev/vg1/lv1 is now 2621440 (4k) blocks long.

root@uso-PC:~# 

4.  裁剪lvm大小

# 裁剪lvm
root@uso-PC:~# lvreduce -L 10G /dev/vg1/lv1 
  WARNING: Reducing active logical volume to 10.00 GiB.
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce vg1/lv1? [y/n]: y
  Size of logical volume vg1/lv1 changed from 19.00 GiB (4864 extents) to 10.00 GiB (2560 extents).
  Logical volume vg1/lv1 successfully resized.
root@uso-PC:~# 

5. 校验大小

# 裁剪后的文件系统大小
root@uso-PC:~# df -h
文件系统             容量  已用  可用 已用% 挂载点
udev                 3.9G     0  3.9G    0% /dev
tmpfs                796M  1.4M  795M    1% /run
/dev/sda5             20G  7.7G   13G   39% /
tmpfs                3.9G  5.9M  3.9G    1% /dev/shm
tmpfs                5.0M  4.0K  5.0M    1% /run/lock
tmpfs                3.9G     0  3.9G    0% /sys/fs/cgroup
/dev/sda3             21G  8.5G   11G   44% /recovery
/dev/sda1            488M  119M  335M   27% /boot
/dev/sda6             18G  1.7G   16G   10% /deepin/userdata
tmpfs                796M  4.0K  796M    1% /run/user/106
tmpfs                796M     0  796M    0% /run/user/0
/dev/mapper/vg2-lv2   20G   56M   20G    1% /data2
/dev/mapper/vg1-lv1  9.8G   37M  9.3G    1% /data1             <=====

root@uso-PC:~# vgs
  VG  #PV #LV #SN Attr   VSize  VFree 
  vg1   2   1   0 wz--n- 19.99g  9.99g                  <============
  vg2   2   1   0 wz--n- 19.99g 96.00m
root@uso-PC:~# 


版权声明:本文为qq_43714097原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。