Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3056113
  • 博文数量: 535
  • 博客积分: 15788
  • 博客等级: 上将
  • 技术积分: 6507
  • 用 户 组: 普通用户
  • 注册时间: 2007-03-07 09:11
文章分类

全部博文(535)

文章存档

2016年(1)

2015年(1)

2014年(10)

2013年(26)

2012年(43)

2011年(86)

2010年(76)

2009年(136)

2008年(97)

2007年(59)

分类: LINUX

2008-05-08 10:23:34

Linux LVM 的使用详解

摘要: Linux用户安装Linux操作系统时遇到的一个最常见的难以决定的问题就是如何正确地给评估各分区大小,以分配合适的硬盘空间。而遇到出现某个分区空间耗尽时,解决的方法通常是使用符号链接,或者使用调整分区大小的工具(比如Patition Magic等),但这都只是暂时解决办法,没有根本解决问题。随着Linux的逻辑盘卷管理功能的出现,这些问题都迎刃而解,本文就深入讨论LVM技术,使得用户在无需停机的情况下方便地调整各个分区大小。

一、 前言

每个Linux使用者在安装Linux时 都会遇到这样的困境:在为系统分区时,如何精确评估和分配各个硬盘分区的容量,因为系统管理员不但要考虑到当前某个分区需要的容量,还要预见该分区以后可 能需要的容量的最大值。因为如果估计不准确,当遇到某个分区不够用时管理员可能甚至要备份整个系统、清除硬盘、重新对硬盘分区,然后恢复数据到新分区。

虽然现在有很多动态调整磁盘的工具可以使用,例如Partation Magic等等,但是它并不能完全解决问题,因为某个分区可能会再次被耗尽;另外一个方面这需要重新引导系统才能实现,对于很多关键的服务器,停机是不可接受的,而且对于添加新硬盘,希望一个能跨越多个硬盘驱动器的文件系统时,分区调整程序就不能解决问题。

因此完美的解决方法应该是在零停机前提下可以自如对文件系统的大小进行调整,可以方便实现文件系统跨越不同磁盘和分区。幸运的是Linux提供的逻辑盘卷管理(LVM,Logical Volume Manager)机制就是一个完美的解决方案。

LVM是逻辑盘卷管理(Logical Volume Manager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。通过LVM系统管理员可以轻松管理磁盘分区,如:将若干个磁盘分区连接为一个整块的卷组(volume group),形成一个存储池。管理员可以在卷组上随意创建逻辑卷组(logical volumes),并进一步在逻辑卷组上创建文件系统。管理员通过LVM可以方便的调整存储卷组的大小,并且可以对磁盘存储按照组的方式进行命名、管理和分配,例如按照使用用途进行定义:“development”和“sales”,而不是使用物理磁盘名“sda”和“sdb”。而且当系统添加了新的磁盘,通过LVM管理员就不必将磁盘的文件移动到新的磁盘上以充分利用新的存储空间,而是直接扩展文件系统跨越磁盘即可。

二、 LVM基本术语

前面谈到,LVM是在磁盘分区和文件系统之间添加的一个逻辑层,来为文件系统屏蔽下层磁盘分区布局,提供一个抽象的盘卷,在盘卷上建立文件系统。首先我们讨论以下几个LVM术语:
物理存储介质(The physical media)
这里指系统的存储设备:硬盘,如:/dev/hda、/dev/sda等等,是存储系统最低层的存储单元。
物理卷(physical volume)
物理卷就是指硬盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数。
卷组(Volume Group)
LVM卷组类似于非LVM系统中的物理硬盘,其由物理卷组成。可以在卷组上创建一个或多个“LVM分区”(逻辑卷),LVM卷组由一个或多个物理卷组成。
逻辑卷(logical volume)
LVM的逻辑卷类似于非LVM系统中的硬盘分区,在逻辑卷之上可以建立文件系统(比如/home或者/usr等)。
PE(physical extent)
每一个物理卷被划分为称为PE(Physical Extents)的基本单元,具有唯一编号的PE是可以被LVM寻址的最小单元。PE的大小是可配置的,默认为4MB。
LE(logical extent)
逻辑卷也被划分为被称为LE(Logical Extents) 的可被寻址的基本单位。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。


首先可以看到,物理卷(PV)被由大小等同的基本单元PE组成。


一个卷组由一个或多个物理卷组成,


从上图可以看到,PE和LE有着一一对应的关系。逻辑卷建立在卷组上。逻辑卷就相当于非LVM系统的磁盘分区,可以在其上创建文件系统。

下图是磁盘分区、卷组、逻辑卷和文件系统之间的逻辑关系的示意图:


和非LVM系统将包含分区信息的元数据保存在位于分区的起始位置的分区表中一样,逻辑卷以及卷组相关的元数据也是保存在位于物理卷起始处的VGDA(卷组描述符区域)中。VGDA包括以下内容: PV描述符、VG描述符、LV描述符、和一些PE描述符 。

系统启动LVM时激活VG,并将VGDA加载至内存,来识别LV的实际物理存储位置。当系统进行I/O操作时,就会根据VGDA建立的映射机制来访问实际的物理位置。


三、 安装LVM

首先确定系统中是否安装了lvm工具:

[root@www root]# rpm –qa|grep lvm
lvm-1.0.3-4

如果命令结果输入类似于上例,那么说明系统已经安装了LVM管理工具;如果命令没有输出则说明没有安装LVM管理工具,则需要从网络下载或者从光盘装LVM rpm工具包。

安装了LVM的RPM软件包以后,要使用LVM还需要配置内核支持LVM。RedHat默认内核是支持LVM的,如果需要重新编译内核,则需要在配置内核时,进入Multi-device Support (RAID and LVM)子菜单,选中以下两个选项:

  [*] Multiple devices driver support (RAID and LVM)
  <*> Logical volume manager (LVM) Support

然后重新编译内核,即可将LVM的支持添加到新内核中。

为了使用LVM,要确保在系统启动时激活LVM,幸运的是在RedHat7.0以后的版本,系统启动脚本已经具有对激活LVM的支持,在/etc/rc.d/rc.sysinit中有以下内容:

# LVM initialization
if [ -e /proc/lvm -a -x /sbin/vgchange -a -f /etc/lvmtab ]; then
action $"Setting up Logical Volume Management:" /sbin/vgscan && /sbin/vgchange -a y
fi

其中关键是两个命令,vgscan命令实现扫描所有磁盘得到卷组信息,并创建文件卷组数据文件/etc/lvmtab和/etc/lvmtab.d/*;vgchange -a y命令激活系统所有卷组。
四、 创建和管理LVM

要创建一个LVM系统,一般需要经过以下步骤:
1、 创建分区

使用分区工具(如:fdisk等)创建LVM分区,方法和创建其他一般分区的方式是一样的,区别仅仅是LVM的分区类型为8e。

创建完分区,如果不能正确识别,执行partprobe 命令重新读取分区表。

2、 创建物理卷

创建物理卷的命令为pvcreate,利用该命令将希望添加到卷组的所有分区或者磁盘创建为物理卷。将整个磁盘创建为物理卷的命令为:

# pvcreate /dev/hdb

将单个分区创建为物理卷的命令为:

# pvcreate /dev/hda5
3、 创建卷组

创建卷组的命令为vgcreate,将使用pvcreate建立的物理卷创建为一个完整的卷组:

# vgcreate web_document /dev/hda5 /dev/hdb

vgcreate命令第一个参数是指定该卷组的逻辑名:web_document。后面参数是指定希望添加到该卷组的所有分区和磁盘。vgcreate在创建卷组 web_document 以外,还设置使用大小为4 MB的PE(默认为4MB),这表示卷组上创建的所有逻辑卷都以 4 MB 为增量单位来进行扩充或缩减。由于内核原因,PE大小决定了逻辑卷的最大大小,4 MB 的PE决定了单个逻辑卷最大容量为 256 GB,若希望使用大于256G的逻辑卷则创建卷组时指定更大的PE。PE大小范围为8 KB 到 512 MB,并且必须总是 2 的倍数(使用-s指定,具体请参考man vgcreate)。
4、 激活卷组

为了立即使用卷组而不是重新启动系统,可以使用vgchange来激活卷组:

# vgchange -a y web_document
5、 添加新的物理卷到卷组中

当系统安装了新的磁盘并创建了新的物理卷,而要将其添加到已有卷组时,就需要使用vgextend命令:

# vgextend web_document /dev/hdc1

这里/dev/hdc1是新的物理卷。
6、 从卷组中删除一个物理卷

要从一个卷组中删除一个物理卷,首先要确认要删除的物理卷没有被任何逻辑卷正在使用,就要使用pvdisplay命令察看一个该物理卷信息:


如果某个物理卷正在被逻辑卷所使用,就需要将该物理卷的数据备份到其他地方,然后再删除。删除物理卷的命令为vgreduce:

# vgreduce web_document /dev/hda1
7、 创建逻辑卷

创建逻辑卷的命令为lvcreate:

# lvcreate -L1500 –nwww1 web_document

该命令就在卷组web_document上创建名字为www1,大小为1500M的逻辑卷,并且设备入口为/dev/web_document/www1(web_document为卷组名,www1为逻辑卷名)。如果希望创建一个使用全部卷组的逻辑卷,则需要首先察看该卷组的PE数,然后在创建逻辑卷时指定:

# vgdisplay web_document| grep "Total PE"
Total PE 45230
# lvcreate -l 45230 web_document -n www1
8、 创建文件系统

笔者推荐使用reiserfs文件系统,来替代ext2和ext3:


创建了文件系统以后,就可以加载并使用它:

# mkdir /data/wwwroot
# mount /dev/web_document/www1 /data/wwwroot

如果希望系统启动时自动加载文件系统,则还需要在/etc/fstab中添加内容:

/dev/web_document/www1 /data/wwwroot reiserfs defaults 1 2
9、 删除一个逻辑卷

删除逻辑卷以前首先需要将其卸载,然后删除:

# umount /dev/web_document/www1
# lvremove /dev/web_document/www1
lvremove -- do you really want to remove "/dev/web_document/www1"? [y/n]: y
lvremove -- doing automatic backup of volume group "web_document"
lvremove -- logical volume "/dev/web_document/www1" successfully removed
10、 扩展逻辑卷大小

用惯了传统调整硬盘工具的人可能会认为文件系统和硬盘的分区之间是统一的,实际上他们之间并不是完整的整体(这也就是为什么BSD可以在一个硬盘分区里面制作多个文件系统分区)。想像一下带有移动式书架的书橱。你可以通过移动式书架调整书橱里面书籍的位置。把书当成文件系统,你可以在书橱里面放满书籍,也可以通过移动式书架调整书橱的空间。当然也可以通过书架调整书橱里面书籍存放的位置。如下图所示:


|<-- hda1--- ->|<-- hda2------>|
+---------------+---------------+
|xxxxxxxxxxx|xxxxxx| |
|xxxxxxxxxxx|xxxxxx| |
+---------------+---------------+



  硬盘分区/dev/hda1中的文件系统占满了整个分区,而/dev/hda2中的文件系统只占用了2/3左右的分区。

所以在调整逻辑卷容量大小的同时也要调整在该卷上的文件系统的大小,当要增大容量时,先调整容量,后调整文件系统,若要缩小容量则反之。

LVM提供了方便调整逻辑卷大小的能力,扩展逻辑卷大小的命令是lvextend:

# lvextend -L 12G /dev/web_document/www1
lvextend -- extending logical volume "/dev/web_document/www1" to 12 GB
lvextend -- doing automatic backup of volume group "web_document "
lvextend -- logical volume "/dev/web_document/www1" successfully extended

上面的命令就实现将逻辑卷www1的大小扩招为12G。

# lvextend -L+1G /dev/web_document/www1
lvextend -- extending logical volume "/dev/web_document/www1" to 13 GB
lvextend -- doing automatic backup of volume group "web_document "
lvextend -- logical volume "/dev/web_document/www1" successfully extended

上面的命令就实现将逻辑卷www1的大小增加1G。

增加了逻辑卷的容量以后,就需要修改文件系统大小以实现利用扩充的空间。笔者推荐使用reiserfs文件系统来替代ext2或者ext3。因此这里仅仅讨论reiserfs的情况。Reiserfs文件工具提供了文件系统大小调整工具:resize2fs。对于希望调整被加载的文件系统大小:

# resize2fs -f /dev/web_document/www1

一般建议最好将文件系统卸载,调整大小,然后再加载:

# umount /dev/web_document/www1
# resize2fs /dev/web_document/www1
# mount -treiserfs /dev/web_document/www1 /data/wwwroot

对于使用ext2或ext3文件系统的用户可以考虑使用工具

ext2resize。

11、 减少逻辑卷大小

使用lvreduce即可实现对逻辑卷的容量,同样需要首先将文件系统卸载:

# umount /data/wwwroot
# resize_reiserfs -s-2G /dev/web_document/www1
# lvreduce -L-2G /dev/web_document/www1
# mount -treiserfs /dev/web_document/www1 /data/wwwroot

12 添加一块新硬盘,将容量扩展到原来的一个LV上(可以文件系统在线扩大lv的文件系统,但不能文件系统在线减小lv的文件系统)
pvcreate /dev/sdb (创建pv)
vgextend /dev/VolGroup00 /dev/sdb (将pv添加到vg)
lvextend -L 15000 /dev/VolGroup00/LVroot (扩展lv大小)
 resize2fs /dev/VolGroup00/LVroot (扩展文件系统大小)


五、 总结

根据上面的讨论可以看到,LVM具有很好的可伸缩性,使用起来非常方便。可以方便地对卷组、逻辑卷的大小进行调整,更进一步调整文件系统的大小。如果希望了解更多信息,请参考LVM-HOWTO。



使用lvextend -L size LVNAME 增大一个逻辑卷的大小。
[root@NEWLFS mnt]#lvextend -L +1G /dev/lvm_vg/lv_home
Extending logical volume lv_home to 3.00 GB
Logical volume lv_home successfully resized
[root@NEWLFS mnt]#
-L +1G 为lv_home加上 1G 空间。或者使用这种格式:
[root@NEWLFS mnt]#lvextend -L 3G /dev/lvm_vg/lv_home
指定lv_home更改后的大小,效果相同。


更改逻辑卷大小后,还应该更改文件系统的大小,保持一致:
[root@NEWLFS mnt]#resize_reiserfs -f /dev/lvm_vg/lv_home

代码:
resize_reiserfs 3.6.19 (2003

ReiserFS report:
blocksize             4096
block count           786432 (524288)
free blocks           778197 (516061)
bitmap block count    24 (16)

Syncing..done

resize_reiserfs: Resizing finished successfully.

[root@NEWLFS mnt]df
Filesystem Size Used Avail Use% Mounted on
/dev/md0 5.4G 2.8G 2.7G 51% /
/dev/hda1 6.4G 4.0G 2.5G 62% /mnt/C
/dev/hda6 25G 22G 3.6G 86% /mnt/E
/dev/hda7 9.7G 3.7G 5.6G 40% /mnt/lfs
/dev/mapper/lvm_vg-lv_home
3.0G 33M 3.0G 2% /mnt/lvm_home
[root@NEWLFS mnt]#

成功的将lvm_home扩展到了3G,没有重新启动,并且没有卸载文件系统。
ReiserFS真是好用! ^_^

当然,ReiserFS 也允许卸载文件系统后resize,使用下列命令:
[root@NEWLFS mnt]#umount /dev/lvm_vg/lv_home
卸载文件系统
[root@NEWLFS mnt]#resize_reiserfs /dev/lvm_vg/lv_home
调整大小,与上面不同的地方是没有 -f 参数.
[root@NEWLFS mnt]#mount -t reiserfs /dev/lvm_vg/lv_home lvm_home/
重新挂载上.

EXT2/3 安装,扩展:

[root@NEWLFS mnt]#lvcreate -L 2G -n lv_opt lvm_vg
Logical volume "lv_opt" created
分出一块2G名字为lv_opt的逻辑卷

[root@NEWLFS mnt]#mke2fs -j /dev/lvm_vg/lv_opt
代码:
mke2fs 1.35 (28-Feb-2004)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
262144 inodes, 524288 blocks
26214 blocks (5.00%) reserved for the super user
First data block=0
16 block groups
32768 blocks per group, 32768 fragments per group
16384 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912

Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 35 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

创建ext3文件系统
[root@NEWLFS mnt]#mkdir lvm_opt
[root@NEWLFS mnt]#mount -t ext3 /dev/lvm_vg/lv_opt lvm_opt/
创建挂载点,挂载上。
[root@NEWLFS mnt]#df
代码:
Filesystem            Size  Used Avail Use% Mounted
..............
/dev/mapper/lvm_vg-lv_home
                      3.0G   33M  3.0G   2% /mnt/lvm_home
/dev/mapper/lvm_vg-lv_opt
                      2.0G   33M  1.9G   2% /mnt/lvm_opt


[root@NEWLFS mnt]#lvextend -L +1G /dev/lvm_vg/lv_opt
Extending logical volume lv_opt to 3.00 GB
Logical volume lv_opt successfully resized
为lv_opt 增加一个G的空间。

[root@NEWLFS mnt]#umount lvm_opt/
调整ext2/3文件系统 需要先卸载,然后调整,不象ReiserFS可以不用卸载。

[root@NEWLFS mnt]#resize2fs /dev/lvm_vg/lv_opt
resize2fs 1.35 (28-Feb-2004)
Please run 'e2fsck -f /dev/lvm_vg/lv_opt' first.
提示先运行e2fsck -f 那就检查下吧 Smile
resize2fs -f 参数可以不用e2fsck,检查下也是好的。

[root@NEWLFS mnt]#e2fsck -f /dev/lvm_vg/lv_opt
代码:
e2fsck 1.35 (28-Feb-2004)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/lvm_vg/lv_opt: 11/262144 files (0.0% non-contiguous), 16443/524288 blocks
[root@NEWLFS mnt]#resize2fs /dev/lvm_vg/lv_opt
resize2fs 1.35 (28-Feb-2004)
Resizing the filesystem on /dev/lvm_vg/lv_opt to 786432 (4k) blocks.
The filesystem on /dev/lvm_vg/lv_opt is now 786432 blocks long.

成功将lv_opt调整成3G,重新mount 看看吧 !

[root@NEWLFS mnt]#mount -t ext3 /dev/lvm_vg/lv_opt lvm_opt/
[root@NEWLFS mnt]#df
代码:
Filesystem            Size  Used Avail Use% Mounted on
.............
/dev/mapper/lvm_vg-lv_home
                      3.0G   33M  3.0G   2% /mnt/lvm_home
/dev/mapper/lvm_vg-lv_opt
                      3.0G   33M  2.9G   2% /mnt/lvm_opt
[root@NEWLFS mnt]#

OK啦。 LVM真是方便 ^_^

再来看看如何减小分区大小:

注意: 减小逻辑卷大小之前,应该先减小文件系统的大小,否则可能会导致数据丢失


ReiserFS :
[root@NEWLFS mnt]#umount lvm_home/
首先卸载ReiserFS文件系统。

[root@NEWLFS mnt]#resize_reiserfs -s-1G /dev/lvm_vg/lv_home
代码:
resize_reiserfs 3.6.19 (2003

You are running BETA version of reiserfs shrinker.
This version is only for testing or VERY CAREFUL use.
Backup of you data is recommended.

Do you want to continue? [y/N]:y
Processing the tree: 0%....20%....40%....60%....80%....100%    left 0, 0 /sec

nodes processed (moved):
int        0 (0),
leaves     1 (0),
unfm       0 (0),
total      1 (0).

check for used blocks in truncated region

ReiserFS report:
blocksize             4096
block count           524288 (786432)
free blocks           516061 (778197)
bitmap block count    16 (24)

Syncing..done

resize_reiserfs: Resizing finished successfully.


先减小文件系统的大小, -s-1G 减去1个G

[root@NEWLFS mnt]#lvreduce -L -1G /dev/lvm_vg/lv_home
WARNING: Reducing active logical volume to 2.00 GB
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce lv_home? [y/n]: y
Reducing logical volume lv_home to 2.00 GB
Logical volume lv_home successfully resized
然后减小LV大小, -L -1G 减去1个G 与文件系统保持一致。

[root@NEWLFS mnt]#mount -t reiserfs /dev/lvm_vg/lv_home lvm_home/
[root@NEWLFS mnt]#df
代码:
Filesystem            Size  Used Avail Use% Mounted on
/dev/md0              5.4G  2.8G  2.7G  51% /
/dev/hda1             6.4G  4.0G  2.5G  62% /mnt/C
/dev/hda6              25G   22G  3.6G  86% /mnt/E
/dev/hda7             9.7G  3.7G  5.6G  40% /mnt/lfs
/dev/mapper/lvm_vg-lv_opt
                      3.0G   33M  2.9G   2% /mnt/lvm_opt
/dev/mapper/lvm_vg-lv_home
                      2.0G   33M  2.0G   2% /mnt/lvm_home


OK,成功减少了一个G,从上面输出可以看出,减小要比增大危险一些
所以应该尽量避免减小分区大小,以及做重要数据的备份,有备无患嘛 Smile

EXT2/3:

在LVM1中可以通过e2fsadm这个程序,方便的减小一个ext2/3的大小。
而LVM2中这个程序不可用。
所以在LVM2中减小EXT2/3大小时麻烦一些,因为必须要知道减少后卷的块数。

[root@NEWLFS ~]#umount /mnt/lvm_opt/
首先卸载文件系统
[root@NEWLFS ~]#mke2fs -n /dev/lvm_vg/lv_opt
代码:
mke2fs 1.35 (28-Feb-2004)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
262144 inodes, 786432 blocks
26214 blocks (5.00%) reserved for the super user
First data block=0
16 block groups
32768 blocks per group, 32768 fragments per group
16384 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912
[root@NEWLFS ~]#

因为必须知道减少后卷的块数,所以通过mke2fs -n 列出块大小

注意: -n 参数不会使mke2fs真的创建文件系统,而只是列出文件系统的信息。

千万不要少了-n 否则数据就全没了。。Sad

块大小是4096(4kb) 当前有786432个blocks 现在打算减小一个G的空间。
1G占用的blocks一共是262144个,所以减少后的blocks应该是524288个。

减小FS大小:
[root@NEWLFS ~]#resize2fs /dev/lvm_vg/lv_opt 524288
resize2fs 1.35 (28-Feb-2004)
Resizing the filesystem on /dev/lvm_vg/lv_var to 524288 (1k) blocks.
The filesystem on /dev/lvm_vg/lv_var is now 524288 blocks long.
减少LV大小:
[root@NEWLFS mnt]#lvreduce -L -1G /dev/lvm_vg/lv_var
WARNING: Reducing active logical volume to 2.00 GB
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce lv_var? [y/n]: y
Reducing logical volume lv_var to 2.00 GB
Logical volume lv_var successfully resized
ok,成功缩小了1G,再重新mount上吧。

[root@NEWLFS mnt]#mount /dev/lvm_vg/lv_var lvm_var/
[root@NEWLFS mnt]#df
..........
/dev/mapper/lvm_vg-lv_var
2.0G 33M 1.9G 2% /mnt/lvm_var
[root@NEWLFS mnt]#

下面再来看看如何删除LV,VG :


删除LV:
[root@NEWLFS mnt]#umount /dev/lvm_vg/lv_opt
必须先关闭LV才可以删除它。
[root@NEWLFS mnt]#lvremove /dev/lvm_vg/lv_opt
Do you really want to remove active logical volume "lv_opt"? [y/n]: y
Logical volume "lv_opt" successfully removed
[root@NEWLFS mnt]
使用lvremove命令删除一个逻辑卷,这里删除了lv_opt.

删除VG:
首先必须确保VG中没有任何逻辑卷存在,才可以删除一个VG。
我已经使用lvremove 删除了lv_usr lv_home。
[root@NEWLFS mnt]#lvdisplay
[root@NEWLFS mnt]#
没有任何输出,说明已经没有lv了。

[root@NEWLFS mnt]#vgchange -a n lvm_vg
0 logical volume(s) in volume group "lvm_vg" now active
使用vgchange -a n 关闭了lvm_vg,然后才可以删除它。

[root@NEWLFS mnt]#vgremove lvm_vg
Volume group "lvm_vg" successfully removed
干掉了 ....世界清静了 ^_^

[root@NEWLFS mnt]#vgdisplay
[root@NEWLFS mnt]#
没有回显,说明已经没有任何VG了。

向VG中添加/删除PV :

上面已经提到了,VG可以由多个PV组成(hda1,hda3,hda5....)
可以使不相邻的分区,结合在一起使用。(和线性RAID同样的作用)

来看看如何向VG中添加PV:

因为我没有多余的物理设备来演示,所以用到了loop设备。
首先我通过
[root@NEWLFS ~]#dd if=/dev/zero of=/root/lvm bs=4096 count=32768
在/root目录下创建了一个128M的文件(/root/lvm)
然后用losetup 命令挂在了/dev/loop0上,这样我的loop0就象/dev/hdaX一样
是一个可用的块设备了。loop设备真是不错,用来做实验很好,比如试试reiserfs
raid,LVM.....练习好了,再在真实分区上实践。

看看我是怎么使用的 Smile
[root@NEWLFS ~]#losetup /dev/loop0 lvm
将刚刚建立的lvm文件挂在了/dev/loop0中,这样loop0可以象其他物理设备可以使用了。
初始化loop0 为PV:
[root@NEWLFS ~]#pvcreate /dev/loop0
Physical volume "/dev/loop0" successfully created
[root@NEWLFS ~]#

使用vgextend命令将/dev/loop0添加到lvm_vg中:
[root@NEWLFS ~]#vgextend lvm_vg /dev/loop0
Volume group "lvm_vg" successfully extended
[root@NEWLFS ~]#
成功的将/dev/loop0加入到了lvm_vg中。下面就可以创建LV啦。
[root@NEWLFS ~]#lvcreate -L 128M -n loop_lv lvm_vg /dev/loop0
Insufficient allocatable logical extents (31) for logical volume loop_lv: 32 required
加上/dev/loop0表示指定这个LV只在/dev/loop0中,可能因为LE自身占用空间,所以无法分配128M
[root@NEWLFS ~]#lvcreate -L 100M -n loop_lv lvm_vg /dev/loop0
Logical volume "loop_lv" created
[root@NEWLFS ~]#
100M就可以成功创建了,可以看出,loop_lv这个LV完全在/dev/loop0上。

删除PV:

必须确保要删除的PV中没有被任何LV使用
使用 pvdisplay /dev/loop0 查看 (假设loop0是要删除的pv)

[root@NEWLFS ~]#pvdisplay /dev/loop0
代码:
 --- Physical volume ---
  PV Name               /dev/loop0
  VG Name               lvm_vg
  PV Size               124.00 MB / not usable 0
  Allocatable           yes
  PE Size (KByte)       4096
  Total PE              31
  Free PE               31 ---->FreePE=TotalPE
  Allocated PE          0------>占用的PE为0 说明loop0上没有lv
  PV UUID               K38G8y-G6b7-81O0-SFz5-HZii-Rp6t-sHq4ou
[root@NEWLFS ~]#


如果仍然有LV使用该物理卷,可以通过 pvmove 命令转移到另一个PV上,pvmove使用方法请参考相关文档。
然后使用vgreduce命令 删除PV :

[root@NEWLFS ~]#vgreduce lvm_vg /dev/loop0
Removed "/dev/loop0" from volume group "lvm_vg"
[root@NEWLFS ~]#
成功将/dev/loop0从lvm_vg中删除,很简单吧 ^_^

系统启动时自动加载LVM分区:

修改/etc/fstab 加入LVM分区 以及挂载点,FS类型等。。。。
代码:

/dev/lvm_vg/lv_home /mnt/lvm_home reiserfs defaults 0 0
/dev/lvm_vg/lv_opt  /mnt/lvm_opt  ext3     defaults 0 0


然后需要在系统启动脚本中加入激活LVM的命令
并且必须在挂载/etc/fstab中的文件系统之前激活LVM,不然怎么挂载阿。^_^
我写在了/etc/rc.d/init.d/mountfs这个脚本中,它的作用是
在fsck检查各个分区后,将/分区及其他分区重新挂载成read-write的

/sbin/vgscan -------->需要加入的两行
/sbin/vgchange -a y


mountfs脚本主要内容是:(传递start参数)

代码:
echo "Remounting root file system in read-write mode..."
mount -n -o remount,rw /
echo "Recording existing mounts in /etc/mtab..."
                > /etc/mtab
                mount -f / || failed=1
                mount -f /proc || failed=1
                if grep -q '[[:space:]]sysfs' /proc/mounts ; then
                        mount -f /sys || failed=1
                fi
echo "Mounting remaining file systems..."
                ##############LVM##############
                /sbin/vgscan  #------->在挂载其他文件系统之前
                /sbin/vgchange -a y #---->就激活了LVM,随后就挂载上啦
                mount -a -O no_netdev #--->依照/etc/fstab挂载FS


这样系统启动时,就会激活LVM,并自动挂载上。

一篇关于LVM的文章中说,将这两条命令加在了检查文件系统脚本中,但是我加在那里
不成功,可能因为在checkfs时,系统是read-only的,而vgchange -a y
需要写入数据却无法写入,所以不行.

udev服务先于checkfs启动,并且通过mount -n -t ramfs ramfs /dev
将/dev挂载成ramfs,完全在内存中活动,无论根分区是否可写,/dev都是可写的。
莫非vgchange -a y 还要向其他位置写入数据?有待研究Smile

在其他的发行版中,如Red Hat,Mandrake中,检查根文件系统,依照/etc/fstab
挂载各个文件系统,开启SWAP分区...等等,这些都是通过/etc/rc.d/rc.sysinit完成的
而在LFS中则是将这个脚本 分成了若干的小脚本,然后逐一的运行它们。
个人认为这样可以更直观的了解系统的启动过程,方便修改。
所以在其他发行版中,激活lvm,就要写到/etc/rc.d/rc.sysinit中
并且必须要在挂载/etc/fstab中文件系统之前激活。还要注意激活时,系统是rw的。

最后我又在mountfs中添加了关闭VG的语句,这样可以
在系统关机/重启的时候自动关闭VG。

/sbin/vgchange -a n ------>添加这句

当系统关机/重启时,mountfs会依照/etc/fstab卸载所有的文件系统:
mountfs 脚本内容 : (传递stop参数)

代码:
echo "Unmounting all other currently mounted file systems..."
umount -a -d -r -t noramfs
/sbin/vgchange -a n # --->加在了这里


在卸载LV卷后,才可以关闭VG,开始我加在了umount上面一行就不行。提示仍有LV在使用。
其他发行版中,关闭VG要比激活VG容易多啦。只要加在halt/reboot这个服务脚本里就可以。
其实只要卸载文件系统后的服务脚本都可以,随你喜欢了。



阅读(1621) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~