|
发表于 2005-4-16 03:01:19
|
显示全部楼层
两种方法:
一、使用tar备份你所有分区下的文件到一个分区中,使用fdisk工具重新调整分区(重新分区)。然后把备份过的文件考备到新的分区下,编辑/etc/fstab文件重新挂载它们,但这种做法从某个角度来说并不可靠,简单一点就是用另一块硬盘做中转,但这意味你的windows可能中转失败,中转过程的方法和上面一样。
二、使用LVM工具,创建一些新的逻辑分区。
创建 LVM 逻辑卷非常容易,而且一旦创建它以后,我们就可以把文件系统放在它上面、安装它,然后开始使用卷来存储文件。使用 "lvcreate" 命令来创建逻辑卷,指定新卷的名称、所希望的卷的大小,以及希望这个特定逻辑卷所属的卷组。然后,LVM 系统从我们指定的卷组中分配存储量来创建准备使用的新卷。创建新卷后,可以将 ext2 或 ReiserFS 文件系统放在上面、安装它,然后照我们喜欢的方式使用它,可用同样方法创建XFS或JSF文件系统。
首先了解概念:
范围
LVM 系统以大小相等的“块”(称为“范围”)为单位分配存储量。我们可以指定在创建卷组时使用的特定的范围大小。范围的大小缺省为 4Mb,这对于大多数情况来说相当理想。LVM 的一个好处是在已经安装了逻辑卷并在使用逻辑卷的情况下,可以动态地改变逻辑卷使用的范围的物理存储位置(换句话说,就是存储它们所在的磁盘)。LVM 系统确保逻辑卷在管理员物理地改变存储位置的同时能够继续正常操作。
当然,因为所有事物都是在大小相等的范围之上创建的,所以要为已存在的逻辑卷分配一些额外的范围实际上很容易 -- 换句话说,动态“增长”卷:
从卷组添加额外的范围,扩展逻辑卷的大小
一旦扩充了逻辑卷,接下来就可以扩充 ext2 或 ReiserFS 文件系统来利用这一新的磁盘空间。如果使用例如 resize_reiserfs 这样的程序,也可以 在已安装和正使用卷时扩充文件系统!真正令人称奇的是 -- 使用 LVM 和联机文件系统扩充实用程序,可以在改变存储器配置时不再需要重新引导系统,甚至不需要降低到运行级别 1。
唯一需要关闭系统的情况是在需要添加新的物理磁盘时。添加了新磁盘后,可以将这些新的物理卷添加到卷组中来创建新的范围补给。
设置 LVM
好,让我们开始安装 LVM。LVM 由两部分组成:内核部分和一套用户空间工具。为了开始,可以到 LVM 页面并下载可以找到的最新版本的 LVM tar 文件包含了所有用户空间工具以及一组内核补丁程序。
为了开始,进入内核源码目录 (/usr/src/linux) 并创建一个称为 "extras" 的目录。然后进入该目录并抽取 LVM tar 文件:如果系统中已安装了LVM,但同样需要手动创建 ”extras"目录,并且下面红色这一段不能不做。
(如果没有内核原码,先下载一个适合你的系统的原码cp到/usr/src/下并编译它:
# cd /usr/src/linux
# sudo mkdir extras
# cd extras
# sudo tar xzvf /path/to/location/of/lvm_XXX.tar.gz
执行完这一步后,您会注意到在 extras 中有一个称之为 "LVM" 的目录,它包含了另一个根据您刚刚解包的 LVM 版本命名的目录。进入这两个目录找到 LVM 源码:
您将看到几个文本文件、脚本和源目录。您会在 "INSTALL" 文件中找到安装指令;我将指导您完成这一过程。首先,我们希望运行配置脚本,如下:
# sudo ./configure --prefix=/ --mandir=/usr/man
修补
执行完这条命令后,将创建并配置 Makefile,以在 /sbin 中安装所有 LVM 工具,在 /usr/man 中安装帮助页面。如果您的帮助页面位于 /usr/share/man 中(按照 FHS 2.1),则对上述路径作相应的调整。如果内核源码不在 /usr/src/linux 中,还需要将 "--with-kernel_dir=/path/to/usr/src/linux" 选项添加到一行中。配置脚本完成后,我们就可以准备安装这些工具并生成当前内核的补丁了。让我们首先对内核加以修补。进入 PATCHES 目录:
# cd PATCHES
现在输入 "make"。makefile 将生成专用于特定系列内核源码的补丁:
#sudo make
清单 2:patch 命令
虽然 LVM INSTALL 文档并没有提到,但我通常将 "-l" 选项传递给 patch。该选项让补丁程序补偿空白中的任何变化(例如细微的缩排变化),这些变化一般会造成补丁的某些部分失败。如果上述命令完成时没有任何带有 "FAILED" 的行,那么就可以准备安装用户磁盘空间工具了。如果不是这样,您需要审视 /usr/src/linux 目录来查找 ..rej 文件,然后使用文本编辑器手工将被拒绝的部分插入到源码中 -- 真麻烦!不过,在大多数情况下,应用补丁都很顺利,您可以迅速使用它。
配置、编译和安装
好,现在有了一个经过修补的内核,因此它具有最新可用的 LVM 代码。现在需要配置内核来启用 LVM 支持。建议您直接将 LVM 支持编译到内核中而不是将它配置成作为一个模块编译。
# cd /usr/src/linux
# sudo make menuconfig
在 "Multi-device support (RAID and LVM)" 部分中可以找到 LVM 选项。一旦启用了第一个选项:
Multiple devices driver support (RAID and LVM)
....您将看到以下选项,您也应该启用它们:
<*> Logical volume manager (LVM) support
根据您使用的 LVM 版本,可能还有其它一些希望启用的与 LVM 相关的选项。完成后,保存内核配置,并执行标准内核编译例程,然后重新引导。恭喜 -- 您现已启用了内核 LVM 支持;现在,我们需要编译和安装用户磁盘空间工具。这一步很简单:
# cd /usr/src/linux/extras/LVM/版本号
# sudo make
# sudo make install
另外还有一步,它是可选的。如果您要做的不仅是测试 LVM,还需要将以下几行添加到启动 rc 脚本中:(没有可以创建)
/sbin/vgscan
/sbin/vgchange -a y
这些行将浏览所有可用的卷组并激活它们。然后,将以下这行添加到关机 rc 脚本中,并确保它在卸装了所有文件系统后执行:
/sbin/vgchange -a n
在sudo中LVM如果没有安装可以使用synaptic去找,一般情况光盘安全安装时LVM已经配置好,不需要再次装入。
解决方案的开始
在开始转换之前,首先在硬盘驱动器的结尾处对未使用的空间进行分区,以下是以一个使用35G的空间作为案例:
# sudo sfdisk -l
Disk /dev/hda: 89355 cylinders, 16 heads, 63 sectors/track
Units = cylinders of 516096 bytes, blocks of 1024 bytes, counting from 0
Device Boot Start End #cyls #blocks Id System
/dev/hda1 * 0+ 247 248- 124960+ 83 Linux
/dev/hda2 248 743 496 249984 82 Linux swap
/dev/hda3 744 20119 19376 9765504 83 Linux
/dev/hda4 20120 89354 69235 34894440 5 Extended
/dev/hda5 20120+ 89354 69235- 34894408+ 8e Linux LVM
准备为 LVM 初始化它。以下是过程 -- 首先,将 35 GB 初始化成 物理卷;然后,使用这个物理卷创建一个 卷组 ,最后,在卷组上分配一些范围,创建将包含新文件系统并存放当前 /home 中所有文件的 逻辑卷。
为开始这个过程,使用 pvcreate 命令将 /dev/hda5 初始化成物理卷:
# sudo pvcreate /dev/hda5
pvcreate -- physical volume "/dev/hda5" successfully created
pvcreate 在 /dev/hda5 上设置一个特殊的“记帐”区域,称作 VGDA(“卷组描述符区域”)。LVM 使用该区域来记录物理范围是如何分配的,以及其它一些操作。
下一步是创建卷组并向该卷组添加 /dev/hda5。卷组将充当范围池(许多存储块)。创建卷组之后,创建所需数量的逻辑卷。决定将卷组名称,如main:
# sudo vgcreate main /dev/hda5
vgcreate -- INFO: using default physical extent size 4 MB
vgcreate -- INFO: maximum logical volume size is 255.99 Gigabyte
vgcreate -- doing automatic backup of volume group "main"
vgcreate -- volume group "main" successfully created and activated
vgcreate 命令执行几个操作。除了创建 "main" 卷组以外,它还设置 /dev/hda5,使它使用 4 MB 的范围,4 GB 是缺省范围大小。这意味着在卷组上创建的所有逻辑卷都可以以 4 MB 为增量单位来进行扩充或缩减。
由于内核限制的原因,范围大小决定了逻辑卷的最大大小。您可以从上面的输出中看出,4 MB 的范围大小决定了逻辑卷大小限制为 256 GB,如果您向卷组添加几个高容量驱动器,这是很容易达到的逻辑卷组大小。如果每一个卷最后都大于 256 GB,我建议您在运行 vgcreate 时指定更大一些的范围大小。范围的大小可以是从 8 KB 到 512 MB 之间的任何值,并且必须总是 2 的倍数。通过将范围大小增加到 4 MB 以上,最大的物理卷大小将相应地增加到最大为 1 Petabyte(尽管当今现实世界中,x86 系统上的大小限制是 2 Terabytes)。例如,如果希望使用 32 MB 的范围创建卷组,我会输入:
# sudo vgcreate -s 32M main /dev/hda5
32 MB 是个合适的范围大小,因为 32 MB 的颗粒度仍然便于管理,并将引导的最大逻辑卷大小增加到 2 TB。创建卷组之后,可以通过输入 "vgdisplay" 来查看其信息:
# vgdisplay
--- Volume group ---
VG Name main
VG Access read/write
VG Status available/resizable
VG # 0
MAX LV 256
Cur LV 0
Open LV 0
MAX LV Size 255.99 GB
Max PV 256
Cur PV 1
Act PV 1
VG Size 33.28 GB
PE Size 4 MB
Total PE 8519
Alloc PE / Size 0 / 0
Free PE / Size 8519 / 33.28 GB
VG UUID 2qC2H2-iA8s-qW6F-cwXx-JVIh-I6VC-VVCGmn
既然有了自己的卷组,准备创建逻辑卷。决定在最初时将它的大小设置为 8 GB,并称它作 "lv_home"(假设值):
# sudo lvcreate -L8G -nlv_home main
lvcreate -- doing automatic backup of "main"
lvcreate -- logical volume "/dev/main/lv_home" successfully created
然后,在逻辑卷上创建文件系统:
# sudo mkreiserfs /dev/main/lv_home
如果是XFS则为mkxfs
<----------- MKREISERFSv2 ----------->
Block size 4096 bytes
Block count 2097152
Used blocks 8275
Journal - 8192 blocks (18-8209), journal header is in block 8210
Bitmaps: 17, 32768, 65536, 98304, 131072, 163840,
196608, 229376, 262144, 294912, 327680, 360448,
393216, 425984, 458752, 491520, 524288, 557056,
589824, 622592, 655360, 688128, 720896, 753664,
786432, 819200, 851968, 884736, 917504, 950272,
983040, 1015808, 1048576, 1081344, 1114112,
1146880, 1179648, 1212416, 1245184, 1277952,
1310720, 1343488, 1376256, 1409024, 1441792,
1474560, 1507328, 1540096, 1572864, 1605632,
1638400, 1671168, 1703936, 1736704, 1769472,
1802240, 1835008, 1867776, 1900544, 1933312,
1966080, 1998848, 2031616, 2064384
Root block 8211
Hash function "r5"
ATTENTION: ALL DATA WILL BE LOST ON '/dev/main/lv_home'! (y/n)y
journal size 8192 (from 18)
Initializing journal - 0%....20%....40%....60%....80%....100%
Syncing..done.
既然创建了文件系统,就可以在 /mnt/newhome 上安装它:
关键性步骤:
# sudo mkdir /mnt/newhome
# mount /dev/main/lv_home /mnt/newhome
# df
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/hda3 9765200 6989840 2775360 72% /
tmpfs 291388 0 291388 0% /dev/shm
/dev/main/lv_home 8388348 32840 8355508 1% /mnt/newhome
您可以从上面看出,几乎准备复制 /home 中的所有数据。在开始之前,把系统降低到运行级别 1 以确保在复制 /home 中的文件时,没有用户或进程能够访问或修改它们:
# sudo init 1
然后,开始复制文件:
# sudo cp -avx /home/* /mnt/newhome
复制操作需要大约 10 分钟的时间完成。然后,我将原始 /home 备份成 /home.old,这只是为在复制过程中有任何错误而准备的。创建一个新的安装点,然后在 /home 上重新安装新 home:
# cd /
# sudo mv home home.old
# sudo mkdir home
# sudo umount /mnt/newhome
# sudo mount /dev/main/lv_home /home
然后,应该设置服务器以使我的新 /home 分区可以在每次启动机器时使用。首先修改 /etc/fstab 以使它包括新的 /home 项:
# sudo vim /etc/fstab
#
# fs mountpoint type opts dump/pass
/dev/hda3 / reiserfs defaults 1 1
/dev/main/lv_home /home reiserfs defaults 2 2
/dev/hda2 none swap sw 0 0
/dev/hda1 /boot reiserfs noauto 0 0
/dev/cdrom /mnt/cdrom iso9660 noauto,ro 0 0
proc /proc proc defaults 0 0
none /dev/pts devpts mode=620 0 0
tmpfs /dev/shm tmpfs defaults 0 0
然后,对初始化脚本进行了一些小小改动。修改了 "checkroot" 启动脚本,使以下命令可以在根分区重新安装读/写后立即运行:
sudo vim /sbin/vgscan
sudo vim /sbin/vgchange -a y
接下来,修改了在关机时运行的文件系统卸装脚本,使以下命令在卸装了所有文件系统 后立即运行:
sudo vim /sbin/vgchange -a n
LVM 的优点
虽然到 LVM 的转换有些痛苦,但一旦转换完成之后,管理文件系统就变得非常简单。例如,决定重新调整新的 /home 逻辑卷大小,向文件系统结尾添加大约 2 GB 的空间。首先,向 "lv_home" 逻辑卷添加了额外的容量,然后使用 resize_reiserfs 实用程序来扩充文件系统,使它可以使用额外的容量。以下是执行所有这些操作的两个命令:
# sudo lvextend -L+2G /dev/main/lv_home
# sudo resize_reiserfs -f /dev/main/lv_home
在大约一秒钟的时间里,可将 /home 文件系统扩大了 2 GB;不需要重新引导、降低到运行级别 1,甚至不需要卸装 /home 来执行大小调整。一切都照常工作,同样可以将Linux下的所有文件系统按照以上方面实现动态添加逻辑卷,来增加硬盘空间,但在增加swap空间时不需要这么做。
查看系统状况
# df
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/hda3 9765200 1413340 8351860 15% /
/dev/main/lv_home 10485436 5609836 4875600 54% /home
大功造成,以上一些技术原理参照Daniel Bobbins /Gentoo Technologies, Inc. 的总裁兼 CEO的LVM技术原理,在设置LVM一段中为Daniel Bobbins在技术原理中的方法,本人根据ubuntu的使用方法改编了其中的部分。 |
|