Linux系统管理:LVM逻辑卷管理详细实验过程(适合新手)

前言:

Linux用户安装Linux操作系统时遇到的一个常见的难以决定的问题就是如何正确地评估各分区大小,以分配合适的硬盘空间。普通的磁盘分区管理方式在逻辑分区划分好之后就无法改变其大小,当一个逻辑分区存放不下某个文件时,这个文件因为受上层文件系统的限制,也不能跨越多个分区来存放,所以也不能同时放到别的磁盘上。而遇到出现某个分区空间耗尽时,解决的方法通常是使用符号链接,或者使用调整分区大小的工具,但这只是暂时解决办法。

本篇博客主要介绍了通过管理LVM(逻辑卷)功能,让用户在无需停机的情况下可以方便的调整各个分区大小。

一、LVM( Logical Volume Manager )

逻辑卷管理器本质上是一个虚拟设备驱动,是在内核中块设备和物理设备之间添加的一个新的抽象层次,它可以将几块磁盘组合起来形成一个存储池或卷组。

特性:根据当前使用情况, 动态增加磁盘容量,从而提高磁盘管理的灵活性,有点类似微软的跨区卷

缺点:如果有一块磁盘损坏,数据丢失

Ps:/boot分区用于存放引导文件,不能基于LVM创建

图形界面管理工具:

system-config-lvm

二、LVM机制的基本概念

2.1 基本概念

PV(Physical Volume,物理卷):物理卷是LVM机制的基本存储设备,通常对应为一个普通分区或整个硬盘。创建物理卷时,会在分区或者硬盘的头部创建一给保留区块,用于记录LVM的属性,并把存储空间分割成默认为4MB的基本单元(简称PE),从而构成物理卷,物理卷一般直接使用设备文件名称,如/dev/sdb1、/dev/sdb2、/dev/sdd等。

VG(Volume Group,卷组):由一个或多个物理卷组成一个整体,此整体称为卷组,在卷组中可以动态添加或一处物理卷,许多个物理卷可以分别组成不同的卷组,卷组名称由用户自行定义。

LV (Logical Volume,逻辑卷):逻辑卷建立在卷组之上,与物理卷没有直接关系,对于逻辑卷来说,每个卷组就是一个整体,从整个整体中划分出一小块空间,作为用户创建文件系统的基础,这一小块空间就称为逻辑卷,使用mkfs等工具在逻辑卷上创建文件系统以后,就可以挂载到Linux系统中的目录下使用。
在这里插入图片描述

创建LVM的顺序:

1、添加磁盘,将每个磁盘分区,设置格式

2、创建物理卷PV

3、创建卷组VG

4、创建逻辑卷LVM

5、创建文件系统、格式化LVM并挂载

6、动态调整LVM分区大小

2.2 主要命令

主要命令格式:

pvcreate 设备名1 设备名2

vgceate 卷组名 物理卷名1 物理卷名2

lvcreate -L 容量大小 -n 逻辑卷名 卷组名

lvextend -L +大小 /dev/卷组名/逻辑卷名

常用的LVM管理命令如下:
在这里插入图片描述

三、LVM创建(实验)

3.1 添加磁盘,将每个磁盘分区,设置格式

添加磁盘,可以根据需要自由选择磁盘空间大小,添加完成后因为Shell终端不能直接识别到添加的磁盘,所以我们这里在Shell终端上输入“reboot”(刷新/重启)。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
重启完成后,我们到/dev目录下查看磁盘信息,此时已识别到新添加的磁盘,(此处我们添加3块磁盘)示例:

[root@localhost ~]# cd /dev
[root@localhost dev]# fdisk -l  (查看磁盘信息)

磁盘 /dev/sda:42.9 GB, 42949672960 字节,83886080 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000a2ffa

   设备 Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048    12584959     6291456   83  Linux
/dev/sda2        12584960    54527999    20971520   83  Linux
/dev/sda3        54528000    62916607     4194304   82  Linux swap / Solaris
/dev/sda4        62916608    83886079    10484736    5  Extended
/dev/sda5        62918656    83886079    10483712   83  Linux

磁盘 /dev/sdc:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节


磁盘 /dev/sdd:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节


磁盘 /dev/sdb:42.9 GB, 42949672960 字节,83886080 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节

[root@localhost dev]# 

下一步我们进行磁盘分区,此处只示例一块磁盘的设置步骤(其他2块磁盘一致),我们将所有磁盘空间都给第一块分区,示例:

[root@localhost dev]# fdisk /dev/sdb   (进入并设置磁盘sdb)
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。

Device does not contain a recognized partition table
使用磁盘标识符 0x4c593d51 创建新的 DOS 磁盘标签。

命令(输入 m 获取帮助):n   (新建分区)
Partition type:
   p   primary (0 primary, 0 extended, 4 free)  (主分区)
   e   extended  (扩展分区)
Select (default p): p
分区号 (1-4,默认 1):  
起始 扇区 (2048-83886079,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-83886079,默认为 83886079):
将使用默认值 83886079   
分区 1 已设置为 Linux 类型,大小设为 40 GiB   (将所有空间全分配给第一个分区)

命令(输入 m 获取帮助):p   (查询磁盘信息)

磁盘 /dev/sdb:42.9 GB, 42949672960 字节,83886080 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x4c593d51

   设备 Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    83886079    41942016   83  Linux

命令(输入 m 获取帮助):t   (设置分区的格式)
已选择分区 1
Hex 代码(输入 L 列出所有代码):8e     (LVM格式)
已将分区“Linux”的类型更改为“Linux LVM”

命令(输入 m 获取帮助):p  (查看分区信息)

磁盘 /dev/sdb:42.9 GB, 42949672960 字节,83886080 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x4c593d51

   设备 Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    83886079    41942016   8e  Linux LVM

命令(输入 m 获取帮助):w  (保存)

配置完成后输入fdisk -l 查看。此时我们添加的3块磁盘全部分区完成,并且格式均为LVM。示例:

[root@localhost dev]# fdisk -l   (查看磁盘信息)

磁盘 /dev/sda:42.9 GB, 42949672960 字节,83886080 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000a2ffa

   设备 Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048    12584959     6291456   83  Linux
/dev/sda2        12584960    54527999    20971520   83  Linux
/dev/sda3        54528000    62916607     4194304   82  Linux swap / Solaris
/dev/sda4        62916608    83886079    10484736    5  Extended
/dev/sda5        62918656    83886079    10483712   83  Linux

磁盘 /dev/sdc:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0xebd91e21

   设备 Boot      Start         End      Blocks   Id  System
/dev/sdc1            2048    41943039    20970496   8e  Linux LVM

磁盘 /dev/sdd:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x3d73f030

   设备 Boot      Start         End      Blocks   Id  System
/dev/sdd1            2048    41943039    20970496   8e  Linux LVM

磁盘 /dev/sdb:42.9 GB, 42949672960 字节,83886080 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x4c593d51

   设备 Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    83886079    41942016   8e  Linux LVM
[root@localhost dev]# 

3.2、创建物理卷PV

现在我们设置物理卷,输入pvcreate /dev/sd{b…d}1 (简写格式,代表将sdb1、sdc1、sdd1都设置为物理卷),然后我们查看下物理卷信息,命令为:pvsan(扫描物理卷)。示例:

[root@localhost dev]# pvcreate /dev/sd{b..d}1 
  Physical volume "/dev/sdb1" successfully created.
  Physical volume "/dev/sdc1" successfully created.
  Physical volume "/dev/sdd1" successfully created.
[root@localhost dev]# pvscan
  PV /dev/sdb1                      lvm2 [<40.00 GiB]
  PV /dev/sdc1                      lvm2 [<20.00 GiB]
  PV /dev/sdd1                      lvm2 [<20.00 GiB]
  Total: 3 [<80.00 GiB] / in use: 0 [0   ] / in no VG: 3 [<80.00 GiB] 
  (Total:数量,in use:已使用数量,in no VG:未使用数量,未使用的磁盘大小总和)

此处我们也可以输入pvdisplay(显示物理卷详细信息),示例:

[root@localhost dev]# pvdisplay
  "/dev/sdb1" is a new physical volume of "<40.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb1
  VG Name               
  PV Size               <40.00 GiB  (物理卷空间大小)
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               IoKKIi-6Ks4-6k3J-vcCj-i8dJ-2aEo-lZ8B5U
   
  "/dev/sdc1" is a new physical volume of "<20.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdc1
  VG Name               
  PV Size               <20.00 GiB  (物理卷空间大小)
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               1zfA9w-fSKe-BtZz-w3ig-fPlm-z82H-mIRwuS
   
  "/dev/sdd1" is a new physical volume of "<20.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdd1
  VG Name               
  PV Size               <20.00 GiB  (物理卷空间大小)
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               gTicJ7-c1Jr-hmHU-tiPx-jbGS-rk4p-5h5UcG
3.3、创建卷组VG

这一步我们设置将3个物理卷组成一个卷组,此卷组命名为:mailbox。命令:vgcreate mailbox /dev/sd{b…d}1,示例:

[root@localhost dev]# vgcreate mailbox /dev/sd{b..d}1
  Volume group "mailbox" successfully created

此时我们可以再输入命令:pvscan(查看物理卷信息),可见我们新添加的磁盘已被分在mailbox卷组中。示例:

[root@localhost dev]# pvscan
  PV /dev/sdb1   VG mailbox         lvm2 [<40.00 GiB / <40.00 GiB free] 
  PV /dev/sdc1   VG mailbox         lvm2 [<20.00 GiB / <20.00 GiB free]
  PV /dev/sdd1   VG mailbox         lvm2 [<20.00 GiB / <20.00 GiB free]
  Total: 3 [<79.99 GiB] / in use: 3 [<79.99 GiB] / in no VG: 0 [0   ]  (in use 已使用数量为3,并且属于mailbox卷组)
[root@localhost dev]# 

我们使用查看详细信息命令:vgdisplay。示例:

[root@localhost dev]# vgdisplay
  --- Volume group ---
  VG Name               mailbox
  System ID             
  Format                lvm2
  Metadata Areas        3
  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                3
  Act PV                3
  VG Size               <79.99 GiB
  PE Size               4.00 MiB   (此处可见每个单元格PE的大小为4MB)
  Total PE              20477
  Alloc PE / Size       0 / 0   
  Free  PE / Size       20477 / <79.99 GiB
  VG UUID               ldz1Zw-CrVt-5C4h-5xAs-mbVE-mh5J-d5PICp  (卷组的ID号,便于系统识别)
   
[root@localhost dev]# 

3.4、创建逻辑卷LVM

现在我们可以创建逻辑卷,命令为:lvcreate -L 25G -n mbox01 mailbox。(lvcreate:创建LVM。-L 25G :设置逻辑卷大小为25G。 -n:逻辑卷名字。mbox01:划分逻辑卷的卷组)

[root@localhost dev]# lvcreate -L 25G -n mbox01 mailbox 
  Logical volume "mbox01" created.

创建成功后我们可以查看到划分的逻辑卷

首先我们在/dev目录下ls,已将可以查看到我们的mailbox卷组(需要划分LVM后才可以查看到)

然后我们可以进入mailbox,命令:cd/dev/mailbox,此时我么可以看到我们新建的逻辑分区。

示例:

[root@localhost dev]# ls
agpgart        cpu              hidraw0       lp1              network_throughput  rfkill  sdb1  shm       tty10  tty2   tty29  tty38  tty47  tty56  tty8     usbmon1  vcsa1        vmci
autofs         cpu_dma_latency  hpet          lp2              null                rtc     sdc   snapshot  tty11  tty20  tty3   tty39  tty48  tty57  tty9     usbmon2  vcsa2        vsock
block          crash            hugepages     lp3              nvram               rtc0    sdc1  snd       tty12  tty21  tty30  tty4   tty49  tty58  ttyS0    vcs      vcsa3        zero
bsg            disk             hwrng         mailbox          oldmem              sda     sdd   sr0       tty13  tty22  tty31  tty40  tty5   tty59  ttyS1    vcs1     vcsa4
btrfs-control  dm-0             initctl       mapper           port                sda1    sdd1  stderr    tty14  tty23  tty32  tty41  tty50  tty6   ttyS2    vcs2     vcsa5
bus            dri              input         mcelog           ppp                 sda2    sg0   stdin     tty15  tty24  tty33  tty42  tty51  tty60  ttyS3    vcs3     vcsa6
cdrom          fb0              kmsg          mem              ptmx                sda3    sg1   stdout    tty16  tty25  tty34  tty43  tty52  tty61  uhid     vcs4     vfio
char           fd               log           mqueue           pts                 sda4    sg2   tty       tty17  tty26  tty35  tty44  tty53  tty62  uinput   vcs5     vga_arbiter
console        full             loop-control  net              random              sda5    sg3   tty0      tty18  tty27  tty36  tty45  tty54  tty63  urandom  vcs6     vhci
core           fuse             lp0           network_latency  raw                 sdb     sg4   tty1      tty19  tty28  tty37  tty46  tty55  tty7   usbmon0  vcsa     vhost-net
[root@localhost dev]# cd mailbox
[root@localhost mailbox]# ls
mbox01   (创建的LVM)
[root@localhost mailbox]# 

我们可以在查询一下LVM的详细信息

[root@localhost /]# lvdisplay
  --- Logical volume ---
  LV Path                /dev/mailbox/mbox01
  LV Name                mbox01
  VG Name                mailbox
  LV UUID                NrOTtL-ONTP-5cws-zIWO-olLX-VCex-aEpSRL
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2019-11-06 17:15:02 +0800
  LV Status              available
  # open                 0
  LV Size                25.00 GiB
  Current LE             6400
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0
   

3.5、创建文件系统、格式化LVM并挂载

我们在格式化之前首先在其他目录创建一个子目录,命令:mkdir /opt/mbox2。示例:

[root@localhost dev]# mkdir /opt/mbox2
[root@localhost dev]# ls /opt
demo01  mbox2  rh

然后格式化逻辑卷,格式为xfs,命令为:mkfs -t xfs /dev/mailbox/mbox01.示例:

[root@localhost dev]# mkfs -t xfs /dev/mailbox/mbox01
meta-data=/dev/mailbox/mbox01    isize=512    agcount=4, agsize=1638400 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=6553600, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=3200, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

然后设置自动开机自动挂载,命令:vim /etc/fstab,设置开机自动挂载。示例:
在这里插入图片描述

设置完成后输入:mount -a 自动重新挂载,然后输入df -hT查询挂在信息。示例:

[root@localhost dev]# mount -a   (自动重新挂载)
[root@localhost dev]# df -h  (查询挂在信息) 
文件系统                    容量  已用  可用 已用% 挂载点
/dev/sda2                    20G  4.5G   16G   23% /
devtmpfs                    898M     0  898M    0% /dev
tmpfs                       912M     0  912M    0% /dev/shm
tmpfs                       912M  9.1M  903M    1% /run
tmpfs                       912M     0  912M    0% /sys/fs/cgroup
/dev/sda5                    10G   38M   10G    1% /home
/dev/sda1                   6.0G  174M  5.9G    3% /boot
tmpfs                       183M  4.0K  183M    1% /run/user/42
tmpfs                       183M   28K  183M    1% /run/user/0
/dev/sr0                    4.3G  4.3G     0  100% /run/media/root/CentOS 7 x86_64
/dev/mapper/mailbox-mbox01   25G   33M   25G    1% /opt/mbox2

四、动态调整LVM分区大小

假设现在逻辑分区mbox01现在的空间不够,我们就需要用到扩展逻辑空间,我们先扩容LVM(逻辑卷)5G示例:

[root@localhost mbox2]# lvextend -L +5G /dev/mailbox/mbox01 
  Size of logical volume mailbox/mbox01 changed from 25.00 GiB (6400 extents) to 30.00 GiB (7680 extents).
[root@localhost dev]# df -hT
文件系统                   类型      容量  已用  可用 已用% 挂载点
/dev/sda2                  xfs        20G  4.5G   16G   23% /
devtmpfs                   devtmpfs  898M     0  898M    0% /dev
tmpfs                      tmpfs     912M     0  912M    0% /dev/shm
tmpfs                      tmpfs     912M  9.0M  903M    1% /run
tmpfs                      tmpfs     912M     0  912M    0% /sys/fs/cgroup
/dev/sda5                  xfs        10G   38M   10G    1% /home
/dev/sda1                  xfs       6.0G  174M  5.9G    3% /boot
tmpfs                      tmpfs     183M   24K  183M    1% /run/user/0
/dev/sr0                   iso9660   4.3G  4.3G     0  100% /run/media/root/CentOS 7 x86_64
/dev/mapper/mailbox-mbox01 xfs        25G   33M   25G    1% /opt/mbox2  (查询显示我们配置的5G暂时未扩容成功)

查询显示我们配置的5G暂时未扩容成功,这个时候我们继续输入命令:resize2fs /dev/mailbox/mbox01,(resize2fs为文件系统重定义大小工具) 一般来说,我们可以直接配置成功,但是在此我们说一个常见问题,我们现在输入命令后,系统报错,如图:

[root@localhost dev]# resize2fs /dev/mailbox/mbox01 (文件重定义大小)
resize2fs 1.42.9 (28-Dec-2013)
resize2fs: Bad magic number in super-block 当尝试打开 /dev/mailbox/mbox01 时
找不到有效的文件系统超级块.
(系统报错)

这个时候我们可以检查两点,第一,输入cat /etc/fstab,检查我们配置的挂载格式是否未“xfs”,示例:

[root@localhost dev]# cat /etc/fstab

#
# /etc/fstab
# Created by anaconda on Sun Oct 27 15:47:27 2019
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=1cdaa1f7-8d44-4a00-b153-b0ba1b763ba2 /                       xfs     defaults        0 0
UUID=32aee843-60bd-43b1-94f0-b9af529c2744 /boot                   xfs     defaults        0 0
UUID=07145df9-e2e8-4e89-b08e-1fa3aac7dfc4 /home                   xfs     defaults        0 0
UUID=13e8b5ea-7f99-4459-a180-8c11e6d3e543 swap                    swap    defaults        0 0
/dev/mailbox/mbox01	/opt/mbox2	xfs	defaults	0 0
(我们手工配置的命令)

经查询格式配置没有问题,这个时候报错的原因多数是因为resize2fs读取不了xfs格式,这个时候我们可以使用另一个同步文件的命令:xfs_growfs /dev/mailbox/mbox01。示例:

[root@localhost dev]# xfs_growfs /dev/mailbox/mbox01  (同步文件)
meta-data=/dev/mapper/mailbox-mbox01 isize=512    agcount=4, agsize=1638400 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=6553600, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=3200, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 6553600 to 7864320

我们再次通过查询挂载信息查看逻辑卷的容量,如图可知,扩容已成功。
在这里插入图片描述

总结:

我们简单介绍了LVM的概念、PV、VG、LV的配置、查询和动态调整逻辑卷的大小,其中有一些知识点,比如开机自动挂载的设置在上一篇或上几篇的博客中均有介绍。

在扩容LVM时,我们要格外注意格式问题,命令中存在不能识别部分格式的问题,我们可以通过大量学习、查询相关信息获取到我们需要的内互相学习,互相成长~。

发布了48 篇原创文章 · 获赞 46 · 访问量 6630

猜你喜欢

转载自blog.csdn.net/weixin_45726050/article/details/102945016
今日推荐