在Linux中使用LVM构建灵活的磁盘存储（第一部分）
逻辑卷管理器（LVM）让磁盘空间管理更为便捷。如果一个文件系统需要更多的空间，可以在它的卷组中将空闲空间添加到其逻辑卷中，而文件系统可以根据你的意愿调整大小。如果某个磁盘启动失败，用于替换的磁盘可以使用卷组注册成一个物理卷，而逻辑卷扩展可以将数据迁移到新磁盘而不会丢失数据。 在Linux中创建LVM存储 在如今，每台服务器空间都会因为我们的需求增长而不断扩展。逻辑卷可以用于RAID，SAN。单个物理卷将会被加入组以创建卷组，在卷组中，我们需要切割空间以创建逻辑卷。在使用逻辑卷时，我们可以使用某些命令来跨磁盘、跨逻辑
LVM 磁盘 文件系统
0.0.0.0
@我的印象笔记
微博评论
2014-10-07T20:33:00.000
115.230.106.199
LVM用着确实很方便，但是在高要求环境下用RAID靠谱一点，否则磁盘挂了你找谁？
ZMOM1031
2014-10-07T20:34:25.000
123.120.70.34
RAID5或RAID0之上，你再用 LVM。<br />
<br />
不过，我真的不喜欢 LVM，感觉麻烦，或者是因为场景不太需要。
linux
2014-10-07T22:45:18.000
111.9.35.56
mark
微博评论
2014-10-07T23:03:00.000
115.230.106.199
我个人不讨厌LVM。我只在LVM上用过RAID，没有在RAID上用过LVM，另外我只有模拟场景，从没在真实场景下用过（还是学生）我觉得LVM不错的地方就是可以把多块磁盘的空间合并到一起创建一个超大的空间，方便文件的存放管理
ZMOM1031
2014-10-08T00:31:02.000
123.125.71.36
受教
微博评论
2014-10-08T01:03:01.000
220.181.51.51
有空了我试试性能
微博评论
2014-10-08T07:33:00.000
106.120.101.58
在 LVM 上使用 raid 就只能使用软 RAID 了，其实也还可以。<br />
LVM 能将多个零散的存储拼合到一起，是不错的。只是一般设计服务器的时候，预先对用量会有估计，所以有时候用不到这种；当然，有时候存在没办法预先估计，而增长速度也不确定的情况下，不能用多台机器分担及使用 NAS 之类时，LVM 还是相当有用的。
linux
2014-10-08T09:19:30.000
113.139.97.95
lvm也没想象中的那么容易坏吧，lvm和raid各有优势吧，从理论上来说raid更加安全，lvm更容易扩展
ykyx00
2014-10-10T09:12:31.000
106.120.101.58
不是 LVM 坏，是硬盘的硬件坏。。。
linux
2014-10-10T11:55:37.000
180.175.27.123
没规划经验，刚好拿来学一下！
hyplove
2014-10-12T22:58:14.000
逻辑卷管理器（LVM）让磁盘空间管理更为便捷。如果一个文件系统需要更多的空间，可以在它的卷组中将空闲空间添加到其逻辑卷中，而文件系统可以根据你的意愿调整大小。如果某个磁盘启动失败，用于替换的磁盘可以使用卷组注册成一个物理卷，而逻辑卷扩展可以将数据迁移到新磁盘而不会丢失数据。 在Linux中创建LVM存储 在如今，每台服务器空间都会因为我们的需求增长而不断扩展。逻辑卷可以用于RAID，SAN。单个物理卷将会被加入组以创建卷组，在卷组中，我们需要切割空间以创建逻辑卷。在使用逻辑卷时，我们可以使用某些命令来跨磁盘、跨逻辑
![](/data/attachment/album/201410/07/202104joe8toi5lw3xo2m8.png)


**逻辑卷管理器（LVM）**让磁盘空间管理更为便捷。如果一个文件系统需要更多的空间，可以在它的卷组中将空闲空间添加到其逻辑卷中，而文件系统可以根据你的意愿调整大小。如果某个磁盘启动失败，用于替换的磁盘可以使用卷组注册成一个物理卷，而逻辑卷扩展可以将数据迁移到新磁盘而不会丢失数据。


![](/data/attachment/album/201410/07/202108rxxtot5dmzcaho1d.png)*在Linux中创建LVM存储*
在如今，每台服务器空间都会因为我们的需求增长而不断扩展。逻辑卷可以用于RAID，SAN。单个物理卷将会被加入组以创建卷组，在卷组中，我们需要切割空间以创建逻辑卷。在使用逻辑卷时，我们可以使用某些命令来跨磁盘、跨逻辑卷扩展，或者减少逻辑卷大小，而不用重新格式化和重新对当前磁盘分区。卷可以跨磁盘抽取数据，这会增加I/O数据量。


### LVM特性


* 可以在任何时候灵活地扩展空间。
* 可以安装和处理任何文件系统。
* 可以通过迁移来恢复错误磁盘。
* 可以使用快照功能恢复文件系统到先前的阶段。等等……


#### 我的服务器设置 - 需求


* 操作系统 —— 安装有LVM的CentOS 6.5
* 服务器IP地址 —— 192.168.0.200


### 在Linux中创建LVM磁盘存储


**1.** 我们已经在虚拟磁盘（VDA）中使用了带LVM的CentOS 6.5操作系统。在此，我们可以使用下列命令查看到物理卷（PV），卷组（VG），逻辑卷（LV）。



```
# pvs 
# vgs
# lvs

```

![Check Physical Volumes](/data/attachment/album/201410/07/202111yrk7ws9000j5f7f5.jpg)*检查物理卷*
下面是上面截图中各个参数的说明。


* 物理磁盘大小（PV Size）
* 用作虚拟磁盘vda的磁盘
* 卷组大小（VG Size）
* 卷组名称（vg\_tecmint）
* 逻辑卷名称（LogVol00，LogVol01）
* LogVol00分配给swap，大小1GB
* LogVol01分配给/，大小16.5GB


从上面看，我们可以知道VDA磁盘中没有足够的空闲空间。


**2.** 为了创建一个**新卷组**，我们需要在这台服务器上添加额外的**3个硬盘**。3个驱动器不是强制使用的，只要一个就足够用来创建新的**VG**，并在其中创建**LV**了。我在这里添加了更多的磁盘，目的只是用于演示和更多命令功能的说明。


下面是我已经额外添加的磁盘。



```
sda, sdb, sdc

```



---



```
# fdisk -l

```

![Verify Added Disks](/data/attachment/album/201410/07/202113t4p5pb4bguy0ynr5.jpg)*验证添加的磁盘*
* 用于操作系统（CentOS 6.5）的默认磁盘。
* 默认磁盘上定义的分区（vda1 = swap），（vda2 = /）。
* 额外添加的磁盘Disk1，Disk2，Disk3。


各个磁盘大小都是20GB，默认的卷组的PE大小为4MB，我们在该服务器上配置的卷组使用默认PE。


![Volume Group Display](/data/attachment/album/201410/07/202115rk31sk1e7eb1igk1.jpg)*卷组显示*
* **VG Name** – 卷组名称。
* **Format** – LVM架构使用LVM2。
* **VG Access** – 卷组为读写模式，备好待用。
* **VG Status** – 卷组可调整大小，如果我们需要添加更多空间，我们可以扩展更多。
* **Cur LV** – 当前卷组中有2个逻辑卷。
* **CurPV and Act PV** – 当前使用的物理磁盘是1（vda），已被激活，因此我们可以使用该卷组。
* **PE Size** – 磁盘的物理扩展大小，可以定义使用PE，或者GB，LVM的默认PE大小是4MB。例如，如果我们需要创建5GB大小的逻辑卷，我们可以使用总计1280 PE，你们懂我的意思么？


这里解释一下 -> 1024MB = 1GB，这样的话，1024MB x 5 = 5120PE = 5GB，然后5120/4 = 1280，4是默认的PE大小。


* Total PE – 该卷组具有的PE数量。
* Alloc PE – 总的PE使用量，已经使用的全部PE，4482 x 4PE = 17928。
* Free PE – 这里因为已经使用，所以没有空闲PE了。


**3.** 只使用了vda，当前CentOS在使用lvm的vda物理磁盘中安装了**/boot，/，swap,**，该磁盘中没有空间剩余。



```
# df -TH

```

![Check the Disk Space](/data/attachment/album/201410/07/202116b3zbtjvpbtzqpxa2.jpg)*检查磁盘空间*
上面的图片中显示了用于根的挂载点已使用了**18GB**，因此没有空闲空间可用了。


**4.** 那么，让我们创建新的物理卷（**pv**），以及名为**tecmint*add*vg**的卷组（**vg**），并在其中创建逻辑卷（**lv**）。这里，我们可以创建4个逻辑卷，分别名为 **tecmint\_documents**，**tecmint\_manager**以及**tecmint*add*vg**。


我们可以扩展当前使用的卷组以获得更多空间。但在这里，我们将要做的是，创建新的卷组，然后在里面肆意妄为吧。过会儿，我们可以看到怎样来扩展使用中的卷组的文件系统。


在使用新磁盘前，我们需要使用fdisk来对磁盘分区。



```
# fdisk -cu /dev/sda

```

* **c** – 关闭DOS兼容模式，推荐使用该选项。
* **u** – 当列出分区表时，会以扇区而不是柱面显示。


![Create New Physical Partitions](/data/attachment/album/201410/07/202118pzeasf9zixidfxfz.jpg)*创建新的物理分区*
接下来，请遵循以下步骤来创建新分区。


* 选择**n**来创建新分区。
* 选择**p**来创建主分区。
* 选择我们需要创建的分区号。
* 按**Enter**两次来使用整个磁盘空间。
* 我们需要修改新创建的分区类型，输入**t**。
* 选择需要修改的分区号，选择我们创建的分区号**1**。
* 这里，我们需要修改类型。我们需要创建LVM，因此我们使用LVM的类型代码8e。如果不知道类型代码，按**L**来列出所有类型代码。
* 打印我们创建的分区以确认。
* 这里我们可以看到Linux LVM的ID 8e。
* 写入修改并退出fdisk。


重复以上步骤，为另外2个磁盘sdb和sdc创建新分区。然后重启机器，使用fdisk命令来验证分区表。



```
# fdisk -l

```

![Verify Partition Table](/data/attachment/album/201410/07/202121uvk8wuqak19k2zd2.jpg)*验证分区表*
### 创建物理卷


**5.** 现在，该使用3个磁盘来创建物理卷了。这里，我已经使用pvs命令将物理磁盘列了出来，现在只有一个默认的**pvs**被列出来了。



```
# pvs

```

然后，使用命令创建新的物理磁盘。



```
# pvcreate /dev/sda1 /dev/sdb1 /dev/sdc1

```

再次列出磁盘来查看新创建物理磁盘。



```
# pvs

```

![Create Physical Volumes](/data/attachment/album/201410/07/202123xzl82z2gqbddnono.jpg)*创建物理卷*
### 创建卷组


**6.** 使用可用的空闲PV来创建名为**tecmint*add*vg**的卷组，PE大小为32。显示当前卷组，我们可以看到只有带有1个PV的一个卷组在使用。



```
# vgs

```

这将使用上面创建的3个物理卷创建名为**tecmint*add*vg**的卷组，PE大小为32MB。



```
# vgcreate -s 32M tecmint_add_vg /dev/sda1 /dev/sdb1 /dev/sdc1

```

接下来，再次运行vgs命令来验证卷组。



```
# vgs

```

![Create Volume Groups](/data/attachment/album/201410/07/202124d1zsktmttbwmz882.jpg)*创建卷组*![Verify Volume Groups](/data/attachment/album/201410/07/202126jx3znkidr3r0ii0l.jpg)*验证卷组*
理解vgs命令输出：


* 卷组名。
* 本卷组中使用的物理卷。
* 显示本卷组中的可用空闲空间。
* 卷组总大小。
* 本卷组中的逻辑卷，这里我们还没创建，所以是0。
* SN = 卷组包含的快照数量。（后面，我们会创建一个快照。）
* 卷组状态，如可写，可读，可调整大小，已导出，部分的和集群的。这里是wz——意为w = 可写，z = 可调整大小。
* 卷组中使用的物理卷（PV）数量。


**7.** 使用命令来显示更多卷组信息。



```
# vgs -v

```

![Check Volume Group Information](/data/attachment/album/201410/07/202127l4zegi9ikeqnnkeh.jpg)*检查卷组信息*
**8.** 要获取更多关于新创建的卷组信息，运行以下命令。



```
# vgdisplay tecmint_add_vg

```

![List New Volume Groups](/data/attachment/album/201410/07/202129msyvs2zzy1fvdv1e.jpg)*列出新卷组*
* 卷组名称
* 使用的LVM架构。
* 可读写，备好待用。
* 该卷组可以调整大小。
* 使用和激活的物理磁盘数量。
* 卷组总大小。
* 这里单个PE大小为32。
* 该卷组中可用的PE总数。
* 当前还没有在卷组中创建任何LV，因此它是空闲的。
* 该卷组的UUID。


### 创建逻辑卷


**9.** 现在，创建3个名为**tecmint\_documents**,**tecmint\_manager**和**tecmint\_public**的逻辑卷。这里，我们可以看到如何分别以PE为单位和GB为单位来创建逻辑卷。首先，使用以下命令来列出当前逻辑卷。



```
# lvs

```

![List Current Volume Groups](/data/attachment/album/201410/07/202130wb7b6qe6aqpr2eqr.jpg)*列出当前卷组*
**10.** 这些逻辑卷处于**vg\_tecmint**卷组中使用**pvs**命令来列出并查看有多少空闲空间可以创建逻辑卷。



```
# pvs

```

![Check Free Space](/data/attachment/album/201410/07/202132tz7ro6oyton99daq.jpg)*检查空闲空间*
**11.** 卷组大小为**54GB**，而且未被使用，所以我们可以在该组内创建LV。让我们将卷组平均划分大小来创建3个逻辑卷，就是说**54GB**/3 = **18GB**，创建出来的单个逻辑卷应该会是18GB。


#### 方法1： 使用PE创建逻辑卷


首先，让我们使用物理扩展（PE）为单位来创建逻辑卷。我们需要知道分配到该卷组的默认PE大小，以及总的可用PE大小来创建新的逻辑卷，运行下面的命令来获取使用中的卷组信息。



```
# vgdisplay tecmint_add_vg

```

![Create New Logical Volume](/data/attachment/album/201410/07/202134h3flh6l6hehhdlas.jpg)*创建新逻辑卷*
* 默认分配给该卷组的PE为32MB，这里单个的PE大小为32MB。
* 总可用PE是1725。


只要用bc命令做一点小小的计算来看看就知道了。



```
# bc

```



---



```
1725PE/3 = 575 PE. 
575 PE x 32MB = 18400 --> 18GB

```

![Calculate Disk Space](/data/attachment/album/201410/07/202135gkpo115obojbdo1q.jpg)*计算磁盘空间*
按**CRTL+D**退出**bc**。现在让我们使用575个PE来创建3个逻辑卷。



```
# lvcreate -l (Extend size) -n (name_of_logical_volume) (volume_group)
# lvcreate -l 575 -n tecmint_documents tecmint_add_vg
# lvcreate -l 575 -n tecmint_manager tecmint_add_vg
# lvcreate -l 575 -n tecmint_public tecmint_add_vg

```

* -**l** – 使用扩展大小创建
* -**n** – 给逻辑卷命名


使用lvs命令来列出创建的逻辑卷。



```
# lvs

```

![List Created Logical Volumes](/data/attachment/album/201410/07/202137dffvxf6bwgllllp6.jpg)*列出创建的逻辑卷*
#### 方法2： 使用GB大小创建逻辑卷


在使用GB大小创建逻辑卷时，我们不能获得精确的大小。因此，最好的办法是用扩展。



```
# lvcreate -L 18G -n tecmint_documents tecmint_add_vg
# lvcreate -L 18G -n tecmint_manager tecmint_add_vg
# lvcreate -L 18G -n tecmint_public tecmint_add_vg
# lvcreate -L 17.8G -n tecmint_public tecmint_add_vg

```

使用lvs命令来列出创建的逻辑卷。



```
# lvs

```

![Verify Created Logical Volumes](/data/attachment/album/201410/07/202139y9he9hmmutht77h7.jpg)*验证创建的逻辑卷*
这里，我们可以看到，当创建第三个LV的时候，我们不能收集到18GB空间。这是因为尺寸有小小的改变，但在使用或者尺寸来创建LV时，这个问题会被忽略。


### 创建文件系统


**12.** 要使用逻辑卷，我们需要格式化。这里我使用ext4文件系统来创建卷，并打算挂载到**/mnt**。



```
# mkfs.ext4 /dev/tecmint_add_vg/tecmint_documents
# mkfs.ext4 /dev/tecmint_add_vg/tecmint_public
# mkfs.ext4 /dev/tecmint_add_vg/tecmint_manager

```

![Create Ext4 File System](/data/attachment/album/201410/07/202141cssiiiw6qq8w33wp.jpg)*创建Ext4文件系统*
**13.** 让我们在**/mnt**下创建目录，并将已创建好文件系统的逻辑卷挂载上去。



```
# mount /dev/tecmint_add_vg/tecmint_documents /mnt/tecmint_documents/
# mount /dev/tecmint_add_vg/tecmint_public /mnt/tecmint_public/
# mount /dev/tecmint_add_vg/tecmint_manager /mnt/tecmint_manager/

```

使用下面的命令来列出并确认挂载点。



```
# df -h

```

![Mount Logical Volumes](/data/attachment/album/201410/07/202142mmbochcayddl82dl.jpg)*挂载逻辑卷*
#### 永久挂载


现在，这些逻辑卷是临时挂载上去的，要永久挂载，我们需要添加条目到fstab中。要达到这个目的，让我们使用下面的命令来获取挂载条目



```
# cat /etc/mtab

```

在输入来自mtab中的挂载条目内容时，我们需要在fstab中做些小小的改变，修改rw为默认。



```
# vim /etc/fstab

```

我们的fstab条目应该和下面的类似，使用wq！保存并退出fstab。



```
/dev/mapper/tecmint_add_vg-tecmint_documents    /mnt/tecmint_documents  ext4    defaults 0 0
/dev/mapper/tecmint_add_vg-tecmint_public       /mnt/tecmint_public     ext4    defaults 0 0
/dev/mapper/tecmint_add_vg-tecmint_manager      /mnt/tecmint_manager    ext4    defaults 0 0

```

![Get mtab Mount Entry](/data/attachment/album/201410/07/202144ks9vuw2mxds1ywy8.jpg)获取mtab挂载条目\*![Open fstab File](/data/attachment/album/201410/07/202146s2d43tv82qg2t2fk.jpg)*打开fstab文件*![Add Auto Mount Entry](/data/attachment/album/201410/07/202148kvzkle4dvvwip3l6.jpg)*添加自动挂载条目*
重启前，执行mount -a命令来检查fstab条目。



```
# mount -av

```

![Verify fstab Entry](/data/attachment/album/201410/07/202149kgum0mzopgpinnlm.jpg)*验证fstab条目*
这里，我们已经了解了怎样来使用逻辑卷构建灵活的存储，从使用物理磁盘到物理卷，物理卷到卷组，卷组再到逻辑卷。


在我即将奉献的文章中，我将介绍如何扩展卷组、逻辑卷，减少逻辑卷，拍快照以及从快照中恢复。




---


 


via: <http://www.tecmint.com/create-lvm-storage-in-linux/>


作者：[Babin Lonston](http://www.tecmint.com/author/babinlonston/) 译者：[GOLinux](https://github.com/GOLinux) 校对：[wxy](https://github.com/wxy)


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

