lfcs:管理 lvm 和创建 lvm 分区
在安装 linux 系统的时候要做的最重要的决定之一便是给系统文件、home 目录等分配空间。在这个地方犯了错,再要扩大空间不足的分区,那样既麻烦又有风险。
逻辑卷管理 (lvm)相较于传统的分区管理有许多优点,已经成为大多数(如果不能说全部的话) linux 发行版安装时的默认选择。lvm 最大的优点应该是能方便的按照你的意愿调整(减小或增大)逻辑分区的大小。
lvm 的组成结构:
把一块或多块硬盘或者一个或多个分区配置成物理卷(pv)。
一个用一个或多个物理卷创建出的卷组(vg)。可以把一个卷组想象成一个单独的存储单元。
在一个卷组上可以创建多个逻辑卷。每个逻辑卷相当于一个传统意义上的分区 —— 优点是它的大小可以根据需求重新调整大小,正如之前提到的那样。
本文,我们将使用三块 8 gb 的磁盘(/dev/sdb、/dev/sdc 和 /dev/sdd)分别创建三个物理卷。你既可以直接在整个设备上创建 pv,也可以先分区在创建。
<a target="_blank"></a>
要在 /dev/sdb、/dev/sdc 和 /dev/sdd上创建物理卷,运行:
<code># pvcreate /dev/sdb /dev/sdc /dev/sdd</code>
你可以列出新创建的 pv ,通过:
<code># pvs</code>
并得到每个 pv 的详细信息,通过:
<code># pvdisplay /dev/sdx</code>
(x 即 b、c 或 d)
如果没有输入 <code>/dev/sdx</code> ,那么你将得到所有 pv 的信息。
使用 /dev/sdb<code>和</code>/dev/sdc<code>创建卷组 ,命名为</code>vg00<code>(在需要时是可以通过添加其他设备来扩展空间的,我们等到说明这点的时候再用,所以暂时先保留</code>/dev/sdd`):
<code># vgcreate vg00 /dev/sdb /dev/sdc</code>
就像物理卷那样,你也可以查看卷组的信息,通过:
<code># vgdisplay vg00</code>
由于 <code>vg00</code> 是由两个 8 gb 的磁盘组成的,所以它将会显示成一个 16 gb 的硬盘:

lvm 卷组列表
当谈到创建逻辑卷,空间的分配必须考虑到当下和以后的需求。根据每个逻辑卷的用途来命名是一个好的做法。
举个例子,让我们创建两个 lv,命名为 <code>vol_projects</code> (10 gb) 和 <code>vol_backups</code> (剩下的空间), 在日后分别用于部署项目文件和系统备份。
参数 <code>-n</code> 用于为 lv 指定名称,而 <code>-l</code> 用于设定固定的大小,还有 <code>-l</code> (小写的 l)在 vg 的预留空间中用于指定百分比大小的空间。
<code># lvcreate -n vol_projects -l 10g vg00</code>
<code># lvcreate -n vol_backups -l 100%free vg00</code>
和之前一样,你可以查看 lv 的列表和基础信息,通过:
<code># lvs</code>
或是查看详细信息,通过:
<code># lvdisplay</code>
若要查看单个 lv 的信息,使用 lvdisplay 加上 vg 和 lv 作为参数,如下:
<code># lvdisplay vg00/vol_projects</code>
逻辑卷列表
如上图,我们看到 lv 已经被创建成存储设备了(参考 lv path 那一行)。在使用每个逻辑卷之前,需要先在上面创建文件系统。
这里我们拿 ext4 来做举例,因为对于每个 lv 的大小, ext4 既可以增大又可以减小(相对的 xfs 就只允许增大):
<code># mkfs.ext4 /dev/vg00/vol_projects</code>
<code># mkfs.ext4 /dev/vg00/vol_backups</code>
我们将在下一节向大家说明,如何调整逻辑卷的大小并在需要的时候添加额外的外部存储空间。
现在设想以下场景。<code>vol_backups</code> 中的空间即将用完,而 <code>vol_projects</code> 中还有富余的空间。由于 lvm 的特性,我们可以轻易的减小后者的大小(比方说 2.5 gb),并将其分配给前者,与此同时调整每个文件系统的大小。
幸运的是这很简单,只需:
<code># lvreduce -l -2.5g -r /dev/vg00/vol_projects</code>
<code># lvextend -l +100%free -r /dev/vg00/vol_backups</code>
减小逻辑卷和卷组
在调整逻辑卷的时候,其中包含的减号 <code>(-)</code> 或加号 <code>(+)</code> 是十分重要的。否则 lv 将会被设置成指定的大小,而非调整指定大小。
有些时候,你可能会遭遇那种无法仅靠调整逻辑卷的大小就可以解决的问题,那时你就需要购置额外的存储设备了,你可能需要再加一块硬盘。这里我们将通过添加之前配置时预留的 pv (<code>/dev/sdd</code>),用以模拟这种情况。
想把 <code>/dev/sdd</code> 加到 <code>vg00</code>,执行:
<code># vgextend vg00 /dev/sdd</code>
如果你在运行上条命令的前后执行 vgdisplay <code>vg00</code> ,你就会看出 vg 的大小增加了。
查看卷组磁盘大小
现在,你可以使用新加的空间,按照你的需求调整现有 lv 的大小,或者创建一个新的 lv。
当然,如果我们不打算实际的使用逻辑卷,那么创建它们就变得毫无意义了。为了更好的识别逻辑卷,我们需要找出它的 <code>uuid</code> (用于识别一个格式化存储设备的唯一且不变的属性)。
要做到这点,可使用 blkid 加每个设备的路径来实现:
<code># blkid /dev/vg00/vol_projects</code>
<code># blkid /dev/vg00/vol_backups</code>
寻找逻辑卷的 uuid
为每个 lv 创建挂载点:
<code># mkdir /home/projects</code>
<code># mkdir /home/backups</code>
并在 <code>/etc/fstab</code> 插入相应的条目(确保使用之前获得的uuid):
<code>uuid=b85df913-580f-461c-844f-546d8cde4646 /home/projects ext4 defaults 0 0</code>
<code>uuid=e1929239-5087-44b1-9396-53e09db6eb9e /home/backups ext4 defaults 0 0</code>
保存并挂载 lv:
<code># mount -a</code>
<code># mount | grep home</code>
挂载逻辑卷
在这类的部署中,你通常会在 <code>raid</code> 上发现 <code>lvm</code>,这就是说,要先配置好 raid 然后它在上面配置 lvm。
原文发布时间为:2016-07-21
本文来自云栖社区合作伙伴“linux中国”