Linux 逻辑卷管理

如果用标准分区在硬盘上创建了文件系统,为已有的文件系统添加额外的空间是一件十分痛苦的事情。只能在已有的硬盘上的可用空间范围内调整分区大小,如果硬盘空间不够的话,就只能换一个大容量的硬盘,然后手动将已有的文件系统移动到新的硬盘上。

这个时候可以通过将另外一个硬盘上的分区加入已有的文件系统,动态地添加存储空间。Linux 可以通过 LVM(逻辑卷管理)来完成这项工作

逻辑卷管理布局

逻辑卷管理的核心在于如何处理安装在系统上的硬盘分区。在逻辑卷管理的世界中,硬盘分区被称为 “物理卷”(physical volume PV),每个物理卷都会映射到硬盘上特定的物理分区

多个物理卷集中在一起可以形成一个卷组(volume group VG)。逻辑卷管理系统将卷组视为一个物理硬盘,但事实上卷组可能是由分布在多个物理硬盘上的不同分区组成的。卷组提供了一个创建逻辑分区的平台,而这些逻辑分区则包含了文件系统

整个结构中的最后一层是逻辑卷(logical volume LV)。逻辑卷为 Linux 提供了创建文件系统的分区环境,作用类似于 Linux 中的物理硬盘分区。Linux 系统将逻辑卷视为物理分区

可以使用任意一种标准的 Linux 文件系统来格式化逻辑卷,然后再将他们加入 Linux 虚拟目录中的某个挂载点

逻辑卷和物理分区之间的关系如下图所示:

LVM.png

图中一共包含了三个不同的物理硬盘,根据这三个硬盘的情况,得到了每个硬盘的分区,对应到不同的物理卷。这些物理卷共同组成了一个卷组,此时 Linux 的 LVM 将整个卷组看作是一个硬盘,然后在这个硬盘上创建逻辑卷。现在,Linux 就可以单独对每个逻辑卷使用不同的文件系统进行格式化(Unix 编程哲学之“加一层”)

可以注意到硬盘 \(3\) 有一部分的空间是没有被使用的,通过逻辑卷可以轻松地管理这部分未使用的空间:将这部分空间加入到已有的卷组中,或者为它单独创建一个逻辑卷

Linux 的 LVM

Linux 的 LVM 有两个可用的版本:

  • LVM 1:最初 LVM 于 1998 年发布,只能用于 Linux 2.4 版本,该 LVM 仅仅提供了基本的逻辑卷管理功能
  • LVM 2:LVM 的更新版本,它在标准的 LVM 功能外提供了一些额外的功能

一般情况下建议使用 LVM 2,LVM 2 提供了以下的一些新功能:

  • 快照

    Linux LVM允许你在逻辑卷在线的状态下将其复制到另一个设备,这个功能被称为 “快照”。这个功能在备份数据时特别有用,比如:MySQL 的数据备份可以通过快照进行备份,而不需要显式地加锁。

    LVM 1 创建的快照在创建完成之后就不能再写入数据,而 LVM 2 则允许创建可读写的快照,在这种情况下,如果某一个逻辑卷出现了问题,就可以直接将快照替换掉原来的逻辑卷,这个特性对于故障转移来讲特别有用

  • 条带化

    当 Linux LVM 文件写入逻辑卷时,文件中的数据块会被分散到多个物理硬盘上

    条带化这一特性可以提高 IO 的访问速度,因为此时将数据的读写分散到了多个硬盘中。LVM 条带化和 RAID 条带化不同,LVM 条带化不提供用来创建容错环境的校验信息,这会增加文件由于磁盘故障而丢失的概率,并且单个磁盘的故障将会导致整个逻辑卷都无法使用

  • 镜像

    通过 LVM 安装文件系统不能确保文件系统不再出现问题,一旦出现问题,就有可能再也无法恢复

    尽管 LVM 提供的快照功能提供了一些可能的帮助,但是对于某些情况快照功能并不能完全避免问题(比如涉及到大量数据的系统,自上次快照之后可能要存储上千条记录)。

    解决这种问题的一个方案就是使用 LVM 镜像,镜像是一个实时更新的逻辑卷的完整副本,当创建镜像逻辑卷时,LVM 会将原始逻辑卷同步到镜像副本中。一旦同步完成,LVM 会为文件系统的每次写入都执行两次(一次写入住主逻辑卷,一次写入镜像逻辑卷),尽管降低了写入性能,但是提高了系统的可靠性

使用 Linux LVM

这里使用 LVM 2,如果没有安装,可以使用相关的软件安装工具安装 lvm2,对于 Ubuntu 来讲,可以执行如下的安装命令:

sudo apt install lvm2

定义物理卷

创建逻辑卷的第一步是定义物理卷,将硬盘上的物理分区转换为 Linux LVM 使用的物理卷。在这个过程中,可以使用 fdisk 来管理安装在系统上的任何存储设备上的分区。

首先,使用 fdisk 来查看磁盘的分区情况:

fdisk -l

可能会看到类似下面的输出:

…………………………

Disk /dev/sdc:8 GiB,8589934592 字节,16777216 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节

Disk /dev/mapper/cs-root:12.5 GiB,13417578496 字节,26206208 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节

Disk /dev/mapper/cs-swap:1.5 GiB,1610612736 字节,3145728 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节

…………………………

可以看到,当前系统中存在一个名为 ‘/dev/sdc’ 的分区,并且这个分区目前还没有被格式化,现在,让我们把这个分区创建为基本的 Linux 的分区,可以使用 fdisk 的交互式 n 命令来添加该分区:

2022-04-21 20-48-46 的屏幕截图.png

至此将 ‘/dev/sdc’ 转换为了基本的 Linux 分区,接下来将通过这个分区创建对应的物理卷,这个过程可以通过 pvcreate 命令来完成:

sudo pvcreate /dev/sdc

如果看到类似下面的输出信息,则说明已经创建了该分区对应的物理卷:

Physical volume "/dev/sdc" successfully created.

创建完成之后可以通过 pvdisplay 来查看当前的创建情况,对于当前的分区,可以执行如下的命令查看创建进度:

sudo pvdisplay /dev/sdc

2022-04-21 20-59-53 的屏幕截图.png

创建卷组

创建物理卷之后,就需要将这些物理卷组合到一个卷组中,形成一个新的 “磁盘”。创建卷组可以使用 vgcreate 命令,如果希望创建一个名为 Vo11 的卷组,并将 /dev/sdc 添加到卷组中,可以执行如下的命令:

sudo vgcreate Vo11 /dev/sdc

在这个过程中会自动创建 Vo11 卷组,如果希望物理卷添加到已有的卷组中,可以使用 vgextend 命令,如下所示:

# 将 /dev/sdc 添加到 Vo10 卷组中
sudo vgextend Vo10 /dev/sdc

创建逻辑卷

Linux 使用逻辑卷来模拟物理分区,并在其中保存文件系统。Linux 会像处理物理分区一样处理逻辑卷,允许自定义逻辑卷中的文件系统,然后将文件系统挂载到虚拟目录上

要创建逻辑卷,可以使用 lvcreate 命令来完成,例如上文中已经创建的卷组,可以执行如下的命令创建一个逻辑卷:

# -l 指定逻辑卷占用卷组的空间大小,-n 指定创建的逻辑卷的名称
sudo lvcreate -l 100%FREE -n lvtest Vo11

创建完成之后,可以使用 lvdisplay 来查看创建的逻辑卷的详细情况:

sudo lvdisplay Vo11

创建文件系统

运行完 lvcreate 命令之后,逻辑卷就已经创建完成了,但是此时的逻辑卷还没有对应的文件系统。在一般物理分区上创建文件系统的命令在逻辑卷上同样有效。例如,如果希望给创建的逻辑卷设置为 ext4 文件系统,可以执行如下的命令:

sudo mkfs.ext4 /dev/Vo11/lvtest

创建了文件系统之后,就可以将这个逻辑卷挂载到虚拟目录中,和物理分区的使用一样,唯一需要注意的是需要使用特殊的路径来引用这个逻辑卷。如下所示:

# 将创建好的逻辑卷挂在到 /mnt/lxh_part,注意在挂载之前确保挂载点存在
# 即 /mnt/lxh_part 目录必须存在
sudo mount /dev/Vo11/lvtest /mnt/lxh_part

挂载之后,就可以像使用物理分区一样使用逻辑卷了

修改 fstab

为了避免每次启动系统都要手动挂载,可以在 fstab 中进行配置,使得系统在启动时自动挂载。如下所示:

#
# /etc/fstab
# Created by anaconda on Sun Jan 16 13:14:50 2022
#
# 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.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
/dev/mapper/cs-root     /                       xfs     defaults        0 0
UUID=e36a4b91-186c-48f0-850d-e3c90ebfeb20 /boot                   xfs     defaults        0 0
/dev/mapper/cs-swap     none                    swap    defaults        0 0
# 逻辑卷的挂载配置
/dev/Vo11/lvtest	/mnt/lxh_part		ext4	defaults	0	0

有关 fstab 的配置可以参考:https://www.cnblogs.com/FatalFlower/p/15419794.html

修改 LVM

具体可以参考以下的相关命令:vgchangevgremovevgreducelvextendlvreduce

如果可以的话,使用 LVM 的 GUI 工具是一个有用的手段


参考:

[1] https://www.cnblogs.com/gaojun/archive/2012/08/22/2650229.html

[2] 《Linux 命令行和 Shell 脚本编程大全》

posted @ 2022-04-21 21:40  FatalFlower  阅读(539)  评论(0编辑  收藏  举报