一个用户无需关机便可方便调整分区大小的工具---LVM逻辑卷管理

1.简单的了解LVM:
LVM是 Logical Volume Manager(逻辑卷管理)的简写,它是Linux环境下对磁盘分区进行管理的一种机制,它由Heinz Mauelshagen在Linux 2.4内核上实现,目前最新版本为:稳定版1.0.5,开发版 1.1.0-rc2,以及LVM2开发版。Linux用户安装Linux操作系统时遇到的一个常见的难以决定的问题就是如何正确地评估各分区大小,以分配合适的硬盘空间。普通的磁盘分区管理方式在逻辑分区划分好之后就无法改变其大小,当一个逻辑分区存放不下某个文件时,这个文件因为受上层文件系统的限制,也不能跨越多个分区来存放,所以也不能同时放到别的磁盘上。而遇到出现某个分区空间耗尽时,解决的方法通常是使用符号链接,或者使用调整分区大小的工具,但这只是暂时解决办法,没有从根本上解决问题。随着Linux的逻辑卷管理功能的出现,这些问题都迎刃而解,用户在无需停机的情况下可以方便地调整各个分区大小
LVM将一块或多块硬盘的分区在逻辑上集合,充当一块大硬盘来使用,当硬盘的空间不够使用的时候,可以继续将其它的硬盘的分区加入其中,这样可以实现磁盘空间的动态管理,相对于普通的磁盘分区来说有很大的灵活性
LVM与传统的磁盘分区相比,它为计算机提供了更高层次的磁盘存储,它使系统管理员可以更方便的为应用与用户分配存储空间。在LVM管理下的存储卷可以按需要随时改变大小。LVM也允许按用户组对存储卷进行管理,允许管理员用更直观的名称进行命名(如"sales’、 ‘development’)代替物理磁盘名(如’sda’、‘sdb’)来标识存储卷
如图所示为LVM模型:
在这里插入图片描述
如上图所示,是由四块磁盘的分区在逻辑意义上进行集合形成一块大磁盘,然后在这块大磁盘上划分一些逻辑分区进行使用,当某一个逻辑分区的存储空间不足时,可以将大磁盘上剩余存储空间划分给它一些进行使用。
2.有关LVM的基本术语简介:
LVM是在磁盘分区和文件系统之间添加的一个逻辑层,通过逻辑层来为文件系统屏蔽下层磁盘分区的布局,为文件系统提供一个抽象的盘卷,在该盘卷上建立文件系统。那么首先我们学习了解以下几个LVM的基本术语:

1)物理存储介质(The Physical Media):指的是系统真实的存储设备,如硬盘(/dev/sda、/dev/sdb等),它是存储系统最低层的存储单元。
2)物理卷(Physical Volume):物理卷就是指硬盘分区或从逻辑上与磁盘分区具有同样功能的设备(如:RAID),它是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)相比较,却包含有与LVM相关的管理参数。
3)卷组(VolumeGroup):LVM卷组类似于非LVM系统中的物理硬盘,其由物理卷组成。可以在卷组上创建一个或多个“LVM分区”(逻辑卷),LVM卷组由一个或多个物理卷组成。
4)逻辑卷(Logical Volume):LVM的逻辑卷类似于非LVM系统中的硬盘分区,在逻辑卷之上可以建立文件系统(如/home或者/usr等)。
5)PE(Physical Extent):每一个物理卷被划分为称为PE的基本单元,具有唯一编号的PE是可以被LVM寻址的最小单元。PE的大小是可配置的,默认为4MB。
6)LE(Logical Extent):逻辑卷也被划分为被称为LE的可被寻址的基本单位。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。

简单的来理解就是:

PV:物理的磁盘分区;
VG:LVM中的物理磁盘分区,也就是PV必须加入VG。可以将VG理解为一个仓库或者是几块大的硬盘;
LV:就是从VG中划分的逻辑分区;

如下图所示为PV、VG、LV三者的关系:
在这里插入图片描述
3.linux操作系统下LVM的部署与使用:
3.1首先我们需要查看系统的内核版本是否支持LVM:

#查看当前系统内核的版本
[root@localhost ~]# uname -r
3.10.0-327.el7.x86_64
#查看当前系统的版本
[root@localhost ~]# cat /etc/redhat-release 
Red Hat Enterprise Linux Server release 7.2 (Maipo)

3.2在使用LVM之前我们需要查看系统中是否安装了LVM对应的程序软件包:

[root@localhost ~]# rpm -qa | grep lvm
lvm2-2.02.130-5.el7.x86_64
mesa-private-llvm-3.6.2-2.el7.x86_64
lvm2-libs-2.02.130-5.el7.x86_64
如果命令的输出结果类似于上例,那么就说明了系统中已经安装了LVM管理工具;如果命令没有任何输出结果的话,说明系统上未安装LVM管理工具,那么我们可以通过网络下载或进行光盘挂载的方式安装LVM相应的软件程序包。
[root@localhost ~]# mount /dev/sr0 /mnt/
[root@localhost ~]# yum install lvm2 –y

3.3创建和管理LVM(要创建一个LVM系统的话,一般需要经过以下几步):
#首先给大家介绍一下我虚拟机本地磁盘的使用情况以及下面所验证LVM创建和管理时的实验环境,在装机时我添加了一块40G的硬盘,再创建了三个相应的分区后,磁盘的剩余空间是17.9G,现准备再添加三个磁盘分区,各5G进行LVM创建和管理实验,如下图所示:
在这里插入图片描述
1)首先创建分区,使用分区工具fdisk创建LVM分区,方法和创建一般分区的方法是一样的,区别仅仅是LVM的分区类型为8e。

[root@localhost ~]# fdisk /dev/sda
命令(输入 m 获取帮助):m
命令操作
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the dos compatibility flag
   d   delete a partition
   g   create a new empty GPT partition table
   G   create an IRIX (SGI) partition table
   l   list known partition types
   m   print this menu
   n   add a new partition
   o   create a new empty DOS partition table
   p   print the partition table
   q   quit without saving changes
   s   create a new empty Sun disklabel
   t   change a partition's system id
   u   change display/entry units
   v   verify the partition table
   w   write table to disk and exit
   x   extra functionality (experts only)
命令(输入 m 获取帮助):n
Partition type:
   p   primary (3 primary, 0 extended, 1 free)
   e   extended
Select (default e): e
已选择分区 4
起始 扇区 (46450688-83886079,默认为 46450688):
将使用默认值 46450688
Last 扇区, +扇区 or +size{K,M,G} (46450688-83886079,默认为 83886079):
将使用默认值 83886079
分区 4 已设置为 Extended 类型,大小设为 17.9 GiB
命令(输入 m 获取帮助):
命令(输入 m 获取帮助):n
All primary partitions are in use
添加逻辑分区 5
起始 扇区 (46452736-83886079,默认为 46452736):
将使用默认值 46452736
Last 扇区, +扇区 or +size{K,M,G} (46452736-83886079,默认为 83886079):+5G
分区 5 已设置为 Linux 类型,大小设为 5 GiB
命令(输入 m 获取帮助):n
All primary partitions are in use
添加逻辑分区 6
起始 扇区 (56940544-83886079,默认为 56940544):
将使用默认值 56940544
Last 扇区, +扇区 or +size{K,M,G} (56940544-83886079,默认为 83886079):+5G
分区 6 已设置为 Linux 类型,大小设为 5 GiB
命令(输入 m 获取帮助):n
All primary partitions are in use
添加逻辑分区 7
起始 扇区 (67428352-83886079,默认为 67428352): 
将使用默认值 67428352
Last 扇区, +扇区 or +size{K,M,G} (67428352-83886079,默认为 83886079):+5G
分区 7 已设置为 Linux 类型,大小设为 5 GiB
命令(输入 m 获取帮助):p
磁盘 /dev/sda:42.9 GB, 42949672960 字节,83886080 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x00084f16
  设备    Boot      Start         End      Blocks     Id  System  // Id表示分区类型
/dev/sda1   *        2048      411647      204800   83  Linux
/dev/sda2          411648    42354687    20971520   83  Linux
/dev/sda3        42354688    46450687     2048000   82  Linux swap / Solaris
/dev/sda4        46450688    83886079    18717696    5  Extended
/dev/sda5        46452736    56938495     5242880   83  Linux
/dev/sda6        56940544    67426303     5242880   83  Linux
/dev/sda7        67428352    77914111     5242880   83  Linux
命令(输入 m 获取帮助):l                                          //可以利用l选项列出Linux相关的所有分区类型

在这里插入图片描述

命令(输入 m 获取帮助):t                                           //通过选项t更改分区类型
分区号 (1-7,默认 7):5
Hex 代码(输入 L 列出所有代码):8e
已将分区“Linux”的类型更改为“Linux LVM”
命令(输入 m 获取帮助):t
分区号 (1-7,默认 7):6
Hex 代码(输入 L 列出所有代码):8e
已将分区“Linux”的类型更改为“Linux LVM”
命令(输入 m 获取帮助):t
分区号 (1-7,默认 7):7
Hex 代码(输入 L 列出所有代码):8e
已将分区“Linux”的类型更改为“Linux LVM”
命令(输入 m 获取帮助):p
磁盘 /dev/sda:42.9 GB, 42949672960 字节,83886080 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x00084f16
   设备 Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048      411647      204800   83  Linux
/dev/sda2          411648    42354687    20971520   83  Linux
/dev/sda3        42354688    46450687     2048000   82  Linux swap / Solaris
/dev/sda4        46450688    83886079    18717696    5  Extended
/dev/sda5        46452736    56938495     5242880   8e  Linux LVM
/dev/sda6        56940544    67426303     5242880   8e  Linux LVM
/dev/sda7        67428352    77914111     5242880   8e  Linux LVM
命令(输入 m 获取帮助):w                                           //保存并退出

#注意保存退出磁盘仍使用的是旧的分区列表,需要与内核同步一下

[root@localhost ~]# partprobe

#可以通过以下命令查看当前操作系统各磁盘分区的相关信息

[root@localhost ~]# fdisk -l
磁盘 /dev/sda:42.9 GB, 42949672960 字节,83886080 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x00084f16
   设备 Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048      411647      204800   83  Linux
/dev/sda2          411648    42354687    20971520   83  Linux
/dev/sda3        42354688    46450687     2048000   82  Linux swap / Solaris
/dev/sda4        46450688    83886079    18717696    5  Extended
/dev/sda5        46452736    56938495     5242880   8e  Linux LVM
/dev/sda6        56940544    67426303     5242880   8e  Linux LVM
/dev/sda7        67428352    77914111     5242880   8e  Linux LVM

#为了后期便于维护管理,记得给分区加上标示,这样即使你不在的情况下,别人看到标示了就不会轻易动这块区域了,LVM的标识是8e,设置完成后记得按w保存。
2)创建逻辑卷
#首先通过下列命令创建物理卷,先利用两块磁盘分区来进行操作,将新创建的两个分区/dev/sda5与/dev/sda6转化成物理卷,转换称物理卷主要是为了添加LVM属性信息并划分PE存储单元。

[root@localhost ~]# pvcreate /dev/sda{5,6,7}
  Physical volume "/dev/sda5" successfully created
  Physical volume "/dev/sda6" successfully created
  Physical volume "/dev/sda7" successfully created
#显示物理卷的相关信息
[root@localhost ~]# pvs
  PV         VG   Fmt  Attr PSize PFree
  /dev/sda5       lvm2 ---  5.00g 5.00g
  /dev/sda6       lvm2 ---  5.00g 5.00g
  /dev/sda7       lvm2 ---  5.00g 5.00g
#显示物理卷的详细信息
[root@localhost ~]# pvdisplay 
  "/dev/sda5" is a new physical volume of "5.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sda5
  VG Name               
  PV Size               5.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               u5GYKH-xG21-KXMy-XZmE-CpPG-qe6G-EB8YAE
   
  "/dev/sda7" is a new physical volume of "5.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sda7
  VG Name               
  PV Size               5.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               aQkU6V-Kdc7-t5T6-KCbF-reLv-Q6Wi-xiI8Vh
   
  "/dev/sda6" is a new physical volume of "5.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sda6
  VG Name               
  PV Size               5.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               7qAOWE-z3Rg-uL3z-a8lX-rlmo-zkWa-DZEbit
#创建卷组vggroup1 ,并将刚才创建好的两个物理卷加入该卷组。可以看出默认PE大小为4MB。PE是卷组的最小存储单元,可以通过-s参数修改大小。卷组名可以用户自定义,建议以vg开头以便区分。
[root@localhost ~]# vgcreate vggroup1 /dev/sda5 /dev/sda6
Volume group "vggroup1" successfully created
#显示卷组的相关信息
[root@localhost ~]# vgs
VG       #PV #LV #SN Attr   VSize VFree
vggroup1   2   0   0 wz--n- 9.99g 9.99g
#查看卷组的详细信息,可以发现LE为4M
[root@localhost ~]# vgdisplay 
  --- Volume group ---
  VG Name               vggroup1
  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               9.99 GiB
  PE Size               4.00 MiB
  Total PE              2558
  Alloc PE / Size       0 / 0   
  Free  PE / Size       2558 / 9.99 GiB
  VG UUID               6MUu0r-abzh-5ZtW-PpCY-bkFV-kRa0-ReWUHu
#查看将物理卷加入卷组后物理卷的相关信息
[root@localhost ~]# pvs
  PV         VG       Fmt  Attr PSize PFree
  /dev/sda5  vggroup1 lvm2 a--  5.00g 5.00g
  /dev/sda6  vggroup1 lvm2 a--  5.00g 5.00g
  /dev/sda7           lvm2 ---  5.00g 5.00g
#从卷组vggroup1上分配9G的存储空间给新的逻辑卷lvgroup1, -n是指定逻辑卷的名称,名称可以自定义,建议lv开头以便区分,-L指定逻辑卷的大小,后加卷组名表示针对哪一个卷组进行创建的
[root@localhost ~]# lvcreate -n lvgroup1 -L 9G vggroup1 
  Logical volume "lvgroup1" created.
#查看逻辑卷的相关信息
[root@localhost ~]# lvs
  LV       VG       Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lvgroup1 vggroup1 -wi-a----- 9.00g  

3)逻辑卷创建完毕后将其格式化,格式化后即可使用,建议格式化为ext4格式(因为RHEL7版本之后默认只有ext4格式的可以扩展或释放逻辑卷,xfs等格式的只允许扩展)

[root@localhost ~]# mkfs.ext4 /dev/vggroup1/lvgroup1
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
589824 inodes, 2359296 blocks
117964 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=2151677952
72 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: 完成                            
正在写入inode表: 完成                            
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成

4)格式话完成后的使用可以通过三种挂载方式进行使用,以下是通过手动挂载的方式来使用的,挂载之后即可进行使用。一般为了便于以后服务器重启自动挂载,需要将创建好的文件系统挂载信息添加到/etc/fstab里面,UUID可以通过 blkid命令查询。

[root@localhost ~]# mount /dev/vggroup1/lvgroup1 /test
[root@localhost ~]# cd /test
[root@localhost test]# ll
drwx------. 2 root root 16384 3月  11 16:51 lost+found1
#查看文件系统磁盘的使用情况
[root@localhost test]# df –h    
/dev/mapper/vggroup1-lvgroup1  8.8G   37M  8.3G    1% /test

#注意真实的路径/dev/mapper是Linux2.6内核中提供的一种从逻辑设备到物理设备的映射框架机制,在该机制下,用户可以很方便的根据自己的需要制定实现存储资源的管理策略,当前比较流行的 Linux 下的逻辑卷管理器如 LVM2(Linux Volume Manager 2 version)、EVMS(Enterprise Volume Management System)、dmraid(Device Mapper Raid Tool)等都是基于该机制实现的。
#如果想要验证/etc/fstab自动挂载配置是否正确的话,可以先卸载逻辑卷lvgroup1,然后使用mount –a命令使内核重新读取/etc/fstab文件,看是否能够自动挂载。

[root@localhost ~]# umount /test
[root@localhost ~]# mount -a
[root@localhost ~]# mount | grep test
/dev/mapper/vgdata-lvdata1 on /data1 type ext4 (rw,relatime,seclabel,data=ordered)

5)假设逻辑卷lvgroup1的存储空间不够用了,进行扩展操作:

#给逻辑卷增加空间并不会影响以前空间的使用,所以无需卸载文件系统,直接通过命令给lvgroup1增加2G空间即可,记得要使用resize2fs命令来同步文件系统。
#查看当前物理卷相关信息
[root@localhost ~]# pvs
  PV         VG       Fmt  Attr PSize PFree   
  /dev/sda5  vggroup1 lvm2 a--  5.00g       0 
  /dev/sda6  vggroup1 lvm2 a--  5.00g 1016.00m
  /dev/sda7           lvm2 ---  5.00g    5.00g
#查看当前逻辑卷的相关信息
[root@localhost ~]# lvs
  LV       VG       Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lvgroup1 vggroup1 -wi-ao---- 9.00g
#使用下列命令将物理卷添加到卷组之中,前提是该分区已经是物理卷
[root@localhost ~]# vgextend vggroup1 /dev/sda7
  Volume group "vggroup1" successfully extended
#使用下列命令给逻辑卷扩充存储空间
[root@localhost ~]# lvextend -L +2G /dev/vggroup1/lvgroup1
  Size of logical volume vggroup1/lvgroup1 changed from 9.00 GiB (2304 extents) to 11.00 GiB (2816 extents).
  Logical volume lvgroup1 successfully resized.
#查看扩展之后的逻辑卷相关信息
[root@localhost ~]# lvs
  LV       VG       Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lvgroup1 vggroup1 -wi-ao---- 11.00g      
#查看扩展之后的物理卷相关信息                                              
[root@localhost ~]# pvs
  PV         VG       Fmt  Attr PSize PFree
  /dev/sda5  vggroup1 lvm2 a--  5.00g    0 
  /dev/sda6  vggroup1 lvm2 a--  5.00g    0 
  /dev/sda7  vggroup1 lvm2 a--  5.00g 3.99g
#通过下列命名查看文件系统的磁盘使用情况,我们可以发现虽然我们已经成功对逻辑卷进行了扩充,但是挂载之后使用的存储空间大小还是没有扩充。
[root@localhost ~]# df -h
文件系统                       容量  已用  可用 已用% 挂载点
/dev/sda2                       20G  3.7G   17G   19% /
devtmpfs                       899M     0  899M    0% /dev
tmpfs                          913M  144K  913M    1% /dev/shm
tmpfs                          913M  9.0M  904M    1% /run
tmpfs                          913M     0  913M    0% /sys/fs/cgroup
/dev/sda1                      197M  139M   59M   71% /boot
tmpfs                          183M  4.0K  183M    1% /run/user/42
tmpfs                          183M   20K  183M    1% /run/user/0
/dev/sr0                       3.8G  3.8G     0  100% /run/media/root/RHEL-7.2 Server.x86_64
/dev/mapper/vggroup1-lvgroup1  8.8G   37M  8.3G    1% /test
#通过下列命令进行同步操作
[root@localhost ~]# resize2fs /dev/vggroup1/lvgroup1 
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/vggroup1/lvgroup1 is mounted on /test; on-line resizing required
old_desc_blocks = 2, new_desc_blocks = 2
The filesystem on /dev/vggroup1/lvgroup1 is now 2883584 blocks long.
#查看同步之后挂载点目录的存储空间大小
[root@localhost ~]# df -h
文件系统                       容量  已用  可用 已用% 挂载点
/dev/sda2                       20G  3.7G   17G   19% /
devtmpfs                       899M     0  899M    0% /dev
tmpfs                          913M  144K  913M    1% /dev/shm
tmpfs                          913M  9.0M  904M    1% /run
tmpfs                          913M     0  913M    0% /sys/fs/cgroup
/dev/sda1                      197M  139M   59M   71% /boot
tmpfs                          183M  4.0K  183M    1% /run/user/42
tmpfs                          183M   20K  183M    1% /run/user/0
/dev/sr0                       3.8G  3.8G     0  100% /run/media/root/RHEL-7.2 Server.x86_64
/dev/mapper/vggroup1-lvgroup1   11G   41M   11G    1% /test

6)假设当硬盘存储空间不够用的情况下,需要减少逻辑卷的空间。
#减少逻辑卷空间的步骤如下:

1>先卸载逻辑卷lvgroup1,即取消逻辑卷的挂载;
2>然后通过e2fsck命令检测逻辑卷上空余的空间;
3>使用resize2fs将文件系统减少到想要的空间大小;
4>再使用lvreduce命令将逻辑卷减少到想要的空间大小;

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

#取消逻辑卷的挂载
[root@localhost ~]# umount /dev/mapper/vggroup1-lvgroup1
#检测逻辑卷上的空余空间
[root@localhost ~]# e2fsck -f /dev/vggroup1/lvgroup1 
e2fsck 1.42.9 (28-Dec-2013)
第一步: 检查inode,块,和大小
第二步: 检查目录结构
第3步: 检查目录连接性
Pass 4: Checking reference counts
第5步: 检查簇概要信息
/dev/vggroup1/lvgroup1: 11/720896 files (0.0% non-contiguous), 88276/2883584 blocks
#查看当前逻辑卷的相关信息
[root@localhost ~]# lvs
  LV       VG       Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lvgroup1 vggroup1 -wi-a----- 11.00g   
#将文件系统减小到6G的存储空间大小                                                 
[root@localhost ~]# resize2fs /dev/mapper/vggroup1-lvgroup1 6G
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/mapper/vggroup1-lvgroup1 to 1572864 (4k) blocks.
The filesystem on /dev/mapper/vggroup1-lvgroup1 is now 1572864 blocks long.
#将逻辑卷减小到6G的存储空间大小                                                   
 [root@localhost ~]# lvreduce -L 6G /dev/vggroup1/lvgroup1 
  WARNING: Reducing active logical volume to 6.00 GiB
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce lvgroup1? [y/n]: Y
  Size of logical volume vggroup1/lvgroup1 changed from 11.00 GiB (2816 extents) to 6.00 GiB (1536 extents).
  Logical volume lvgroup1 successfully resized.
#查看减小后逻辑卷的存储空间大小
[root@localhost ~]# lvs
  LV       VG       Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lvgroup1 vggroup1 -wi-a----- 6.00g     
#进行挂载使用                                               
[root@localhost ~]# mount /dev/vggroup1/lvgroup1 /test
#查看当前文件系统的磁盘使用情况
[root@localhost ~]# df -h
文件系统                       容量  已用  可用 已用% 挂载点
/dev/sda2                       20G  3.7G   17G   19% /
devtmpfs                       899M     0  899M    0% /dev
tmpfs                          913M  144K  913M    1% /dev/shm
tmpfs                          913M  9.0M  904M    1% /run
tmpfs                          913M     0  913M    0% /sys/fs/cgroup
/dev/sda1                      197M  139M   59M   71% /boot
tmpfs                          183M  4.0K  183M    1% /run/user/42
tmpfs                          183M   20K  183M    1% /run/user/0
/dev/sr0                       3.8G  3.8G     0  100% /run/media/root/RHEL-7.2 Server.x86_64
/dev/mapper/vggroup1-lvgroup1  5.8G   33M  5.5G    1% /test

注意:默认文件系统以块为单位,一块为4kb;在进行释放空间操作中的两种方式,”-“代表从当前系统上减少的存储空间大小;直接写存储空间大小代表将当前系统上的减少为多大的存储空间。
7)假设某一块磁盘或者某一分区发生故障,如何将数据快速的转移到相同的卷组的其他存储空间之中去,三步如下:

1>通过pvmove命令转移空间数据,物理卷上进行数据迁移;
2>通过vgreduce命令将即将坏的磁盘或者分区从卷组vggroup1中移除出去;
3>通过pvremove命令将即将坏的磁盘或者分区从系统中删除掉;

#查看当前物理卷的使用情况,我们可以发现/dev/sda5完全被使用,没有空闲空间,那么我们就假设/dev/sda5发生了故障

[root@localhost ~]# pvs
  PV         VG       Fmt  Attr PSize PFree
  /dev/sda5  vggroup1 lvm2 a--  5.00g    0 
  /dev/sda6  vggroup1 lvm2 a--  5.00g 3.99g
  /dev/sda7  vggroup1 lvm2 a--  5.00g 5.00g
#实现物理卷上数据的迁移操作
[root@localhost ~]# pvmove /dev/sda5 /dev/sda7
  /dev/sda5: Moved: 0.0%
  /dev/sda5: Moved: 11.8%
  /dev/sda5: Moved: 25.9%
  /dev/sda5: Moved: 39.9%
  /dev/sda5: Moved: 51.1%
  /dev/sda5: Moved: 65.3%
  /dev/sda5: Moved: 79.1%
  /dev/sda5: Moved: 89.6%
#查看数据迁移后物理卷的相关信息,我们可以发现/dev/sda5的空闲空间为5G
[root@localhost ~]# pvs
  PV         VG       Fmt  Attr PSize PFree
  /dev/sda5  vggroup1 lvm2 a--  5.00g 5.00g
  /dev/sda6  vggroup1 lvm2 a--  5.00g 3.99g
  /dev/sda7  vggroup1 lvm2 a--  5.00g    0
#卷组中移除相应的物理卷
[root@localhost ~]# vgreduce vggroup1 /dev/sda5
  Removed "/dev/sda5" from volume group "vggroup1"
#物理卷中删除出现故障的分区
[root@localhost ~]# pvremove /dev/sda5
  Labels on physical volume "/dev/sda5" successfully wiped

8)删除逻辑卷的完整步骤:

1>先通过umount命令卸载掉逻辑卷lvgroup1;
2>如果进行开机自动挂载配置了,那么修改/etc/fstab里面逻辑卷的挂载信息,否则系统有可能启动不起来;
3>通过lvremove 删除逻辑卷lvgroup1;
4>通过vgremove 删除卷组vggroup1;
5>通过pvremove 将物理卷转化成普通分区;
6>删除完成通过fdisk /dev/stda命令进入磁盘分区操作,通过选项t选中删除后的分区,将其分区类型改为83,即普通的Linux分区即可。

4.SWAP分区默认如何去添加(一般都是在创建系统时指定SWAP分区的大小,如果开始使用swap分区了,说明你的系统非常非常的卡),SWAP称之为交换分区,相当于Windows系统下的虚拟内存。作用就是当我们系统中的内存不够用的时候,可以通过SWAP来增加内存。一般安装Linux系统的时候,必须的存在的两个分区一个是根,一个便是SWAP。如果安装系统的时候,SWAP分区分小了的话,需要增加大小,那么接下来的内容就是SWAP分区的创建/扩展,有以下两种方法供我们选择:

方法一:利用磁盘的剩余空间进行SWAP分区的添加,前提就是磁盘还有剩余空间没有划分或者是已经划分的分区没有使用,这个时才能使用此方法,而在本实验中我是将17.9G的内存划分了15G出去供LVM使用,现在我们就利用余下的2.9G。
实现步骤:新建分区—修改id号为82—格式化—启用swap分区—写入fstab文件;

#新建分区,并将其类型设置为swap类型
[root@localhost ~]# fdisk /dev/sda 
欢迎使用 fdisk (util-linux 2.23.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
命令(输入 m 获取帮助):n
All primary partitions are in use
添加逻辑分区 8
起始 扇区 (77916160-83886079,默认为 77916160):
将使用默认值 77916160
Last 扇区, +扇区 or +size{K,M,G} (77916160-83886079,默认为 83886079):
将使用默认值 83886079
分区 8 已设置为 Linux 类型,大小设为 2.9 GiB
命令(输入 m 获取帮助):t
分区号 (1-8,默认 8):8
Hex 代码(输入 L 列出所有代码):82
已将分区“Linux”的类型更改为“Linux swap / Solaris”
命令(输入 m 获取帮助):w
The partition table has been altered!
#进行同步操作,让内核识别到新分区
[root@localhost ~]# partprobe
#将新建分区格式化为Swap格式
[root@localhost ~]# mkswap /dev/sda8
正在设置交换空间版本 1,大小 = 2984956 KiB
无标签,UUID=5be7665f-94bd-453a-a1a9-6a8123ab658a
注意:格式化完成产生一个UUID值,要使用也是通过挂载来使用的,默认开机自动挂载要用UUID值。
#查看当前系统上的内存
[root@localhost ~]# free –m   
              total        used        free      shared  buff/cache   available
Mem:           1824         658         298          10         867         903
Swap:          1999           0        1999
#激活Swap分区
[root@localhost ~]# swapon /dev/sda8
#查看扩充后当前系统上的内存,我们可以发现扩充成功了
[root@localhost ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:           1824         661         295          10         867         900
Swap:          4914           0        4914
#如果要实现开机自动挂载的话,那么我们需要编辑/etc/fstab配置文件,注意UUID值。

方法二: 利用分区的剩余空间,既然用分区的剩余空间,要找个空间大的分区来进行下面的操作,本实验中用的是/分区的剩余空间。

#查看分区的剩余空间 [root@localhost ~]# df -h 文件系统 容量 已用 可用 已用% 挂载点 /dev/sda2 20G 3.7G 17G 19% /
devtmpfs 899M 0 899M 0% /dev tmpfs
913M 144K 913M 1% /dev/shm tmpfs 913M
9.0M 904M 1% /run tmpfs 913M 0 913M 0% /sys/fs/cgroup /dev/sda1 197M 139M 59M
71% /boot tmpfs 183M 4.0K 183M 1%
/run/user/42 tmpfs 183M 20K 183M 1%
/run/user/0 /dev/sr0 3.8G 3.8G 0 100%
/run/media/root/RHEL-7.2 Server.x86_64 /dev/mapper/vggroup1-lvgroup1
5.8G 33M 5.5G 1% /test
#创建一个大小为2G的文件,名字为/目录下的haha [root@localhost ~]# dd if=/dev/zero of=/haha bs=1G count=2
注意:dd命令是硬盘底层数据迁移的命令,也可以通过dd命令创建一个指定大小的文件,其中bs指定基本单位、count指定数量,通过组合创建相应的大小。
#查看haha文件是否创建成功 [root@localhost ~]# ll -h /
-rw-r–r--. 1 root root 2.0G 3月 11 17:31 haha
#格式化创建的haha文件 [root@localhost ~]# mkswap /haha 正在设置交换空间版本 1,大小 = 2097148 KiB 无标签,UUID=77696105-bda9-4328-adb4-c688f92bf3be
#查看当前系统上的内存 [root@localhost ~]# free -m
total used free shared buff/cache available Mem: 1824 471 1065 7
287 1159 Swap: 4914 188 4726
#激活haha这个swap存储空间 [root@localhost ~]# swapon /haha
#查看swap空间是否成功扩充 [root@localhost ~]# free -m
total used free shared buff/cache available Mem: 1824 473 1061 7
289 1157 Swap: 6962 188 6774
#查看swap分区使用的优先级别,数字越大表现优先级别越高 [root@localhost ~]# swapon –s 文件名 类型 大小 已用 权限 /dev/sda3
partition 2047996 193236 -1 /dev/sda8
partition 2984956 0 -2 /haha
file 2097148 0 -3
#如果要实现开机自动挂载的话,那么我们需要编辑/etc/fstab配置文件,注意UUID值。

总结:LVM逻辑卷管理是Linux里面一个很棒的空间使用机制,因为分区在没有格式化的情况下是没有办法扩充或者缩小的,通过LVM可以将你的磁盘空间做到灵活自如的应用。

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值