LFCS 系列第十一讲：如何使用命令 vgcreate、lvcreate 和 lvextend 管理和创建 LVM
逻辑卷管理 （LVM）相较于传统的分区管理有许多优点，已经成为大多数（如果不能说全部的话） Linux 发行版安装时的默认选择。LVM 最大的优点应该是能方便的按照你的意愿调整（减小或增大）逻辑分区的大小。
LFCS LVM
111.20.112.126
LVM2分区空间是动态扩展的吗？？！！
来自陕西西安的 Chrome 51.0|GNU/Linux 用户
2016-07-21T12:18:51.000
58.240.237.206
貌似不是
来自江苏苏州的 Safari 9.1|Mac 10.11 用户
2016-07-22T16:34:07.000
58.48.11.89
说真的lvm是套落后的东西了，很多现代的fs实现替代了lvm几乎所有功能，并且少了一层layer更高效稳定。
来自湖北武汉的 QQ Browser 9.4|Windows 7 用户
2016-07-23T00:19:01.000
111.239.90.28
ZFS嗎？我記得Linux還沒有對ZFS提供native support
来自日本的 Firefox 60.0|Mac 10.13 用户
2018-12-14T12:19:22.000
逻辑卷管理 （LVM）相较于传统的分区管理有许多优点，已经成为大多数（如果不能说全部的话） Linux 发行版安装时的默认选择。LVM 最大的优点应该是能方便的按照你的意愿调整（减小或增大）逻辑分区的大小。
由于 LFCS 考试中的一些改变已在 2016 年 2 月 2 日生效，我们添加了一些必要的专题到 [LFCS 系列](/article-7161-1.html)。我们也非常推荐备考的同学，同时阅读 [LFCE 系列](http://www.tecmint.com/installing-network-services-and-configuring-services-at-system-boot/)。


![](/data/attachment/album/201607/20/232801y520roewoe2uquro.png)


*LFCS：管理 LVM 和创建 LVM 分区*


在安装 Linux 系统的时候要做的最重要的决定之一便是给系统文件、home 目录等分配空间。在这个地方犯了错，再要扩大空间不足的分区，那样既麻烦又有风险。


**逻辑卷管理** （**LVM**）相较于传统的分区管理有许多优点，已经成为大多数（如果不能说全部的话） Linux 发行版安装时的默认选择。LVM 最大的优点应该是能方便的按照你的意愿调整（减小或增大）逻辑分区的大小。


LVM 的组成结构：


* 把一块或多块硬盘或者一个或多个分区配置成物理卷（PV）。
* 一个用一个或多个物理卷创建出的卷组（**VG**）。可以把一个卷组想象成一个单独的存储单元。
* 在一个卷组上可以创建多个逻辑卷。每个逻辑卷相当于一个传统意义上的分区 —— 优点是它的大小可以根据需求重新调整大小，正如之前提到的那样。


本文，我们将使用三块 **8 GB** 的磁盘（**/dev/sdb**、**/dev/sdc** 和 **/dev/sdd**）分别创建三个物理卷。你既可以直接在整个设备上创建 PV，也可以先分区在创建。


在这里我们选择第一种方式，如果你决定使用第二种（可以参考本系列[第四讲：创建分区和文件系统](/article-7187-1.html)）确保每个分区的类型都是 `8e`。


### 创建物理卷，卷组和逻辑卷


要在 **/dev/sdb**、**/dev/sdc** 和 **/dev/sdd**上创建物理卷，运行：



```
# pvcreate /dev/sdb /dev/sdc /dev/sdd

```

你可以列出新创建的 PV ，通过：



```
# pvs

```

并得到每个 PV 的详细信息，通过：



```
# pvdisplay /dev/sdX

```

（**X** 即 b、c 或 d）


如果没有输入 `/dev/sdX` ，那么你将得到所有 PV 的信息。


使用 /dev/sdb`和`/dev/sdc`创建卷组 ，命名为`vg00`(在需要时是可以通过添加其他设备来扩展空间的，我们等到说明这点的时候再用，所以暂时先保留`/dev/sdd`）：



```
# vgcreate vg00 /dev/sdb /dev/sdc

```

就像物理卷那样，你也可以查看卷组的信息，通过：



```
# vgdisplay vg00

```

由于 `vg00` 是由两个 **8 GB** 的磁盘组成的，所以它将会显示成一个 **16 GB** 的硬盘：


![](/data/attachment/album/201607/20/232801kjdhvx1e5vv9jzx7.png)


*LVM 卷组列表*


当谈到创建逻辑卷，空间的分配必须考虑到当下和以后的需求。根据每个逻辑卷的用途来命名是一个好的做法。


举个例子，让我们创建两个 LV，命名为 `vol_projects` （**10 GB**） 和 `vol_backups` （剩下的空间）， 在日后分别用于部署项目文件和系统备份。


参数 `-n` 用于为 LV 指定名称，而 `-L` 用于设定固定的大小，还有 `-l` （小写的 L）在 VG 的预留空间中用于指定百分比大小的空间。



```
# lvcreate -n vol_projects -L 10G vg00
# lvcreate -n vol_backups -l 100%FREE vg00

```

和之前一样，你可以查看 LV 的列表和基础信息，通过：



```
# lvs

```

或是查看详细信息，通过：



```
# lvdisplay

```

若要查看单个 **LV** 的信息，使用 **lvdisplay** 加上 **VG** 和 **LV** 作为参数，如下：



```
# lvdisplay vg00/vol_projects

```

![](/data/attachment/album/201607/20/232802q49pf2bz9tbg1f24.png)


*逻辑卷列表*


如上图，我们看到 LV 已经被创建成存储设备了（参考 LV Path 那一行）。在使用每个逻辑卷之前，需要先在上面创建文件系统。


这里我们拿 ext4 来做举例，因为对于每个 LV 的大小， ext4 既可以增大又可以减小（相对的 xfs 就只允许增大）：



```
# mkfs.ext4 /dev/vg00/vol_projects
# mkfs.ext4 /dev/vg00/vol_backups

```

我们将在下一节向大家说明，如何调整逻辑卷的大小并在需要的时候添加额外的外部存储空间。


### 调整逻辑卷大小和扩充卷组


现在设想以下场景。`vol_backups` 中的空间即将用完，而 `vol_projects` 中还有富余的空间。由于 LVM 的特性，我们可以轻易的减小后者的大小（比方说 **2.5 GB**），并将其分配给前者，与此同时调整每个文件系统的大小。


幸运的是这很简单，只需：



```
# lvreduce -L -2.5G -r /dev/vg00/vol_projects
# lvextend -l +100%FREE -r /dev/vg00/vol_backups

```

![](/data/attachment/album/201607/20/232802asehabhyw1wqsbes.png)


*减小逻辑卷和卷组*


在调整逻辑卷的时候，其中包含的减号 `(-)` 或加号 `(+)` 是十分重要的。否则 LV 将会被设置成指定的大小，而非调整指定大小。


有些时候，你可能会遭遇那种无法仅靠调整逻辑卷的大小就可以解决的问题，那时你就需要购置额外的存储设备了，你可能需要再加一块硬盘。这里我们将通过添加之前配置时预留的 PV （`/dev/sdd`），用以模拟这种情况。


想把 `/dev/sdd` 加到 `vg00`，执行：



```
# vgextend vg00 /dev/sdd

```

如果你在运行上条命令的前后执行 vgdisplay `vg00` ，你就会看出 VG 的大小增加了。



```
# vgdisplay vg00

```

![](/data/attachment/album/201607/20/232803icaaea6dzccpwsbs.png)


*查看卷组磁盘大小*


现在，你可以使用新加的空间，按照你的需求调整现有 LV 的大小，或者创建一个新的 LV。


### 在启动和需求时挂载逻辑卷


当然，如果我们不打算实际的使用逻辑卷，那么创建它们就变得毫无意义了。为了更好的识别逻辑卷，我们需要找出它的 `UUID` （用于识别一个格式化存储设备的唯一且不变的属性）。


要做到这点，可使用 blkid 加每个设备的路径来实现：



```
# blkid /dev/vg00/vol_projects
# blkid /dev/vg00/vol_backups

```

![](/data/attachment/album/201607/20/232803d9fil25unsl5ufzz.png)


*寻找逻辑卷的 UUID*


为每个 LV 创建挂载点：



```
# mkdir /home/projects
# mkdir /home/backups

```

并在 `/etc/fstab` 插入相应的条目（确保使用之前获得的UUID）：



```
UUID=b85df913-580f-461c-844f-546d8cde4646 /home/projects    ext4 defaults 0 0
UUID=e1929239-5087-44b1-9396-53e09db6eb9e /home/backups ext4    defaults 0 0

```

保存并挂载 LV：



```
# mount -a
# mount | grep home

```

![](/data/attachment/album/201607/20/232804te0tozs3t451t0an.png)


*挂载逻辑卷*


在涉及到 LV 的实际使用时，你还需要按照曾在本系列[第八讲：管理用户和用户组](/article-7418-1.html)中讲解的那样，为其设置合适的 `ugo+rwx`。


### 总结


本文介绍了 [逻辑卷管理](/article-3965-1.html)，一个用于管理可扩展存储设备的多功能工具。与 RAID（曾在本系列讲解过的 [第六讲：组装分区为RAID设备——创建和管理系统备份](/article-7229-1.html)）结合使用，你将同时体验到（LVM 带来的）可扩展性和（RAID 提供的）冗余。


在这类的部署中，你通常会在 `RAID` 上发现 `LVM`，这就是说，要先配置好 RAID 然后它在上面配置 LVM。


如果你对本问有任何的疑问和建议，可以直接在下方的评论区告诉我们。




---


via: <http://www.tecmint.com/manage-and-create-lvm-parition-using-vgcreate-lvcreate-and-lvextend/>


作者：[Gabriel Cánepa](http://www.tecmint.com/author/gacanepa/) 译者：[martin2011qi](https://github.com/martin2011qi) 校对：[wxy](https://github.com/wxy)


本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译，[Linux中国](https://linux.cn/) 荣誉推出

