Gentoo Logo

Gentoo LVM2安装指南

内容:

1.  简介

本指南使用两个IDE硬盘做范例。这意味着你需要根据自己的实际情况,对磁盘、分区名以及分区大小等信息做些更改。

警告: 本文并不想成为一篇LVM2学习指南。它只是一个小笔记,作为Gentoo安装手册(第一部分)的补充。请务必在你动手安装之前阅读Gentoo安装手册。

注意: 完整的LVM HOWTO在这里:http://tldp.org/HOWTO/LVM-HOWTO

系统需求

如果你是全新安装gentoo系统,你需要有一张带LVM2支持的启动光盘,如Gentoo安装光盘。你可以在我们镜像站点/releases/x86/current/installcd目录下找到x86架构的Gentoo安装光盘。一般情况下,其他架构的安装光盘也可以在此找到。

如果你想在一个正在运行的、有着空余硬盘空间的系统上安装LVM2,你需要启用LVM2模块(dm-mod)。这个模块已被包含在gentoo-sources之中。你在稍后的文字中会读到编译内核以使LVM2正常工作的相关内容。

并非所有Gentoo提供的2.4内核都支持LVM2!

分区

在我们的范例系统中有两个IDE硬盘,它们的分区是这样的:

  • /dev/hda1 -- /boot
  • /dev/hda2 -- (交换分区)
  • /dev/hda3 -- / (根分区)
  • /dev/hda4 -- 将被用作LVM2
  • /dev/hdb1 -- 将被用作LVM2

重要: 请特别注意分区的名字,毕竟a和b常常被看错,那些数字也很容易混淆。一个小小的失误将导致一整个分区被错误地覆盖掉。手下留神!

OK, 开始吧……

2.  安装

先照着安装手册做,直到第4章 ── 准备磁盘

使用安装手册上提及的fdisk,不过将分区划分成上面范例中的那样。它只是个范例,请调整它以符合自己的需求。

创建建一个小小的/boot分区(hda1)。在这个例子中,/boot不会被LVM2管理。这个分区里存放着内核和引导程序。相信一个64M的分区足够存放不少内核的了。

创建一个交换分区 (hda2)。

创建根(root)分区(hda3)。如果你有兴趣尝试把根分区到LVM下管理(虽然我们不建议这样做),你可以参考本文末尾列出的资源。那里有一个mini-howto会告诉该如何下手。如果将/opt /usr /home /var/tmp都放在LVM2卷组(vg)中的话,根分区也不用分得太大。在我们的例子中,1GB就足够了。

注意: 我们不建议你将下列目录放在LVM2分区上:/etc/lib/mnt/proc/sbin/dev以及/root。这样一来,如果有什么可怕的错误(系统严重受损,但root还勉强可用)发生了,你还可以登入系统。

假如/boot,交换分区和根分区还没能用完整个硬盘,可以创建第四个分区,并把它的类型设为8e(Linux LVM)。如果你还有其他供LVM使用的硬盘,请在每个硬盘上都创建一个分区,并把分区类型设为8e。

注意: 考虑到现在的硬盘都非常大,你也许想将你的硬盘分成几个小分区,而不是一个大的,然后全部添加到LVM2卷组。LVM2让分区扩充容量变得很简单,所以你可以留下一些未配置的分区,天知道你以后会不会在LVM2以外的地方用到它们。简而言之,在还没有确定拿分区做什么用之前,别先把它们用光了。举例来说吧,我们的一位投稿者就将他的160 Gb硬盘分成了8个20 Gb的分区来用。

按照安装手册的步骤,建立分区/dev/hda1/dev/hda3的文件系统,并建立且激活交换分区/dev/hda2

加载LVM2模块dm-mod

代码 2.1: 加载LVM2模块

# modprobe dm-mod

在扫描并激活LVM之前,你也许需要先编辑/etc/lvm/lvm.conf文件将一些设备排除在外。因为在默认情况下,LVM2会扫描所有的设备,包括会产生错误信息的光驱。在下面的例子中,我们替换掉了允许扫描所有设备的那行,改为除两个IDE硬盘外,不扫描其他任何设备。

代码 2.2: 激活LVM

(避免扫描除了硬盘之外的所有其他设备)
# nano -w /etc/lvm/lvm.conf
(查找下面的行)
    filter = [ "a/.*/" ]
(用下面内容来替换,保证只扫描
/dev/hda和/dev/hdb)
    filter = [ "a|/dev/hd[ab]|", "r/.*/" ]
(保存文件并退出nano)
# vgscan
  Reading all physical volumes.  This may take a while...
  No volume groups found
(启用之前创建的卷组)
# vgchange -a y

准备磁盘分区。

代码 2.3: 准备磁盘分区

# pvcreate /dev/hda4 /dev/hdb1
  No physical volume label read from /dev/hda4
  Physical volume "/dev/hda4" successfully created
  No physical volume label read from /dev/hdb1
  Physical volume "/dev/hdb1" successfully created

创建一个卷组。卷组是一些物理单元的逻辑集合。

范例中/dev/hda1/dev/hda2/dev/hda3分别是/boot,交换分区和根分区。所以我们需要合并的是/dev/hda4/dev/hdb1。尽管这用一个命令就可以完成,作为示范,我们还是先创建一个卷组,然后再扩充它。

代码 2.4: 创建和扩充卷组

(创建一个名为vg的卷组)
# vgcreate vg /dev/hda4
  /etc/lvm/backup: fsync failed: Invalid argument (忽略此警告)
  Volume group "vg" successfully created
(扩充已有的卷组)
# vgextend vg /dev/hdb1
  /etc/lvm/backup: fsync failed: Invalid argument (再次忽略这个警告,以后也请继续忽略)
  Volume group "vg" successfully extended

创建逻辑卷。逻辑卷类似于在非LVM2环境中用fdisk创建的磁盘分区。在这个例子中,我们创建了如下分区:

目录 大小
/usr 10 GB
/home 5 GB
/opt 5 GB
/var 10 GB
/tmp 2 GB

由于我们正要使用的是LVM2,所以不必太在意分区的大小,因为扩充容量将会很容易。

注意: 正如Terje Kvernes所评价的,增大分区要比缩小它容易得多。我想你可能会想要从小分区开始,然后在需要的时候才扩充它们。

代码 2.5: 创建和扩充逻辑卷

# lvcreate -L10G -nusr  vg
  Logical volume "usr" created (以后的类似信息就不显示了)
# lvcreate -L5G  -nhome vg
# lvcreate -L5G  -nopt  vg
# lvcreate -L10G -nvar  vg
# lvcreate -L2G  -ntmp  vg
(作为范例,让我们增加一个额外的5GB逻辑卷)
# lvextend -L+5G /dev/vg/home

在逻辑卷中创建文件系统的步骤和在普通分区中相同。我们以使用ext3为例,当然你选用其他文件系统也行:

代码 2.6: 创建文件系统

# mke2fs -j /dev/vg/usr
# mke2fs -j /dev/vg/home
# mke2fs -j /dev/vg/opt
# mke2fs -j /dev/vg/var
# mke2fs -j /dev/vg/tmp

按照安装手册中挂载分区的方法挂载你创建的LVM2逻辑卷,但请将/dev/hdxx替换为/dev/vg/逻辑卷名

代码 2.7: 挂载逻辑卷

(请依照安装手册中所述,先挂载根分区)
# mkdir /mnt/gentoo/usr
# mount /dev/vg/usr /mnt/gentoo/usr
# mkdir /mnt/gentoo/home
# mount /dev/vg/home /mnt/gentoo/home
# mkdir /mnt/gentoo/opt
# mount /dev/vg/opt /mnt/gentoo/opt
# mkdir /mnt/gentoo/var
# mount /dev/vg/var /mnt/gentoo/var
# mkdir /mnt/gentoo/tmp
# mount /dev/vg/tmp /mnt/gentoo/tmp

注意: 接下来的步骤跟安装手册中提到的差不多,在这里我们只列出一些有差异的地方。

请在配置内核时确认已启用了LVM2支持(并非所有的2.4内核都支持)。选择下列LVM2模块:

代码 2.8: 选择2.4.x内核中的LVM2模块

Multi-device support (RAID and LVM)  --->
  [*] Multiple devices driver support (RAID and LVM)
  < >  RAID support
(注意,我们故意不选LVM,因为这是为LVM1准备的)
  < >  Logical volume manager (LVM) support
  <M>  Device-mapper support
  < >   Mirror (RAID-1) support

代码 2.9: 选择2.6.x内核中的LVM2模块

Device Drivers  --->
 Multi-device support (RAID and LVM)  --->
   [*] Multiple devices driver support (RAID and LVM)
   < >   RAID support
   <M>   Device mapper support

编译完成的模块名为dm-mod.ko

在编译完内核并安装好模块之后,将下面这行加入你的/etc/modules.autoload.d/kernel-{KV}中,其中{KV}表示你的内核版本(2.4或2.6),以便在开机时自动加载LVM2:

代码 2.10: 在/etc/modules.autoload.d/kernel-2.6中添加LVM2模块

# nano -w /etc/modules.autoload.d/kernel-2.6
(添加下面这行)
dm-mod

现在,安装lvm2包。

重要: 请确定你已将/usr/src/linux链接到了你现在使用的内核源代码,因为lvm2 ebuild所依赖的device-mapper ebuild会用到/usr/src/linux/include/linux下的源文件。

代码 2.11: emerging lvm2 软件包

# emerge lvm2

按照前面的方法编辑文件/etc/lvm/lvm.conf。你先前修改过的那个配置文件是宿主系统中的文件,重启之后就不存在了。你得在新安装的Gentoo系统中再重新编辑一次。

在编辑/etc/fstab文件时,照着安装手册上说的,加入你的LVM2逻辑卷。重申一下,以下内容是我们范例中所必需的:

代码 2.12: /etc/fstab文件的部分内容

/dev/hda1     /boot   ext3    noauto,noatime 1 2
/dev/hda2     none    swap    sw             0 0
/dev/hda3     /       ext3    noatime        0 1
# Logical volumes
/dev/vg/usr   /usr    ext3    noatime        0 2
/dev/vg/home  /home   ext3    noatime        0 2
/dev/vg/opt   /opt    ext3    noatime        0 2
/dev/vg/var   /var    ext3    noatime        0 2
/dev/vg/tmp   /tmp    ext3    noatime        0 2

当你来到安装手册中最后的安装步骤时,最好不要忘了卸载你所有的LVM2逻辑卷,并在重启前执行以下命令:

代码 2.13: 关闭LVM2

# vgchange -a n

重新开机,所有的分区都将被正确地显示与挂载。

3.  重启后如何继续

如果你在某处中断了Gentoo的安装又想继续的话,你需要先创建分区节点:

代码 3.1: 重新激活分区

# vgscan --mknodes

在缺少最新工具的安装光盘中,很可能需要用如下方法来重新启用分区:

代码 3.2: 重新激活分区

(先将所有分区复位)
# vgchange -a n
(导出所有分区)
# vgexport -a
(导入所有分区)
# vgimport -a
(重新激活所有分区)
# vgchange -a y

4.  相关资源

5.  特别感谢

非常感谢Thilo Bangert以及Terje Kvernes为本文提供的帮助和建议。



打印

更新于2009年 2月 10日

本翻译的原始版本已经不再被维护

总结: 该指南讲述该如何在你的Gentoo系统中使用逻辑卷管理器第二版(LVM2)

Avi Schwartz
作者

Rajiv Manglani
贡献者

Xavier Neys
编辑

楚石
翻译

Donate to support our development efforts.

Copyright 2001-2014 Gentoo Foundation, Inc. Questions, Comments? Contact us.