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!

警告: 在2005.0安装光盘中的LVM2被错误地动态链接到一个函数库(libgpm),而这个函数库位于/usr。这表示,你不能将/usr放在LVM环境中。请更新到最新版本,或安装2.0.33(沒有-r1),它们都是静态链接的版本。

分区

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

  • /dev/hda1 -- /boot
  • /dev/hda2 -- (交换分区)
  • /dev/hda3 -- /
  • 将被用作LVM2
  • 将被用作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 /bin /sbin /dev /root。这样做的好处是,当有什么糟糕的事情(系统严重受损,但是对root来说还有点用)发生的时候,你还可以登入系统。

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

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

按照安装手册的步骤,建立分区/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 vg
(导入所有分区)
# vgimport -a vg
(重新启用所有分区)
# vgchange -a y

4. 相关资源

5. 特别感谢

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



打印

更新于2007年 2月 26日

本文档的原始版本最后更新于2007年 11月 3日

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

Avi Schwartz
作者

Rajiv Manglani
Contributor

Xavier Neys
编辑

Victor Tseng
译者

Zhou Mi
译者

Donate to support our development efforts.

Copyright 2007 Gentoo中文. 有问 题和建议请联系我们.