7.2 LVM逻辑卷管理器

前面学习的硬盘设备管理技术虽然能够有效地提高硬盘设备的读写速度以及数据的安全性,但是在硬盘分好区或者部署为RAID磁盘阵列之后,再想修改硬盘分区大小就不容易了。换句话说,当用户想要随着实际需求的变化调整硬盘分区的大小时,会受到硬盘“灵活性”的限制。这时就需要用到另外一项非常普及的硬盘设备资源管理技术了—LVM(逻辑卷管理器)。LVM可以允许用户对硬盘资源进行动态调整。

逻辑卷管理器是Linux系统用于对硬盘分区进行管理的一种机制,理论性较强,其创建初衷是为了解决硬盘设备在创建分区后不易修改分区大小的缺陷。尽管对传统的硬盘分区进行强制扩容或缩容从理论上来讲是可行的,但是却可能造成数据的丢失。而LVM技术是在硬盘分区和文件系统之间添加了一个逻辑层,它提供了一个抽象的卷组,可以把多块硬盘进行卷组合并。这样一来,用户不必关心物理硬盘设备的底层架构和布局,就可以实现对硬盘分区的动态调整。LVM的技术架构如图7-7所示。

图7-7  逻辑卷管理器的技术结构

为了帮助大家理解,刘遄老师来举一个吃货的例子。比如小明家里想吃馒头但是面粉不够了,于是妈妈从隔壁老王家、老李家、老张家分别借来一些面粉,准备蒸馒头吃。首先需要把这些面粉(物理卷[PV,Physical Volume])揉成一个大面团(卷组[VG,Volume Group]),然后再把这个大面团分割成一个个小馒头(逻辑卷[LV,Logical Volume]),而且每个小馒头的重量必须是每勺面粉(基本单元[PE,Physical Extent])的倍数。

物理卷处于LVM中的最底层,可以将其理解为物理硬盘、硬盘分区或者RAID磁盘阵列,这都可以。卷组建立在物理卷之上,一个卷组可以包含多个物理卷,而且在卷组创建之后也可以继续向其中添加新的物理卷。逻辑卷是用卷组中空闲的资源建立的,并且逻辑卷在建立后可以动态地扩展或缩小空间。这就是LVM的核心理念。

7.2.1 部署逻辑卷

一般而言,在生产环境中无法精确地评估每个硬盘分区在日后的使用情况,因此会导致原先分配的硬盘分区不够用。比如,伴随着业务量的增加,用于存放交易记录的数据库目录的体积也随之增加;因为分析并记录用户的行为从而导致日志目录的体积不断变大,这些都会导致原有的硬盘分区在使用上捉襟见肘。而且,还存在对较大的硬盘分区进行精简缩容的情况。

我们可以通过部署LVM来解决上述问题。部署LVM时,需要逐个配置物理卷、卷组和逻辑卷。常用的部署命令如表7-2所示。

表7-2                                                   常用的LVM部署命令

功能/命令 物理卷管理 卷组管理 逻辑卷管理
扫描 pvscan vgscan lvscan
建立 pvcreate vgcreate lvcreate
显示 pvdisplay vgdisplay lvdisplay
删除 pvremove vgremove lvremove
扩展   vgextend lvextend
缩小   vgreduce lvreduce

为了避免多个实验之间相互发生冲突,请大家自行将虚拟机还原到初始状态,并在虚拟机中添加两块新硬盘设备,然后开机,如图7-8所示。

在虚拟机中添加两块新硬盘设备的目的,是为了更好地演示LVM理念中用户无需关心底层物理硬盘设备的特性。我们先对这两块新硬盘进行创建物理卷的操作,可以将该操作简单理解成让硬盘设备支持LVM技术,或者理解成是把硬盘设备加入到LVM技术可用的硬件资源池中,然后对这两块硬盘进行卷组合并,卷组的名称可以由用户来自定义。接下来,根据需求把合并后的卷组切割出一个约为150MB的逻辑卷设备,最后把这个逻辑卷设备格式化成EXT4文件系统后挂载使用。在下文中,刘遄老师将对每一个步骤再作一些简单的描述。

第1步:让新添加的两块硬盘设备支持LVM技术。

[root@linuxprobe ~]# pvcreate /dev/sdb /dev/sdcPhysical volume "/dev/sdb" successfully createdPhysical volume "/dev/sdc" successfully created

第2步:把两块硬盘设备加入到storage卷组中,然后查看卷组的状态。

[root@linuxprobe ~]# vgcreate storage /dev/sdb /dev/sdcVolume group "storage" successfully created
[root@linuxprobe ~]# vgdisplay
--- Volume group ---VG Name storageSystem ID Format lvm2Metadata Areas 2Metadata Sequence No 1VG Access read/writeVG Status resizableMAX LV 0Cur LV 0Open LV 0Max PV 0Cur PV 2Act PV 2VG Size 39.99 GiBPE Size 4.00 MiBTotal PE 10238
 Alloc PE / Size 0 / 0  Free PE / Size 10238 / 39.99 GiBVG UUID KUeAMF-qMLh-XjQy-ArUo-LCQI-YF0o-pScxm1
………………省略部分输出信息………………

第3步:切割出一个约为150MB的逻辑卷设备。

这里需要注意切割单位的问题。在对逻辑卷进行切割时有两种计量单位。第一种是以容量为单位,所使用的参数为-L。例如,使用-L 150M生成一个大小为150MB的逻辑卷。另外一种是以基本单元的个数为单位,所使用的参数为-l。每个基本单元的大小默认为4MB。例如,使用-l 37可以生成一个大小为37×4MB=148MB的逻辑卷。

[root@linuxprobe ~]# lvcreate -n vo -l 37 storageLogical volume "vo" created
[root@linuxprobe ~]# lvdisplay --- Logical volume ---LV Path /dev/storage/voLV Name voVG Name storageLV UUID D09HYI-BHBl-iXGr-X2n4-HEzo-FAQH-HRcM2ILV Write Access read/writeLV Creation host, time localhost.localdomain, 2017-02-01 01:22:54 -0500LV Status available# open 0
 LV Size 148.00 MiBCurrent LE 37Segments 1Allocation inheritRead ahead sectors auto- currently set to 8192Block device 253:2
………………省略部分输出信息………………

第4步:把生成好的逻辑卷进行格式化,然后挂载使用。

Linux系统会把LVM中的逻辑卷设备存放在/dev设备目录中(实际上是做了一个符号链接),同时会以卷组的名称来建立一个目录,其中保存了逻辑卷的设备映射文件(即/dev/卷组名称/逻辑卷名称)。

[root@linuxprobe ~]# mkfs.ext4 /dev/storage/vo
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
38000 inodes, 151552 blocks
7577 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=33816576
19 block groups
8192 blocks per group, 8192 fragments per group
2000 inodes per group
Superblock backups stored on blocks: 8193, 24577, 40961, 57345, 73729
Allocating group tables: done
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done
[root@linuxprobe ~]# mkdir /linuxprobe
[root@linuxprobe ~]# mount /dev/storage/vo /linuxprobe

第5步:查看挂载状态,并写入到配置文件,使其永久生效。

[root@linuxprobe ~]# df -hFilesystem Size Used Avail Use% Mounted on/dev/mapper/rhel-root 18G 3.0G 15G 17% /devtmpfs 905M 0 905M 0% /devtmpfs 914M 140K 914M 1% /dev/shmtmpfs 914M 8.8M 905M 1% /runtmpfs 914M 0 914M 0% /sys/fs/cgroup/dev/sr0 3.5G 3.5G 0 100% /media/cdrom/dev/sda1 497M 119M 379M 24% /boot/dev/mapper/storage-vo 145M 7.6M 138M 6% /linuxprobe[root@linuxprobe ~]# echo "/dev/storage/vo /linuxprobe ext4 defaults 0 0" >> /etc/fstab
7.2.2 扩容逻辑卷

在前面的实验中,卷组是由两块硬盘设备共同组成的。用户在使用存储设备时感知不到设备底层的架构和布局,更不用关心底层是由多少块硬盘组成的,只要卷组中有足够的资源,就可以一直为逻辑卷扩容。扩展前请一定要记得卸载设备和挂载点的关联。

[root@linuxprobe ~]# umount /linuxprobe

第1步:把上一个实验中的逻辑卷vo扩展至290MB。

[root@linuxprobe ~]# lvextend -L 290M /dev/storage/voRounding size to boundary between physical extents: 292.00 MiBExtending logical volume vo to 292.00 MiBLogical volume vo successfully resized

第2步:检查硬盘完整性,并重置硬盘容量。

[root@linuxprobe ~]# e2fsck -f /dev/storage/vo
e2fsck 1.42.9 (28-Dec-2013)
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/storage/vo: 11/38000 files (0.0% non-contiguous), 10453/151552 blocks
[root@linuxprobe ~]# resize2fs /dev/storage/vo
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/storage/vo to 299008 (1k) blocks.
The filesystem on /dev/storage/vo is now 299008 blocks long.

第3步:重新挂载硬盘设备并查看挂载状态。

[root@linuxprobe ~]# mount -a
[root@linuxprobe ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/rhel-root 18G 3.0G 15G 17% /
devtmpfs 985M 0 985M 0% /dev
tmpfs 994M 80K 994M 1% /dev/shm
tmpfs 994M 8.8M 986M 1% /run
tmpfs 994M 0 994M 0% /sys/fs/cgroup
/dev/sr0 3.5G 3.5G 0 100% /media/cdrom
/dev/sda1 497M 119M 379M 24% /boot
/dev/mapper/storage-vo 279M 2.1M 259M 1% /linuxprobe
7.2.3 缩小逻辑卷

相较于扩容逻辑卷,在对逻辑卷进行缩容操作时,其丢失数据的风险更大。所以在生产环境中执行相应操作时,一定要提前备份好数据。另外Linux系统规定,在对LVM逻辑卷进行缩容操作之前,要先检查文件系统的完整性(当然这也是为了保证我们的数据安全)。在执行缩容操作前记得先把文件系统卸载掉。

[root@linuxprobe ~]# umount /linuxprobe

第1步:检查文件系统的完整性。

[root@linuxprobe ~]# e2fsck -f /dev/storage/vo
e2fsck 1.42.9 (28-Dec-2013)
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/storage/vo: 11/74000 files (0.0% non-contiguous), 15507/299008 blocks

第2步:把逻辑卷vo的容量减小到120MB。

[root@linuxprobe ~]# resize2fs /dev/storage/vo 120M
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/storage/vo to 122880 (1k) blocks.
The filesystem on /dev/storage/vo is now 122880 blocks long.
[root@linuxprobe ~]# lvreduce -L 120M /dev/storage/voWARNING: Reducing active logical volume to 120.00 MiBTHIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce vo? [y/n]: yReducing logical volume vo to 120.00 MiBLogical volume vo successfully resized

第3步:重新挂载文件系统并查看系统状态。

[root@linuxprobe ~]# mount -a
[root@linuxprobe ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/rhel-root 18G 3.0G 15G 17% /
devtmpfs 985M 0 985M 0% /dev
tmpfs 994M 80K 994M 1% /dev/shm
tmpfs 994M 8.8M 986M 1% /run
tmpfs 994M 0 994M 0% /sys/fs/cgroup
/dev/sr0 3.5G 3.5G 0 100% /media/cdrom
/dev/sda1 497M 119M 379M 24% /boot
/dev/mapper/storage-vo 113M 1.6M 103M 2% /linuxprobe
7.2.4 逻辑卷快照

LVM还具备有“快照卷”功能,该功能类似于虚拟机软件的还原时间点功能。例如,可以对某一个逻辑卷设备做一次快照,如果日后发现数据被改错了,就可以利用之前做好的快照卷进行覆盖还原。LVM的快照卷功能有两个特点:

快照卷的容量必须等同于逻辑卷的容量;

快照卷仅一次有效,一旦执行还原操作后则会被立即自动删除。

首先查看卷组的信息。

[root@linuxprobe ~]# vgdisplay--- Volume group ---VG Name storageSystem ID Format lvm2Metadata Areas 2Metadata Sequence No 4VG Access read/writeVG Status resizableMAX LV 0Cur LV 1Open LV 1Max PV 0Cur PV 2Act PV 2VG Size 39.99 GiBPE Size 4.00 MiBTotal PE 10238
 Alloc PE / Size 30 / 120.00 MiB Free PE / Size 10208 / 39.88 GiBVG UUID CTaHAK-0TQv-Abdb-R83O-RU6V-YYkx-8o2R0e
………………省略部分输出信息………………

通过卷组的输出信息可以清晰看到,卷组中已经使用了120MB的容量,空闲容量还有39.88GB。接下来用重定向往逻辑卷设备所挂载的目录中写入一个文件。

[root@linuxprobe ~]# echo "Welcome to Linuxprobe.com" > /linuxprobe/readme.txt
[root@linuxprobe ~]# ls -l /linuxprobe
total 14
drwx------. 2 root root 12288 Feb 1 07:18 lost+found
-rw-r--r--. 1 root root 26 Feb 1 07:38 readme.txt

第1步:使用-s参数生成一个快照卷,使用-L参数指定切割的大小。另外,还需要在命令后面写上是针对哪个逻辑卷执行的快照操作。

[root@linuxprobe ~]#  lvcreate -L 120M -s -n SNAP /dev/storage/voLogical volume "SNAP" created
[root@linuxprobe ~]# lvdisplay
--- Logical volume ---LV Path /dev/storage/SNAPLV Name SNAPVG Name storageLV UUID BC7WKg-fHoK-Pc7J-yhSd-vD7d-lUnl-TihKltLV Write Access read/writeLV Creation host, time localhost.localdomain, 2017-02-01 07:42:31 -0500LV snapshot status active destination for voLV Status available# open 0LV Size 120.00 MiBCurrent LE 30COW-table size 120.00 MiBCOW-table LE 30Allocated to snapshot 0.01%Snapshot chunk size 4.00 KiBSegments 1Allocation inheritRead ahead sectors auto- currently set to 8192Block device 253:3
………………省略部分输出信息………………

第2步:在逻辑卷所挂载的目录中创建一个100MB的垃圾文件,然后再查看快照卷的状态。可以发现存储空间占的用量上升了。

[root@linuxprobe ~]# dd if=/dev/zero of=/linuxprobe/files count=1 bs=100M
1+0 records in
1+0 records out
104857600 bytes (105 MB) copied, 3.35432 s, 31.3 MB/s
[root@linuxprobe ~]# lvdisplay--- Logical volume ---LV Path /dev/storage/SNAPLV Name SNAPVG Name storageLV UUID BC7WKg-fHoK-Pc7J-yhSd-vD7d-lUnl-TihKltLV Write Access read/writeLV Creation host, time localhost.localdomain, 2017-02-01 07:42:31 -0500LV snapshot status active destination for voLV Status available# open 0LV Size 120.00 MiBCurrent LE 30COW-table size 120.00 MiBCOW-table LE 30Allocated to snapshot 83.71%Snapshot chunk size 4.00 KiBSegments 1Allocation inheritRead ahead sectors auto- currently set to 8192Block device 253:3

第3步:为了校验SNAP快照卷的效果,需要对逻辑卷进行快照还原操作。在此之前记得先卸载掉逻辑卷设备与目录的挂载。

[root@linuxprobe ~]# umount /linuxprobe
[root@linuxprobe ~]# lvconvert --merge /dev/storage/SNAPMerging of volume SNAP started.vo: Merged: 21.4%vo: Merged: 100.0%Merge of snapshot into logical volume vo has finished.Logical volume "SNAP" successfully removed

第4步:快照卷会被自动删除掉,并且刚刚在逻辑卷设备被执行快照操作后再创建出来的100MB的垃圾文件也被清除了。

[root@linuxprobe ~]# mount -a
[root@linuxprobe ~]# ls /linuxprobe/
lost+found readme.txt
7.2.5 删除逻辑卷
7.2.5 删除逻辑卷

当生产环境中想要重新部署LVM或者不再需要使用LVM时,则需要执行LVM的删除操作。为此,需要提前备份好重要的数据信息,然后依次删除逻辑卷、卷组、物理卷设备,这个顺序不可颠倒。

第1步:取消逻辑卷与目录的挂载关联,删除配置文件中永久生效的设备参数。

[root@linuxprobe ~]# umount /linuxprobe
[root@linuxprobe ~]# vim /etc/fstab
#
# /etc/fstab
# Created by anaconda on Fri Feb 19 22:08:59 2017
#
# 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
#
/dev/mapper/rhel-root / xfs defaults 1 1
UUID=50591e35-d47a-4aeb-a0ca-1b4e8336d9b1 /boot xfs defaults 1 2
/dev/mapper/rhel-swap swap swap defaults 0 0
/dev/cdrom /media/cdrom iso9660 defaults 0 0
/dev/storage/vo /linuxprobe ext4 defaults 0 0

第2步:删除逻辑卷设备,需要输入y来确认操作。

[root@linuxprobe ~]# lvremove /dev/storage/vo
Do you really want to remove active logical volume vo? [y/n]: yLogical volume "vo" successfully removed

第3步:删除卷组,此处只写卷组名称即可,不需要设备的绝对路径。

[root@linuxprobe ~]# vgremove storageVolume group "storage" successfully removed

第4步:删除物理卷设备。

[root@linuxprobe ~]# pvremove /dev/sdb /dev/sdcLabels on physical volume "/dev/sdb" successfully wipedLabels on physical volume "/dev/sdc" successfully wiped

在上述操作执行完毕之后,再执行lvdisplay、vgdisplay、pvdisplay命令来查看LVM的信息时就不会再看到信息了

转载于:https://www.cnblogs.com/gaoyuechen/p/9299554.html

使用RAID与LVM磁盘阵列技术。相关推荐

  1. 第六章 使用RAID与LVM磁盘阵列技术

    文章目录 第六章 使用RAID与LVM磁盘阵列技术 一.RAID磁盘冗余阵列 1.部署磁盘阵列 (1).RAID0.1.5.10方案技术对比 (2).RAID0 RAID1 RAID5 RAID10介 ...

  2. 《linux就该这么学——笔记》第7章 使用RAID与LVM磁盘阵列技术

    使用RAID与LVM磁盘阵列技术 7.1 RAID(独立冗余磁盘阵列) 7.1.1 RAID0 7.1.2 RAID1 7.1.3 RAID5 7.1.4 RAID1 0 7.1.5 部署磁盘阵列(实 ...

  3. RAID 与 LVM 磁盘阵列技术

    文章目录 物理设备的命名规则 硬盘相关的知识 一.RAID(独立冗余磁盘阵列) 1.1 RAID 简介 1.2 RAID的几种工作模式 1.2.1 RAID 0 (存储性能) 1.2.1 RAID 1 ...

  4. 第7章 使用RAID与LVM磁盘阵列技术

    RAID(Redundant Array of Independent Disks)独立冗余磁盘阵列技术 RAID 0.RAID 1.RAID 5与RAID 10这4种最常见的方案 RAID 0技术能 ...

  5. Linux应该这么学第7章使用 RAID 与 LVM 磁盘阵列技术

    本章讲解了如下内容: ➢ RAID(独立冗余磁盘阵列): ➢ LVM(逻辑卷管理器). 在学习了第 6 章讲解的硬盘设备分区.格式化.挂载等知识后,本章将深入讲解各个常 用 RAID(Redundan ...

  6. 第9节 第6章 存储结构与磁盘划分(2)第7章 使用RAID与LVM磁盘阵列技术

    6.6 添加交换分区 SWAP(交换)分区是一种通过在硬盘中预先划分一定的空间,然后将把内存中暂时不常用的数据临时存放到硬盘中,以便腾出物理内存空间让更活跃的程序服务来使用的技术,其设计目的是为了解决 ...

  7. RAID和LVM磁盘阵列技术

    目录 前言 一.RAID(独立冗余磁盘阵列) 二.LVM(逻辑卷管理器) 前言 在此帖子写的时候,目前地表最强处理器是AMD ThreadRipper 3960X,这款处理器采用了7nm工艺制造,基于 ...

  8. linux学习第七章使用RAID和LVM磁盘阵列技术

    一.RAID磁盘冗余阵列 1988年,加利福尼亚大学伯克利分校首次提出并定义了RAID技术的概念.RAID技术通过把多个硬盘设备组合成一个容量更大.安全性更好的磁盘阵列,并把数据切割成多个区段后分别存 ...

  9. linux的逻辑卷和磁盘阵列,使用RAID与LVM磁盘阵列技术

    #### RAID 0 RAID0技术把多块物料硬盘设备(至少两块)通过硬件或软件的方式串联在一起,组成一个大的卷组,并将数据依次写入到各个物理硬盘中. 这样硬盘的读写性能会提升数倍,但若任意一块硬盘 ...

最新文章

  1. 【FFmpeg】结构体详解(一):AVCodec、AVCodecContext、AVCodecParserContext、AVFrame、AVFormatContext 、AVIOContext
  2. 彻底剖析室内、室外激光SLAM关键算法原理、代码和实战(cartographer+LOAM+LIO-SAM)
  3. Javabean学习纪要
  4. UINavigationController 返回到各级目录
  5. 解决hal.dll丢失问题 调试方法启动XP
  6. Redis (一)Redis简介、安装部署
  7. JZOJ 5163. 【NOIP2017模拟6.25】PS的烦恼
  8. MicroPython 1.8.6重新支持512K的模块
  9. python 回归去掉共线性_线性回归中的多重共线性与岭回归
  10. “滚!”央视、腾讯暂停NBA季前赛转播,NBA被中国市场“下架”!
  11. 程序员的绩效到底是应该衡量项目,还是改 Bug 量?
  12. [转]Linux下的动态连接库及其实现机制
  13. !DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Transitional//EN http://www.w3.org/TR/xhtml1/DTD/xhtm...
  14. 日处理20亿数据,实时用户行为服务系统架构实践
  15. 《创业时,我们在知乎聊什么》- 书摘
  16. Xpose实战一:来,让我们任性登录,替换掉它的登录验证
  17. ArcCatalog不能预览地图服务
  18. i78700和i510400f性能差距大不大
  19. MyBatisPlus之逻辑删除
  20. 解决 go get获取package时候time out超时问题

热门文章

  1. Ajax拿取JSON格式的数据
  2. 七天免登录JavaScript实现
  3. onclick 传参,用转义符进行转义。
  4. angular大型项目实践总结的几个要点
  5. AI:IPPR的数学表示-CNN方法
  6. SciPy和Numpy处理能力
  7. shell重启jar包
  8. angular2学习记录-给后端程序员的经验分享
  9. NHibernate初探-SQLDialects
  10. KeyMob:我们做的不仅是移动广告聚合 更是靠谱