LVM逻辑卷管理器

发布于:2024-04-11 ⋅ 阅读:(23) ⋅ 点赞:(0)

LVM是Linux系统对硬盘分区进行管理的一种机制,在硬盘分区和文件系统之间添加了一个逻辑层,它提供了一个抽象的卷组,可以把多块硬盘进行卷组合并。这样,用户无需关心物理硬盘设备的底层架构和布局,就可以实现对硬盘分区的动态调整。

常用的LVM部署命令

功能 物理卷管理命令pv 卷组管理命令vg 逻辑卷管理命令lv
scan扫描 pvscan vgscan lvscan
create建立 pvcreate vgcreate lvcreate
display显示 pvdisplay vgdisplay lvdisplay
remove删除 pvremove vgremove lvremove
extend扩展 - vgextend lvextend
reduce缩小 - vgreduce lvreduce

实现LVM:

一、物理卷、卷组、逻辑卷的建立

首先在虚拟机上添加两块硬盘。

一直点下一步下一步,添加两块是20G的硬盘。点确定!不要点叉!

1.1 通过fdisk建立LVM类型的分区。

分区(也可以不分区直接用),可以reboot重启一下后。输入lsblk能看到多了两块硬盘sdb,sdc

[root@localhost ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   60G  0 disk 
├─sda1            8:1    0    4G  0 part /boot
└─sda2            8:2    0   54G  0 part 
  ├─centos-root 253:0    0   50G  0 lvm  /
  └─centos-swap 253:1    0    4G  0 lvm  [SWAP]
sdb               8:16   0   20G  0 disk 
sdc               8:32   0   20G  0 disk 

sr0              11:0    1 1024M  0 rom

分区:上一篇文章有讲解!管理磁盘,硬盘管理工具fdisk-CSDN博客

[root@localhost ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。

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

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

命令(输入 m 获取帮助):n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): 
Using default response p
分区号 (1-4,默认 1):
起始 扇区 (2048-41943039,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):+5G
分区 1 已设置为 Linux 类型,大小设为 5 GiB

命令(输入 m 获取帮助):w
The partition table has been altered!

Calling ioctl() to re-read partition table.
正在同步磁盘。

这个是sdb1分区。sdb磁盘上分两块区域。同理,再分一个sdb2。

分区后:能看到sdb有两个分区sdb1和sdb2。磁盘sdc也同理分两个分区,每个分区5G

[root@localhost ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   60G  0 disk 
├─sda1            8:1    0    4G  0 part /boot
└─sda2            8:2    0   54G  0 part 
  ├─centos-root 253:0    0   50G  0 lvm  /
  └─centos-swap 253:1    0    4G  0 lvm  [SWAP]
sdb               8:16   0   20G  0 disk 
├─sdb1            8:17   0    5G  0 part 
└─sdb2            8:18   0    5G  0 part 
sdc               8:32   0   20G  0 disk 
├─sdc1            8:33   0    5G  0 part 
└─sdc2            8:34   0    5G  0 part 
sr0              11:0    1 1024M  0 rom

修改分区类型为LVM类型。t是修改分区类型。(说明:在建立分区时也可以直接修改LVM类型)

[root@localhost ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。

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


命令(输入 m 获取帮助):t
分区号 (1,2,默认 2):1
Hex 代码(输入 L 列出所有代码):8e
已将分区“Linux”的类型更改为“Linux LVM”

命令(输入 m 获取帮助):t
分区号 (1,2,默认 2):2
Hex 代码(输入 L 列出所有代码):8e
已将分区“Linux”的类型更改为“Linux LVM”

命令(输入 m 获取帮助):w
The partition table has been altered!

Calling ioctl() to re-read partition table.
正在同步磁盘。

 输入fdisk -l看到sdb1,2修改为了8e

同理也把sdc1,2修改成8e。 

 

sdb和sdc分区(sdb1,sdb2,sdc1,sdc2)和修改类型(8e)就完成了。

1.2 建立物理卷

pvcreate命令可以在已创建好的分区上建立物理卷。

pvcreate /dev/sdb1 /dev/sdb2 /dev/sdc1 /dev/sdc2

[root@localhost ~]# pvcreate /dev/sdb1 /dev/sdb2 /dev/sdc1 /dev/sdc2
  Physical volume "/dev/sdb1" successfully created.
  Physical volume "/dev/sdb2" successfully created.
  Physical volume "/dev/sdc1" successfully created.
  Physical volume "/dev/sdc2" successfully created.

#pvscan 查看一下

[root@localhost ~]# pvscan 
  PV /dev/sda2   VG centos          lvm2 [54.00 GiB / 4.00 MiB free]
  PV /dev/sdc2                      lvm2 [5.00 GiB]
  PV /dev/sdb1                      lvm2 [5.00 GiB]
  PV /dev/sdc1                      lvm2 [5.00 GiB]
  PV /dev/sdb2                      lvm2 [5.00 GiB]

  Total: 5 [74.00 GiB] / in use: 1 [54.00 GiB] / in no VG: 4 [20.00 GiB]

也可以用pvdisplay查看

1.3 建立卷组

我们把sdb1和sdc1两个物理卷组成一个卷组lv1,把sdb2和sdc2组成一个卷组lv2。卷组名自己起的。

使用vgcreate命令建立卷组。卷组设备文件使用/dev目录下与卷组同名的目录表示,所有逻辑设备文件都将建立在该目录下。包含多个物理卷,也可以只有一个物理卷。

vgcreate 卷组名 两个物理卷:successfully

起了两个卷组名vg1和vg2,可以随便起。vgscan查看一下

[root@localhost ~]# vgscan 
  Reading volume groups from cache.
  Found volume group "vg1" using metadata type lvm2
  Found volume group "vg2" using metadata type lvm2

  Found volume group "centos" using metadata type lvm2

1.4 建立逻辑卷

建立好卷组后,可以使用lvcreate在已有卷组上建立逻辑卷。

lvcreate -L 指定大小 -n 逻辑卷名 卷组名 (这里指定的大小肯定不能超过卷组总大小)

我们的四个分区sdb1,sdb2,sdc1,sdc2都是5G,那么vg1(sdb1,sdc1)和vg2(sdb2,sdc2)各10G。

lvcreate -L 6G -n lv1 vg1

lvcreate -L 7G -n lv2 vg2

逻辑卷名字随便起:lv1,lv2

[root@localhost ~]# lvscan 
  ACTIVE            '/dev/vg1/lv1' [6.00 GiB] inherit
  ACTIVE            '/dev/vg2/lv2' [7.00 GiB] inherit

  ACTIVE            '/dev/centos/swap' [4.00 GiB] inherit
  ACTIVE            '/dev/centos/root' [50.00 GiB] inherit

二、逻辑卷管理

[root@localhost ~]# lsblk                         # 显示块设备
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   60G  0 disk 
├─sda1            8:1    0    4G  0 part /boot
└─sda2            8:2    0   54G  0 part 
  ├─centos-root 253:0    0   50G  0 lvm  /
  └─centos-swap 253:1    0    4G  0 lvm  [SWAP]
sdb               8:16   0   20G  0 disk 
├─sdb1            8:17   0    5G  0 part 
│ └─vg1-lv1     253:2    0    6G  0 lvm  
└─sdb2            8:18   0    5G  0 part 
  └─vg2-lv2     253:3    0    7G  0 lvm  
sdc               8:32   0   20G  0 disk 
├─sdc1            8:33   0    5G  0 part 
│ └─vg1-lv1     253:2    0    6G  0 lvm  
└─sdc2            8:34   0    5G  0 part 
  └─vg2-lv2     253:3    0    7G  0 lvm  
sr0              11:0    1 1024M  0 rom

# 可以看到sdb1和sdc1都在逻辑卷lv1中,sdb2和sdc2都在逻辑卷lv2中。

2.1 逻辑卷容量扩容

vg1中共有10G的空间,我们上面指定了大小为6G的逻辑卷。如果存放一个大小为8G的文件时,显然不够使用,这时候扩容3G到9G,来存放8G文件

# 现在lv1是6G

[root@localhost ~]# lvscan 
  ACTIVE            '/dev/vg1/lv1' [6.00 GiB] inherit
  ACTIVE            '/dev/vg2/lv2' [7.00 GiB] inherit
  ACTIVE            '/dev/centos/swap' [4.00 GiB] inherit
  ACTIVE            '/dev/centos/root' [50.00 GiB] inherit

# 扩容,这里一定要写+3G代表扩容,不能写3G。
[root@localhost ~]# lvextend -L +3G /dev/vg1/lv1
  Size of logical volume vg1/lv1 changed from 6.00 GiB (1536 extents) to 9.00 GiB (2304 extents).
  Logical volume vg1/lv1 successfully resized.

# 可以查看多了3G
[root@localhost ~]# lvscan 
  ACTIVE            '/dev/vg1/lv1' [9.00 GiB] inherit
  ACTIVE            '/dev/vg2/lv2' [7.00 GiB] inherit
  ACTIVE            '/dev/centos/swap' [4.00 GiB] inherit
  ACTIVE            '/dev/centos/root' [50.00 GiB] inherit

缩容命令(自行尝试):lvreduce -L -3G /dev/vg1/lv1

2.2往卷组中增加新的物理卷

当卷组中没有足够的空间分配逻辑卷时,可以往卷组中增加物理卷的方法来增加卷组空间。

sdb磁盘中再分一个分区sdb3给它5G。加到vg1中,那么vg1就有了15G了。

前期准备:

1.分区,修改类型为8e。(1.1 已讲解)

fdisk -l查看

设备 Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    10487807     5242880   8e  Linux LVM
/dev/sdb2        10487808    20973567     5242880   8e  Linux LVM
/dev/sdb3        20973568    31459327     5242880   8e  Linux LVM

2.建立物理卷

建立物理卷先删除逻辑卷:lvremove /dev/vg1/lv1;lvremove /dev/vg2/lv2

才能建立物理卷:pvcreate /dev/sdb3

 可以看到物理卷已建立

[root@localhost ~]# pvscan 
  PV /dev/sdb1   VG vg1             lvm2 [<5.00 GiB / 0    free]
  PV /dev/sdc1   VG vg1             lvm2 [<5.00 GiB / 1016.00 MiB free]
  PV /dev/sdb2   VG vg2             lvm2 [<5.00 GiB / 0    free]
  PV /dev/sdc2   VG vg2             lvm2 [<5.00 GiB / 2.99 GiB free]
  PV /dev/sda2   VG centos          lvm2 [54.00 GiB / 4.00 MiB free]
  PV /dev/sdb3                      lvm2 [5.00 GiB]
  Total: 6 [<78.99 GiB] / in use: 5 [<73.99 GiB] / in no VG: 1 [5.00 GiB]

往卷组中加物理卷:vgextend vg1 /dev/sdb3(往vg1中加入sdb3)

 查看物理卷:可以发现sdb3加入到了vg1中

[root@localhost ~]# pvscan 
  PV /dev/sdb1   VG vg1             lvm2 [<5.00 GiB / <5.00 GiB free]
  PV /dev/sdc1   VG vg1             lvm2 [<5.00 GiB / <5.00 GiB free]
  PV /dev/sdb3   VG vg1             lvm2 [<5.00 GiB / <5.00 GiB free]
  PV /dev/sdb2   VG vg2             lvm2 [<5.00 GiB / <5.00 GiB free]
  PV /dev/sdc2   VG vg2             lvm2 [<5.00 GiB / <5.00 GiB free]
  PV /dev/sda2   VG centos          lvm2 [54.00 GiB / 4.00 MiB free]
  Total: 6 [78.98 GiB] / in use: 6 [78.98 GiB] / in no VG: 0 [0   ]

# 建立逻辑卷,指定大小13G,可以看到是可以指定13G的,因为此时三个分区sdb1,sdc1,sdb3共有15G。
[root@localhost ~]# lvcreate -L 13G -n lv1 vg1
  Logical volume "lv1" created.
[root@localhost ~]# lvscan 
  ACTIVE            '/dev/vg1/lv1' [13.00 GiB] inherit
  ACTIVE            '/dev/vg2/lv2' [7.00 GiB] inherit
  ACTIVE            '/dev/centos/swap' [4.00 GiB] inherit
  ACTIVE            '/dev/centos/root' [50.00 GiB] inherit

[root@localhost ~]# lvcreate -L 7G -n lv2 vg2
  Logical volume "lv2" created.

三、创建文件系统并加载使用

3.1 使用xfs文件系统格式化逻辑卷

就相当于格式化:

mkfs.xfs /dev/vg1/lv1

[root@localhost ~]# mkfs.xfs /dev/vg1/lv1
meta-data=/dev/vg1/lv1           isize=512    agcount=4, agsize=851968 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=3407872, 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
[root@localhost ~]# mkfs.xfs /dev/vg2/lv2

同理:mkfs.xfs /dev/vg2/lv2

3.2 创建了文件系统以后,挂载

挂载:我们在/mnt下建立两个文件夹test1和test2,让lv1和lv2分别挂载上

mkdir /mnt/test{1,2}

 挂载

mount /dev/vg1/lv1 /mnt/test1

mount /dev/vg2/lv2 /mnt/test2

 查看文件系统的硬盘空间占用情况和挂载位置:df

-T显示文件系统类型。

-h显示大小,人性化

[root@localhost ~]# df -Th
文件系统                类型      容量  已用  可用 已用% 挂载点
devtmpfs                devtmpfs  2.0G     0  2.0G    0% /dev
tmpfs                   tmpfs     2.0G     0  2.0G    0% /dev/shm
tmpfs                   tmpfs     2.0G   13M  2.0G    1% /run
tmpfs                   tmpfs     2.0G     0  2.0G    0% /sys/fs/cgroup
/dev/mapper/centos-root xfs        50G  4.6G   46G   10% /
/dev/sda1               xfs       4.0G  171M  3.9G    5% /boot
tmpfs                   tmpfs     394M  4.0K  394M    1% /run/user/42
tmpfs                   tmpfs     394M   24K  394M    1% /run/user/0
/dev/mapper/vg1-lv1     xfs        13G   33M   13G    1% /mnt/test1
/dev/mapper/vg2-lv2     xfs       7.0G   33M  7.0G    1% /mnt/test2

可以看到两个逻辑卷均挂在上了。

mount 显示所有挂载情况。我们只看后两个

[root@localhost ~]# mount | tail -2
/dev/mapper/vg1-lv1 on /mnt/test1 type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
/dev/mapper/vg2-lv2 on /mnt/test2 type xfs (rw,relatime,seclabel,attr2,inode64,noquota)

挂载上可以正常使用里面的磁盘空间了。test1目录下,用的是sdb1,sdc1,sdb3的空间。test2目录下用的是sdb2,sdc2的空间。

四、删除逻辑卷、卷组、物理卷

删除顺序(解挂载-->删除逻辑卷-->删除卷组-->删除物理卷)

四步:

1.解挂载:umount /mnt/test1;umount /mnt/test2

2.删除逻辑卷:lvremove /dev/vg1/lv1;lvremove /dev/vg2/lv2

3.删除卷组:vgremove vg1;vgremove vg2

4.删除物理卷:pvremove /dev/sdb1 /dev/sdb2 /dev/sdb3 /dev/sdc1 /dev/sdc2

可以试试,不解挂载能不能删除逻辑卷

[root@localhost ~]# mount | tail -2
/dev/mapper/vg1-lv1 on /mnt/test1 type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
/dev/mapper/vg2-lv2 on /mnt/test2 type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
[root@localhost ~]# lvremove /dev/vg1/lv1                # 不解挂载直接删除逻辑卷
  Logical volume vg1/lv1 contains a filesystem in use.             # 失败 有正在使用的文件系统,显然要先解挂载


1.解挂载
[root@localhost ~]# umount /mnt/test1 

[root@localhost ~]# umount /mnt/test2

2.删除逻辑卷

[root@localhost ~]# lvremove /dev/vg1/lv1                                 # 删除逻辑卷lv1
Do you really want to remove active logical volume vg1/lv1? [y/n]: y
  Logical volume "lv1" successfully removed                                # 删除lv1成功
[root@localhost ~]# lvremove /dev/vg2/lv2                                # 删除逻辑卷lv2
Do you really want to remove active logical volume vg2/lv2? [y/n]: y
  Logical volume "lv2" successfully removed                               # 删除lv2成功

3.删除卷组

[root@localhost ~]# vgremove vg1
  Volume group "vg1" successfully removed

[root@localhost ~]# vgremove vg2
  Volume group "vg2" successfully removed

4.删除物理卷

[root@localhost ~]# pvremove /dev/sdb1 /dev/sdb2 /dev/sdb3 /dev/sdc1 /dev/sdc2
  Labels on physical volume "/dev/sdb1" successfully wiped.
  Labels on physical volume "/dev/sdb2" successfully wiped.
  Labels on physical volume "/dev/sdb3" successfully wiped.
  Labels on physical volume "/dev/sdc1" successfully wiped.
  Labels on physical volume "/dev/sdc2" successfully wiped.