Linux上LVM逻辑卷管理高级教程

时间:2020-03-21 11:42:36  来源:igfitidea点击:

大多数的计算机用户在创建分区之后,一定觉得有必要增加或者减少(调整大小)分区的大小,至少一次。如果我们在生产环境中工作,有时可能需要创建一个大分区,通过组合不同大小的小硬盘,这样,在操作系统中,它看起来就像一个大硬盘/分区。

以上提到的事情可以通过称为逻辑卷管理或者通常称为LVM的技术来实现。heinzmauelshagen编写了LVM的初始代码,该代码在hpunix系统上运行。后来,所有现代Linux发行版都开始使用它作为一种机制来提供存储灵活性,它提供了调整大小的能力,并将不同大小的多个物理硬盘组合成一个逻辑卷,供操作系统使用。

LVM可以定义为在物理硬盘之上的软件磁盘管理,以便提供诸如通过组合多个硬盘来生成大容量的功能、易于调整分区大小、在不影响在线数据的情况下移除物理磁盘、通过跨多个物理磁盘分条提高吞吐量等功能,借助快照等方便的备份管理。LVM还提供了类似于raid级别1和raid级别0(镜像和条带化)的机制,如果我们有兴趣了解raid,我建议我们阅读以下文章。

请记住,在本教程中,我们将使用基于redhat/Centos的发行版来理解LVM。LVM在其他发行版上的实现几乎相同。如果我们遇到任何问题,请告知我们,同时遵循本教程。也请让我们知道你的意见和建议,以改进这篇文章(或者任何文章上theitroad.测试),通过注释。

LVM(逻辑卷管理)有哪些组件

为了更容易地理解LVM,我们将LVM的各个组成部分分成不同的部分,并对每个部分分别进行研究。在本节中,我们将介绍LVM的每个组件。

物理卷: 等同于 物理磁盘

正如我们前面讨论过的,可以通过将不同的硬盘或者分区组合在一起来制作一个大的分区。物理磁盘或者物理卷可以是整个硬盘或者分区。你可能会问为什么要分区?

LVM是一个软件实现,因此我们可以提供任意大小的分区,或者任意大小的整个物理硬盘,或者由硬盘组成的单个大分区作为物理磁盘。

无论是将硬盘还是分区分配为物理磁盘,首先需要将该设备标记为LVM的物理卷。可以通过使用fdisk命令在设备的第二个扇区添加标签来对设备(分区或者硬盘)进行标记。这种对分区或者硬盘进行标记将使识别物理卷更容易。

所以,让我们创建三个100MB的不同分区,并将其标记为LVM物理卷(在现实世界中,可以使用三个不同的硬盘作为物理卷)

[root@localhost ~]# fdisk /dev/sda

The number of cylinders for this disk is set to 19457.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
   (e.g., DOS FDISK, OS/2 FDISK)

Command (m for help): n
First cylinder (18869-19457, default 18869):
Using default value 18869
Last cylinder or +size or +sizeM or +sizeK (18869-19457, default 19457): +100M

Command (m for help): w
The partition table has been altered!
<div style='display:none; visibility:hidden;' id='zvec'><a href='http://www.holyrosarypdx.org/church/best-loan-personal'>suggests</a></div>

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table.
The new table will be used at the next reboot.
Syncing disks.

重复上述步骤三次,创建3个100MB的分区。我们将使用这三个分区作为LVM的物理卷,因此让我们将它们的分区标签更改为LVM。这可以通过以下方法实现。

[root@localhost ~]# fdisk /dev/sda

The number of cylinders for this disk is set to 19457.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
   (e.g., DOS FDISK, OS/2 FDISK)

Command (m for help): t            ------------->> t is used to change the partition system ID.
Partition number (1-8): 8          ------------->> 8 means here partition number 8 i.e /dev/sda8
Hex code (type L to list codes): l ------------->> l is used to see list of codes
Hex code (type L to list codes): 8e    ------->> 8e denotes LVM partition Type
Changed system type of partition 8 to 8e (Linux LVM)

在上面所示的方法中,我们将分区标签类型更改为8e(用于用linuxlvm类型标记分区)。对我们创建的所有三个分区执行此操作,以便所有分区都可以成为LVM物理卷类型。

在Linux中将分区类型更改为LVM时,请记住以下几点。下面几点提到了更改类型的原因,类型更改的作用是什么。

分区上的LVM标签系统将磁盘/分区标识为LVM物理卷

标签位于第二个扇区(默认情况下,扇区被假定为512字节)

它包含物理卷的大小

它还将告诉LVM元数据在物理磁盘/卷上的位置(别担心!我们将在本教程的下一节讨论lvm元数据)

标签还提供物理卷的唯一标识。

让我再次把这一点讲清楚。在上面的例子中,我们在创建物理卷时使用了分区(3个100MB大小的分区),但是我们可以在LVM中将整个硬盘用作物理卷。物理卷的内容如下图所示,以使上述有关物理卷的要点非常清楚。

上面的图表描述了我们讨论的物理范围。在上图中,卷组由两个物理卷组成,具有5个相同大小的物理扩展数据块。(上图中的PE代表物理范围。)

让我们使用在上一节中使用名为vgcreate的命令标记的物理磁盘创建卷组。

[root@localhost ~]# vgcreate vg00 /dev/sda6 /dev/sda7 /dev/sda8  --->>Volume group creation.
  Volume group "vg00" successfully created

上面的命令创建一个包含三个物理卷(在本例中为/dev/sda6、sda7、sda8)的卷组。并将名称 vg00分配给该卷组。要激活此卷组,需要运行命令 vgchange

[root@localhost ~]# vgchange -a y vg00                   ---->>activate volume group vg00
  0 logical volume(s) in volume group "vg00" now active

现在让我们看看用 vgdisplay命令创建的卷组的完整信息。

[root@localhost ~]# vgdisplay             ---->>Display volume group information.
  --- Volume group ---
  VG Name               vg00
  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               300.00 MB        --->>size of volume group.
  PE Size               4.00 MB
  Total PE              75
  Alloc PE/Size       0/0   
  Free  PE/Size       75/300.00 MB
  VG UUID               H3FYcT-1u28-i8ln-ehNm-DbFM-nelQ-3UFSnw

上面的命令输出为我们提供了有关创建的卷组的完整信息。最重要的是,我们需要注意以下几点。

使用的LVM版本(在本例中为LVM 2)

卷组名(vg00)

元数据详细信息

物理盘区大小(在lvm2中默认为4mb,稍后我们将看到更改默认物理盘区大小)

卷组中的物理扩展数据块数

卷组中的可用物理扩展数据块

卷组的UUID

在创建卷组时,我们可以根据需要将物理扩展数据块大小从默认值4MB更改为任意值。允许在创建卷组时更改物理盘区大小。请记住,一旦创建卷组,就不能更改物理盘区大小。

[root@localhost ~]# vgcreate vg00 /dev/sda6 /dev/sda7 /dev/sda8 -s 34M

上面的命令将使卷组具有完全相同的名称,但将保持物理盘区大小为34 MB,而不是默认的4MB(稍后我们可以使用 vgdisplay命令进行验证)。

现在让我们继续了解LVM的最后一个组件,操作系统和用户将使用它来存储文件和数据。

(3)LVM中的逻辑卷

我们刚才创建的卷组是一个磁盘空间池,通过合并所有物理卷的所有物理扩展。我们可以通过创建逻辑卷从这个大的卷组中创建分区。这些逻辑卷是用户访问数据的真实位置。

LVM中有三种逻辑卷。让我们先了解它们中的每一个,然后了解从卷组创建逻辑卷的方法。

线性逻辑卷

线性逻辑卷只是简单地将多个物理卷合并为一个而构成的逻辑卷。让我们举个例子,以更好的方式理解线性逻辑卷。假设我们有两个物理卷,每个卷有50个物理扩展数据块,每个扩展数据块为4 MB。这意味着一个物理卷是200M B(50 x 4)。

如果看到上面的示例,则数据被分条到三个不同的物理磁盘上。第一个条带位于第一个物理磁盘上,第二个条带位于第二个物理磁盘上,依此类推。

我们可以在lvcreate命令的帮助下创建条带化逻辑卷。可以使用lvcreate命令中的 -i选项创建条带化逻辑卷。使用此选项指定的数字是将剥离逻辑卷的物理磁盘数。让我们看看下面的例子。

[root@myvm1 ~]# lvcreate -L 10G -i2 -I64 -n example examplevg

上面的命令将创建一个条带化逻辑卷,条带大小为64KB,总大小为10G,并将使用2个物理卷作为条带,在名为 examplevg的卷组上命名为 example

我们可能还记得,我们可以从不同大小的物理卷创建卷组。在这种情况下,条带化逻辑卷的最大大小只能等于最小物理卷的大小。

镜像逻辑卷

镜像逻辑卷与raid级别1非常相似,在raid级别1中,数据跨所用磁盘数进行镜像。它为数据提供了更好的冗余。

简单地说,我们可以说一个物理磁盘的精确副本副本副本存在于另一个物理磁盘上。在为多个卷创建逻辑镜像的同时,可以为多个卷创建逻辑镜像。逻辑卷的镜像至少需要三个物理卷。

第一个卷将作为第一个物理卷

第二个物理卷将充当第二个镜像段

第三个物理卷将保存与镜像相关的日志

在上面的示例中,前两个物理卷充当两个镜像分支,第三个物理卷存储镜像中同步的内容和镜像中未同步的内容的日志。

现在让我们继续创建一个带有镜像的逻辑卷。

[root@myvm1 ~]# lvcreate -L 10G -m1 -n mirrorexample examplevg

在上面的命令中,-L选项用于指定逻辑卷的大小,-m选项用于指定逻辑卷的镜像数(在我们的例子中,我们使用了一个镜像),逻辑卷的名称是 mirrorexample,它是从一个名为 examplevg的卷组创建的。

指定 m1选项将创建文件系统的两个副本,一个是线性卷,另一个是卷的镜像。因此,如果需要两个镜像,则需要使用 lvcreate命令指定- m2选项。

我们始终可以使用以下方法将线性卷转换为镜像卷或者将镜像卷转换为线性卷。

[root@myvm1 ~]# lvconvert -m1 /dev/vg00/lv0

上面的命令可用于将线性逻辑卷转换为带有一个镜像的镜像逻辑卷,其名称为/dev/vg00/lv0。

[root@myvm1 ~]# lvconvert -m0 /dev/vg00/lv0

在上述命令的帮助下,我们可以从名为 /dev/vg00/lv0的逻辑卷中删除镜像

注意:在以上所有创建任何类型逻辑卷的例子中,我们需要先用我们所需的文件系统格式化逻辑卷,类似于在任何普通分区上进行的格式化,然后将它们装入使用。

现在让我们来看看LVM的不同命令,看看它们做了什么。我们还将看到用于调整现有逻辑卷大小的方法,等等。

如何调整LVM逻辑卷的大小?

在Linux中,可以通过简单的 lvextendlvreduce命令来调整逻辑卷的大小。我们将讨论在Linux中增加和减小LVM的大小。

调整大小之前需要采取的第一步是卸载当前正在使用的逻辑卷。让我们从增加LVM的大小开始。

[root@localhost ~]# lvextend -L +50M /dev/vg00/lv00  -->> I am increasing logical volume to 50mb.
  Rounding up size to full physical extent 52.00 MB
  Extending logical volume lv00 to 204.00 MB
  Logical volume lv00 successfully resized

上面的命令,可用于将逻辑卷的大小增加50米。-L用于指定要增加的大小,最后一个参数当然是逻辑卷名。

现在,让我们在使用调整大小的逻辑卷之前,在下面的命令的帮助下使卷组处于活动状态。

[root@localhost ~]# vgchange -a y vg00      --->>activating change.
  1 logical volume(s) in volume group "vg00" now active

现在,在装载调整后的逻辑卷之前,让我们在resizefs命令的帮助下格式化新添加的空间。

[root@localhost ~]# resize2fs /dev/vg00/lv00
resize2fs 1.39 (29-May-2006)
Filesystem at /dev/vg00/lv00 is mounted on /theitroad.test; on-line resizing required
Performing an on-line resize of /dev/vg00/lv00 to 208896 (1k) blocks.
The filesystem on /dev/vg00/lv00 is now 208896 blocks long.

现在,我们只需在所需的装载点装载逻辑卷,并开始使用增加的逻辑卷大小。现在让我们看看用于减小逻辑卷大小的方法。

在减小逻辑卷的大小之前,总是建议执行fsck文件系统检查。运行 fsck后,需要先卸载文件系统,然后通过resize2fs命令减小文件系统的大小,如下图。

[root@localhost ~]# resize2fs /dev/vg00/lv00 100M  -->>resize filesystem
resize2fs 1.39 (29-May-2006)
Resizing the filesystem on /dev/vg00/lv00 to 102400 (1k) blocks.
The filesystem on /dev/vg00/lv00 is now 102400 blocks long.

注意,上面命令中指定的100M是文件系统缩减后的最终大小(它不是文件系统将被缩减到的大小,而是文件系统的最终大小)。

现在我们可以通过 lvreduce命令缩小逻辑卷的大小,如下所示。

[root@localhost ~]# lvreduce /dev/vg00/lv00 -L 100M  -->>I am reducing logical volume to 100mb.
  WARNING: Reducing active logical volume to 100.00 MB
  THIS Jan DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce lv00? [y/n]: y
  Reducing logical volume lv00 to 100.00 MB
  Logical volume lv00 successfully resized

在上面的命令中,逻辑卷也减少到100m而不是100m。

现在我们只需重新装载卷并确认新大小。