你必须知道的Linux动态管理存储机制LVM

一、什么是LVM?

  LVM(Logical Volume Manager),逻辑卷管理。它是Linux中对磁盘分区的一种管理机制。相信大家会有疑问,为什么要有这样一个管理机制?那是因为

  很多Linux使用者安装操作系统时都会遇到这样的困境:如何精确评估和分配各个硬盘分区的容量,分得太大,会浪费硬盘空间;分得太小,又会面临不够使用的情况。一旦系统分区不够用时,我们就不得不备份、删除相关数据,甚至被迫重新规划存储方案并重装操作系统,以满足应用系统的需要。
  基于这样的需求,LVM就为我们提供了一种动态管理存储的机制。

二、LVM原理

  LVM 为我们提供了逻辑概念上的磁盘,使得文件系统不再关心底层物理磁盘的概念。了解LVM原理,我们首先得了解几种基本的LVM术语

名 称意 义
PV(Physical Volume)物理卷,真实的物理硬盘或分区
VG(Volume Group)卷组,多个物理卷组成的一块大的逻辑硬盘
LV(Logical Volume)逻辑卷,卷组划分的多个可以使用的分区
PE(Physical Extend)物理扩展块,物理卷中可用于分配的最小存储单元,默认为4MB
LE(Logical Extend)逻辑扩展块,逻辑卷中可用于分配的最小存储单元,在同一个卷组中,LE的大小和PE是相同的,并且一一对应

  紧接着我们来看看LVM的工作原理是什么呢?结合这张图来为大家解释!
在这里插入图片描述
  LVM是在硬盘分区之上建立一个逻辑层,这个逻辑层让多个硬盘或分区看起来像一块逻辑硬盘,然后将这块逻辑硬盘分成逻辑卷之后使用,从而大大提高了分区的灵活性。

三、LVM管理操作?

1、建立(删除、查看)物理卷(PV)

  ① 建立物理卷

pvcreate命令语法:vgcreate 设备文件名

[root@localhost ~]# yum install -y lvm2    //安装LVM2(LVM的管理工具)
[root@localhost ~]# pvcreate /dev/sdb{1,2,3,4}    //将分区建立成为物理卷
  Physical volume "/dev/sdb1" successfully created
  Physical volume "/dev/sdb2" successfully created
  Physical volume "/dev/sdb3" successfully created
  Physical volume "/dev/sdb4" successfully created

  ② 删除物理卷

pvremove命令语法:vgcreate 物理卷名

//删除物理卷时,物理卷必须不属于任何卷组
[root@localhost ~]# pvmove /dev/sdb4    //转移数据到其他PV
[root@localhost ~]# pvremove /dev/sdb4    //删除物理卷sdb4
  Labels on physical volume "/dev/sdb4" successfully wiped

  ③ 查看物理卷

[root@localhost ~]# pvs    //查看物理卷的概要信息
  PV         VG   Fmt  Attr PSize   PFree
  /dev/sdb1  myvg lvm2 a--u 108.00m   8.00m
  /dev/sdb2  myvg lvm2 a--u 108.00m 108.00m
  /dev/sdb3  myvg lvm2 a--u 108.00m 108.00m
[root@localhost ~]# pvdisplay    //查看物理卷的详细信息
  --- Physical volume ---
  PV Name               /dev/sdb1
  VG Name               myvg
  PV Size               109.79 MiB / not usable 1.79 MiB
  Allocatable           yes
  PE Size               4.00 MiB
  Total PE              27
  Free PE               2
  Allocated PE          25
  PV UUID               PXC8sh-tCv4-KQ5S-Hwo4-FrT1-erxf-0QtmZ8
  ...    //省略/dev/sdb{2,3}的详细信息
[root@localhost ~]# pvscan    //扫描所有硬盘上的物理卷
  PV /dev/sdb1   VG myvg            lvm2 [108.00 MiB / 8.00 MiB free]
  PV /dev/sdb2   VG myvg            lvm2 [108.00 MiB / 108.00 MiB free]
  PV /dev/sdb3   VG myvg            lvm2 [108.00 MiB / 108.00 MiB free]
  Total: 3 [324.00 MiB] / in use: 3 [324.00 MiB] / in no VG: 0 [0   ]

2、建立(增加 / 减小容量、删除、查看)卷组(VG)

  ① 建立卷组

vgcreate命令语法:vgcreate [-s PE 大小] 卷组名 物理卷名
  其中,-s用来指定PE的大小,单位可以是 MB、GB、TB 等,默认为4MB。

[root@localhost ~]# vgcreate myvg /dev/sdb1 /dev/sdb2    //将物理卷sdb{1,2}加入卷组myvg
  Volume group "myvg" successfully created
  

  ② 增加卷组容量

vgextend命令语法:vgextend 卷组名 物理卷名

[root@localhost ~]# vgextend myvg /dev/sdb3    //将物理卷sdb3加入卷组myvg
  Volume group "myvg" successfully extended

  ③ 减少卷组容量

vgreduce命令语法:vgreduce 卷组名 物理卷名

[root@localhost ~]# vgreduce myvg /dev/sdb3    //将物理卷sdb3从卷组myvg中移除
  Removed "/dev/sdb3" from volume group "myvg"

  ④ 删除卷组

vgremove命令语法:vgremove 卷组名

//删除卷组时,卷组中必须没有任何逻辑卷
[root@localhost ~]# vgcreate myvg1 /dev/sdb3    //建立测试卷组myvg1
  Volume group "myvg1" successfully created
[root@localhost ~]# vgremove myvg1    //删除测试卷组myvg1
  Volume group "myvg1" successfully removed

  ⑤ 查看卷组

[root@localhost ~]# vgs    //查看卷组的概要信息
  VG   #PV #LV #SN Attr   VSize   VFree
  myvg   2   1   0 wz--n- 216.00m 64.00m
[root@localhost ~]# vgdisplay    //查看卷组的详细信息
  --- Volume group ---
  VG Name               myvg
  System ID
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  6
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               0
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               216.00 MiB
  PE Size               4.00 MiB
  Total PE              54
  Alloc PE / Size       38 / 152.00 MiB
  Free  PE / Size       16 / 64.00 MiB
  VG UUID               jSVIZS-MLeY-fOox-pAJZ-hLLd-vtM3-YaK2Hu
[root@localhost ~]# vgscan    //扫描所有硬盘上的卷组
  Reading all physical volumes.  This may take a while...
  Found volume group "myvg" using metadata type lvm2

3、建立(增加 / 减小容量、删除、查看)逻辑卷(LV)

  ① 建立逻辑卷

lvcreate命令语法:lvcreate [选项] [-n 逻辑卷名] 卷组名
其中,常用选项:
  -n 逻辑卷名:指定逻辑卷名称;
  -L 大小:指定逻辑卷大小,直接指定容量大小,单位可以是 MB、GB、TB 等;
  -l 数量:指定逻辑卷大小,通过指定PE数量来决定逻辑卷大小;
  -s:创建快照;

[root@localhost ~]# lvcreate -L 100M -n mylv myvg    //使用卷组myvg建立大小为100M的逻辑卷mylv
  Logical volume "mylv" created.                                               

  ② 增加逻辑卷容量

lvresize命令语法:lvresize [选项] 逻辑卷的设备文件名
其中,常用选项:
  -L 大小:调整逻辑卷大小,直接指定容量大小;
  -l 数量:调整逻辑卷大小,通过指定PE数量来决定逻辑卷大小;
它们都可以使用绝对和相对两种方式来设置:
  #:表示调整为 # 大小或 # 个PE大小的容量;
  +/- #:表示增加/减少 # 大小或增加/减少 # 个PE大小的容量。

  有足够大的VG就可以增加LV容量。

[root@localhost ~]# lvresize -L +50M /dev/myvg/mylv    //增加逻辑卷mylv的大小到150M
  Rounding size to boundary between physical extents: 52.00 MiB.
  Size of logical volume myvg/mylv changed from 100.00 MiB (25 extents) to 152.00 MiB (38 extents).
  Logical volume mylv successfully resized.
[root@localhost ~]# df -h /dev/myvg/mylv    //查看硬盘信息
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/myvg-mylv
                       93M  1.6M   87M   2% /mnt/mylv    //mylv分区的大小并未改变
//逻辑卷的大小虽然改变了,但是挂载磁盘大小依然是100M,如果要让分区使用这个新的逻辑卷,必须给新增的LV创建文件系统。
[root@localhost ~]# resize2fs /dev/myvg/mylv    //调整文件系统大小
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/myvg/mylv is mounted on /mnt/mylv; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/myvg/mylv to 155648 (1k) blocks.
The filesystem on /dev/myvg/mylv is now 155648 blocks long.

[root@localhost ~]# df -h /dev/myvg/mylv
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/myvg-mylv
                      144M  1.6M  135M   2% /mnt/mylv

  ③ 减少逻辑卷容量

  减少LV容量是一个比较危险的操作,所以一般并不推荐减少逻辑卷的容量,因为这有可能导致数据丟失。需要按照以下步骤减少LV容量:

  ① 卸载逻辑卷;
  ② 使用 e2fsck 命令强制检测逻辑卷剩余空间;
  ③ 使用 resize2fs 命令减小文件系统;
  ④ 使用 lvresize 命令减小逻辑卷容量;
  ⑤ 挂载使用。

[root@localhost ~]# umount /dev/myvg/mylv    //卸载逻辑卷mylv
umount: /dev/myvg/mylv: not mounted
[root@localhost ~]# e2fsck -f /dev/myvg/mylv    //强制检测逻辑卷剩余空间
e2fsck 1.41.12 (17-May-2010)
/dev/myvg/mylv: recovering journal
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/myvg/mylv: ***** FILE SYSTEM WAS MODIFIED *****
/dev/myvg/mylv: 11/37544 files (9.1% non-contiguous), 10390/155648 blocks
[root@localhost ~]# resize2fs /dev/myvg/mylv 100M    //减少逻辑卷文件系统大小
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/myvg/mylv to 102400 (1k) blocks.
The filesystem on /dev/myvg/mylv is now 102400 blocks long.
[root@localhost ~]# lvresize -L -50M /dev/myvg/mylv    //减少逻辑卷容量
  Rounding size to boundary between physical extents: 48.00 MiB.
  WARNING: Reducing active logical volume to 108.00 MiB.
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce myvg/mylv? [y/n]: y
  Size of logical volume myvg/mylv changed from 156.00 MiB (39 extents) to 108.00 MiB (27 extents).
  Logical volume mylv successfully resized.
[root@localhost ~]# mount /dev/myvg/mylv /mnt/mylv/    //挂载
[root@localhost ~]# df -h /dev/myvg/mylv    //查看硬盘信息
/dev/mapper/myvg-mylv
                       93M  1.6M   87M   2% /mnt/mylv

tips:文件系统大小和逻辑卷大小一定要保持一致才行。如果逻辑卷大于文件系统,就会由于部分区域未格式化成文件系统从而造成空间的浪费;如果逻辑卷小于文件系统,那么数据就会出现问题

  ④ 删除逻辑卷

  删除逻辑卷,其中的所有数据就会丢失。需要按照以下步骤删除LV:

  ① 卸载逻辑卷;
  ② 如果/etc/fstab中有逻辑卷的挂载信息(如果之前并未添加可以不用理会),需要先删除,否则系统有可能不能启动;
  ③ 使用lvremove命令删除逻辑卷。

lvremove命令语法:lvremove 逻辑卷名

[root@localhost ~]# umount /dev/myvg/mylv    //卸载逻辑卷mylv
[root@localhost ~]# lvremove /dev/myvg/mylv    //删除逻辑卷mylv
Do you really want to remove active logical volume mylv? [y/n]: y
  Logical volume "mylv" successfully removed

  ⑤ 查看逻辑卷

[root@localhost ~]# lvs            //查看逻辑卷的概要信息
  LV   VG   Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  mylv myvg -wi-ao---- 108.00m     
[root@localhost ~]# lvdisplay        //查看逻辑卷的详细信息
  --- Logical volume ---
  LV Path                /dev/myvg/mylv
  LV Name                mylv
  VG Name                myvg
  LV UUID                7xpEK7-ODNn-DnSX-Eshz-zo4I-zitd-2h1aSM
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2020-04-03 04:36:05 +0800
  LV Status              available
  # open                 1
  LV Size                108.00 MiB
  Current LE             27
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0
[root@localhost ~]# lvscan    //扫描所有硬盘上的逻辑卷
  ACTIVE            '/dev/myvg/mylv' [108.00 MiB] inherit

三、如何建立LVM?

  需要按照以下步骤建立LVM:

  ① 把物理硬盘分成分区;
  ② 把物理分区建立为物理卷(PV);
  ③ 把物理卷整合为卷组(VG),卷组可以动态地调整大小,把物理分区加入卷组或从卷组中删除;
  ④ 把卷组再划分为逻辑卷(LV),逻辑卷也可以直接调整大小。
  ⑤ 逻辑卷可以想象为分区,所以也需要格式化和挂载。

1、建立物理分区

[root@localhost ~]# fdisk /dev/sdb    //在/dev/sdb硬盘中新建两个分区,每个分区大小为100M
Command (m for help): n    //创建分区
Command action
   e   extended
   p   primary partition (1-4)
p    //分区类型选择主分区
Partition number (1-4): 1    //设置分区号为1
First cylinder (1-130, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-130, default 130): +100M    //设置100M大小

...    //剩下一个分区创建过程省略

Command (m for help): t    //更改分区格式
Partition number (1-4): 1    //选择分区1
Hex code (type L to list codes): 8e    //8e为Linux LVM格式
Changed system type of partition 1 to 8e (Linux LVM)

...    //剩下一个分区格式修改过程省略

Command (m for help): p    //查询创建结果

Disk /dev/sdb: 1073 MB, 1073741824 bytes
255 heads, 63 sectors/track, 130 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x2d354121

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1          14      112423+  8e  Linux LVM
/dev/sdb2              15          28      112455   8e  Linux LVM

Command (m for help): w    //保存退出
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[root@localhost ~]# partx -a /dev/sdb    //重读磁盘分区表信息

2、建立物理卷

[root@localhost ~]# pvcreate /dev/sdb{1,2}    //将分区建立成为物理卷
  Physical volume "/dev/sdb1" successfully created
  Physical volume "/dev/sdb2" successfully created
[root@localhost ~]# pvs    //查看物理卷信息
  PV         VG   Fmt  Attr PSize   PFree
  /dev/sdb1  myvg lvm2 a--u 108.00m 108.00m
  /dev/sdb2  myvg lvm2 a--u 108.00m 108.00m

3、建立卷组

[root@localhost ~]# vgcreate myvg /dev/sdb{1,2}    //将物理卷sdb{1,2}加入卷组myvg
  Volume group "myvg" successfully created
[root@localhost ~]# vgs    //查看卷组信息
  VG   #PV #LV #SN Attr   VSize   VFree
  myvg   2   0   0 wz--n- 216.00m 216.00m

4、建立逻辑卷

[root@localhost ~]# lvcreate -L 200M -n mylv myvg    //使用卷组myvg建立大小为200M的逻辑卷mylv
  Logical volume "mylv" created.
[root@localhost ~]# lvs    //查看逻辑卷信息
  LV   VG   Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  mylv myvg -wi-a----- 200.00m

5、逻辑卷的格式化、挂载

[root@localhost ~]# mkfs.ext4 /dev/myvg/mylv    //格式化
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
51200 inodes, 204800 blocks
10240 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=67371008
25 block groups
8192 blocks per group, 8192 fragments per group
2048 inodes per group
Superblock backups stored on blocks:
        8193, 24577, 40961, 57345, 73729

Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 31 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
[root@localhost ~]# mkdir /mnt/mylv    //创建挂载点
[root@localhost ~]# mount /dev/myvg/mylv /mnt/mylv/    //挂载
[root@localhost ~]# df -Th    //查看硬盘信息
[root@localhost ~]# df -Th
Filesystem           Type     Size  Used Avail Use% Mounted on
/dev/sda2            ext4     9.8G  814M  8.5G   9% /
tmpfs                tmpfs    491M     0  491M   0% /dev/shm
/dev/sda1            ext4     190M   31M  150M  17% /boot
/dev/sr0             iso9660  3.7G  3.7G     0 100% /media
`/dev/mapper/myvg-mylv
                     ext4     190M  1.6M  179M   1% /mnt/mylv`

  • 22
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值