本指南使用两个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硬盘,它们的分区是这样的:
重要: 请特别注意分区的名字,毕竟a和b常常被看错,那些数字也很容易混淆。一个小小的失误将导致一整个分区被错误地覆盖掉。手下留神! |
OK, 开始吧……
先照着安装手册做,直到第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
|
重新开机,所有的分区都将被正确地显示与挂载。
如果你在某处中断了Gentoo的安装又想继续的话,你需要先创建分区节点:
代码 3.1: 重新激活分区 |
# vgscan --mknodes
|
在缺少最新工具的安装光盘中,很可能需要用如下方法来重新启用分区:
代码 3.2: 重新激活分区 |
(先将所有分区复位) # vgchange -a n (导出所有分区) # vgexport -a (导入所有分区) # vgimport -a (重新激活所有分区) # vgchange -a y |
非常感谢Thilo Bangert以及Terje Kvernes为本文提供的帮助和建议。
本文档的内容遵循知识共享-署名-相同方式共享许可协议