Gentoo LVM2安装指南
1. 简介
本指南使用两个IDE硬盘做范例。这表示你极可能需要根据自己的需求,对磁盘、分区名以及分区大小等信息做些更改。
警告:
本文并不想成为一篇LVM2学习指南。它只是一个小笔记,作为Gentoo安装手册(第一部分)的补充。请务必在你动手安装之前阅读Gentoo安装手册。
|
系统需求
如果你是全新安装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/.*/" ]
filter = [ "a|/dev/hd[ab]|", "r/.*/" ]
# 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: 创建和扩充卷组 |
# 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
# 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
< > 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为本文提供的帮助和建议。
本文档的内容遵循知识共享-署名-相同方式共享许可协议
|