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

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

逻辑卷管理布局

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

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

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

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

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

图中一共包含了三个不同的物理硬盘,根据这三个硬盘的情况,得到了每个硬盘的分区,对应到不同的物理卷。这些物理卷共同组成了一个卷组,此时 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 命令来添加该分区:

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

sudo pvcreate /dev/sdc

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

Physical volume "/dev/sdc" successfully created.

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

sudo pvdisplay /dev/sdc

创建卷组

创建物理卷之后,就需要将这些物理卷组合到一个卷组中,形成一个新的 “磁盘”。创建卷组可以使用 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 脚本编程大全》

Linux 逻辑卷管理的更多相关文章

  1. Linux逻辑卷管理器(LVM)

    LVM基础 通过使用Linux的逻辑卷管理器(Logical Volume Manager, LVM),用户可以在系统运行时动态调整文件系统的大小,把数据从一块硬盘重定位到另一块硬盘,也可以提高I/O ...

  2. linux逻辑卷管理

    近期在进行linux充电,依据网络资料自己整理的资料,分享一下 ---------------------------------------------------------- Linux逻辑卷管 ...

  3. Linux逻辑卷管理器concept

    Linux逻辑卷管理concept-------------------------转载2013/10/09 通过使用Linux的逻辑卷管理器(Logical Volume Manager, LVM) ...

  4. linux逻辑卷管理(LVM)

    1. 逻辑卷(LVM)的原理 LVM(Logical Volume Manager)逻辑卷管理 是在物理磁盘和文件系统的之间添加一个逻辑层,通过对底层物理磁盘的封装,以逻辑卷的方式呈现给上层应用,通过 ...

  5. Linux 逻辑卷管理LVM

    LVM概述 Logical Volume Manager,逻辑卷管理 屏蔽了底层磁盘布局,便于动态调整磁盘容量 需要注意:/boot分区用于存放引导文件,不能应用LVM机制 LVM结构 目标:将sdb ...

  6. 【转】Linux逻辑卷管理

    一. 前言 LVM是逻辑卷管理(Logical Volume Manager)的简称,它是建立在物理存储设备之上的一个抽象层,允许你生成逻辑存储卷,与直接使用物理存储在管理上相比,提供了更好灵活性.L ...

  7. linux逻辑卷管理 (LVM)(转)

    1.什么是 LVM LVM 是逻辑盘卷管理(Logical Volume Manager)的简称,它是 Linux 环境下对磁盘分区进行管理的一种机制,LVM 是建立在硬盘和分区之上的一个逻辑层,来为 ...

  8. linux 逻辑卷管理 调整分区大小

    测试机各种报错,创建个目录都报错,df看了一下,发现VolGroup-lv_root 100%,虚拟磁盘满了,怎么办呢 1,解决过程 # df -h //查看分区 # umount /home //取 ...

  9. linux 逻辑卷管理 /dev/mapper/VolGroup-lv_root 100%调整分区大小

    1.解决过程 # df -h   // 查看分区 # umount /home   // 取消挂载 # e2fsck -f /dev/mapper/VolGroup-lv_home   // 分区检测 ...

  10. CentOS6.5 linux 逻辑卷管理 调整分区大小

    [root@localhost ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/VolGroup-lv_root 50 ...

随机推荐

  1. Linux-Stream内存带宽及MLC内存延迟性能测试方法

    1.Stream内存带宽测试   Stream是业界主流的内存带宽测试程序,测试行为相对简单可控.该程序对CPU的计算能力要求很小,对CPU内存带宽压力很大.随着处理器核心数量的增大,而内存带宽并没有 ...

  2. Redis系列之——主从复制原理与优化、缓存的使用和优化

    @ 目录 一 什么是主从复制 1.1 原理 1.2 主库是否要开启持久化 1.3 辅助配置(主从数据一致性配置) 二 复制的 配置 2.1 slave 命令 2.2 配置文件 四 故障处理 五 复制常 ...

  3. NW排错

    fist date VM备份失败时: NW server上(linux): > nsradmin >p type : nsr recover > cd /nsr/logs >n ...

  4. 是因为不同的浏览器内核吗--Could not register service workers到底是怎么回事

    什么是浏览器内核 浏览器内核(Rendering Engine),是浏览器最核心的部分. 它负责处理网页的HTML.CSS.JavaScript等代码,并将其转化为可视化的网页内容.即我们常说的对网页 ...

  5. slice简介

    简介 Go语言中的切片(slice)是一种灵活的数据结构,它构建在数组之上并提供了方便的方式来操作数组的一部分.切片的底层实现涉及到数组和一些元数据.以下是Golang切片的底层实现的详细介绍: 底层 ...

  6. CF1707B [Difference Array]

    Problem 题目简述 设序列 \(a\) ,并且是单调递增的.设 \(a\) 当前长度为 \(l\),你要对 \(a\) 作差分,即令 \(b_i = a_{i+1} - a_i(1\le i & ...

  7. html-7(JavaScript-1)

    放在函数里面 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <ti ...

  8. 数据结构-线性表-单链表(c++)

    线性表的运算 求长度GetLength(L),求线性表L的长度 置空表SetNull(L),将线性表置成空表 按位查找Get(L,i),查找线性表L第i个元素 按值查找Location(L,x),查找 ...

  9. JSX、TSX 整体理解

    可以少去理解一些不必要的概念,而多去思考为什么会有这样的东西,它解决了什么问题,或者它的运行机制是什么? JS JavaScript 是互联网上最流行的脚本语言,这门语言可用于 HTML 和 web, ...

  10. [WPF]动手写一个简单的消息对话框

    消息对话框是UI界面中不可或缺的组成部分,用于给用户一些提示,警告或者询问的窗口.在WPF中,消息对话框是系统原生(user32.dll)的MessageBox,无法通过Style或者Template ...