Chinaunix首页 | 论坛 | 博客
  • 博客访问: 617356
  • 博文数量: 486
  • 博客积分: 10125
  • 博客等级: 上将
  • 技术积分: 5842
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-27 18:34
文章分类

全部博文(486)

文章存档

2011年(52)

2010年(107)

2009年(289)

2008年(38)

我的朋友

分类: LINUX

2009-09-14 23:56:46

LVM+ReiserFS v3.6.19=灵活+速度(一)





lvm真是好东东,分区-------  想怎么分就怎么分,想怎么变,随你喜欢!
本想这个东东应该很容易搞定了,不想又搞了一下午。陷在不断的编译内核
lvm程序不断的"segment fault" 估计程序错误中就这个问题比较难办了。
完全靠经验解决 (对我等菜鸟来说,就是瞎猫碰死耗子,碰上就阿弥陀佛啦)
经过一下午的 编译内核<---->创建lvm 的折磨,终于搞定了,还算走运  ^_^

注:LVM现在有LVM1,LVM2两种版本,本文使用的是LVM2

Ok, Let`s GO !

什么是 LVM ? (Logical Volume Manager(逻辑卷管理))

LVM为计算机提供了更高层次的磁盘存储。
它使系统管理员可以更方便的为应用与用户分配存储空间。
在LVM管理下的存储卷可以按需要随时改变大小与移除
(可能需对文件系统工具进行升级)。LVM也允许按用户组对存储卷进行管理,
允许管理员用更直观的名称(如"sales'、'development')代替物理磁盘名
(如'sda'、'sdb')来标识存储卷。

简单的说就是LVM管理介于物理介质(hda,md,loop)和文件系统(ReiserFS)之间
使用LVM可以灵活的管理分区,在需要时,方便的增加或减小分区的大小
不用重新"格式化",甚至不用重新启动系统,这对于服务器系统来说很实用。
对于个人用户也是分区管理的绝佳选择,例如用几十G的空间来装linux
分区是很头疼的,简单的分成 "/","SWAP" 太过草率,也不利于管理,而分出/usr
/var /opt .... 对于每个分区大小要评估的准确,不然以后使用中出现
空间不够的情况,可能就需要转移数据,重新分区,很麻烦。

而使用LVM管理,就容易多了,可以先按照当前需要分配空间,当不够用的时候再增加
而这一切只是简单的几条命令就可以完成,甚至不用重新启动就可以使用扩展后的空间了。

是不是有些神奇?  follow me ^_^

使用LVM2需要三件事:
  1. 安装device-mapper库
  2. 安装lvm2 tools
  3. 在内核中支持device-mapper
注意:以下方法仅适用于2.6.x内核,使用udev或devps管理设备文件。
2.4.x内核请详细查看device-mapper的INSTALL文件。

首先下载device-mapper库以及lvm2 tools:
这里会得到lvm2相关资源信息
ftp://sources.redhat.com/pub/dm/ 这里下载device-mapper库
ftp://sources.redhat.com/pub/lvm2/ 这里下载lvm2 tools
我使用的版本是:LVM2.0-stable.tgz  device-mapper-stable.tgz
安装device-mapper库,lvm2 tools : 
device-mapper-stable.tgz使用如下命令安装:
tar zxvf device-mapper-stable.tgz &&
cd device-mapper.1.00.21/  &&
./configure && make && make install

安装好device-mapper后安装lvm2.0-stable.tgz :
tar zxvf LVM2.0-stable.tgz &&
cd LVM2.2.00.33 &&
./configure && make install
内核中支持device-mapper : 
就是这里,害我编译内核十几次,我使用的是2.6.10-mm3支持ReiserFS 4.0的内核
Device Drivers  --->
       [*] Multiple devices driver support (RAID and LVM) ---->
                 <*>   Device mapper support 
                 < >     Crypt target support
                 < >     Snapshot target (EXPERIMENTAL)               
                 < >     Mirror target (EXPERIMENTAL)
                 < >     Zero target (EXPERIMENTAL)

只是支持了Device mapper,没有选择其他的特性。

编译安装好device-mapper lvm-tools 后,使用pvcreate,vgcreate成功的创建了
物理卷(PV),卷组(VG),当使用lvcreate创建逻辑卷(LV)时,出现了"segment fault"

首先怀疑是因为gcc的CFLAGS,CXXFLAGS(优化参数)造成的,于是unset CFLAGS CXXFLAGS
重新编译device-mapper lvm2,仍然出现错误。
难道是内核错误?重新编译内核......

将Device mapper support 下面的全部选择,编译进核心,仍然错误。。。。
编译内核去掉CFLAGS,CXXFLAGS再编译,还是错误。。。。 莫非是整个环境问题?
换到未优化的lfs中,编译。。安装。。。。错误。。。:(

不甘心,换到Mandrake 使用标准2.6.10内核,另一个.config编译,安装。。
竟然成功了!?把这个内核作为两个lfs的内核启动,竟然都正常了!
把成功的.config  拿到2.6.10-mm3中,编译。。。。安装。。。又出错了。。
难道只有在MDK环境编译出来的才可用?
不应该,没道理。  内核版本问题??
mv过来标准的2.6.10内核,编译。。。安装。。。。成功了!!
faint...竟然是2.6.10-mm3内核的问题。。。lvm+ReiserFS 4.0 是不可以了:(
所以这里我建议最好使用标准的内核,不容易出问题。。。。。。。

最终我只选择了<*>  Device mapper support  如果希望使用其他特性
比如pvmove 就要选择Mirror target的支持. 这些特性请查看相关文档. :)

编译好内核,udev/devps就应该会根据/proc/misc中的"Num device-mapper"
在/dev/下 建立mapper目录,并且在目录中建立control这个字符设备。
其设备号由Num决定,如:我的/proc/misc中是:63 device-mapper
则control应该为:
crw-------  1 root root 10, 63 2005-02-10 09:22 /dev/mapper/control

如果你没有这个control就需要手动建立一个:
[root@NEWLFS ~]#cat /proc/misc | grep device-mapper | awk '{print }'
得到control的设备号,我的是63.
[root@NEWLFS ~]#mkdir /dev/mapper
[root@NEWLFS ~]#mknod /dev/mapper/control c 10 设备号
基本使用udev/devps管理设备,都会自动建立好这些的。
现在已经编译好了内核,安装好了device-mapper lvm2,一切准备就绪,开始动工:)

先说一下几个需要知道的概念:

来看看LVM的组成:

 hda1   hdc1      (PV:s on partitions or whole disks) 

       \   /                                          

        \ /                                     

       diskvg        (VG)                           

       /  |  \                                    

      /   |   \                                                                 

  usrlv rootlv varlv (LV:s)

    |      |     |                                                              

 ext2  reiserfs  xfs (filesystems) 
PV (Physical Volume物理卷):
物理卷可以是整个硬盘(hda),也可以是某个分区(hda1),md(software raid),loop设备....
VG (Volume Group 卷组):
卷组是LVM中最高抽象层,是由一个或多个物理卷所组成的存储器池。

从图中可以看出,卷组是由一个或几个物理卷组成然后分支成若干个LV.
LV (Logical Volume 逻辑卷):
逻辑卷相当于非LVM系统中的分区,它在卷组上建立
是一个标准的块设备,可以在其上建立文件系统。

+-- Volume Group --------------------------------+

|                                                |

|    +----------------------------------------+ |

| PV | PE |  PE | PE | PE | PE | PE | PE | PE | |

|    +----------------------------------------+ |

|      .         .         .       .        |

|      .          .         .        .         |

|    +----------------------------------------+ |

| LV | LE |  LE | LE | LE | LE | LE | LE | LE | |

|    +----------------------------------------+ |

|            .          .        .        .     |

|            .         .        .        .     |

|    +----------------------------------------+ |

| PV | PE |  PE | PE | PE | PE | PE | PE | PE | |

|    +----------------------------------------+ |

|                                                |

+------------------------------------------------+

PE (Physical Extent物理块):
物理卷按大小相等的"块"为单位存储,块的大小与卷组中逻辑卷块的大小相同。
LE (Logical Extent 逻辑块):
逻辑卷按"块"为单位存储,在一卷组中的所有逻辑卷的块大小是相同的。

OK,基本概念已经了解了,使用lvm基本流程就是:
 
初始化物理卷---> 创建卷组,将PV加入到卷组中--->创建逻辑卷---->创建文件系统
1. 初始化物理卷 :
在初始化物理卷之前,我已经清空了/dev/hda5,并且标识分区类型为83(linux分区)
在LVM1中,必须将分区类型标识为8E(LVM分区)才可以使用,lvm2中没有这个限制。

在创建之前,先修改下/etc/lvm/lvm.conf :
# Exclude the cdrom drive
     filter = [ "r|/dev/cdrom|" ]
找到上面两行,将filter前面的#去掉,这样创建LV时就不会搜寻/dev/cdrom了。
不然也很烦,总是提示/dev/cdrom错误。修改好后,执行vgscan命令使生效.
[root@NEWLFS LVM2.2.00.33]#vgscan

使用pvcreate PV1 [PV2.....] 创建物理卷:

[root@NEWLFS mnt]#pvcreate /dev/hda5
Physical volume "/dev/hda5" successfully created
[root@NEWLFS mnt]#

使用 pvdisplay 查看PV详细信息:

[root@NEWLFS mnt]#pvdisplay
  --- Physical volume ---
  PV Name               /dev/hda5
  VG Name               lvm_vg
  PV Size               20.85 GB / not usable 0
  Allocatable           yes
  PE Size (KByte)       4096
  Total PE              5338
  Free PE               4076
  Allocated PE          1262
  PVUUID              y5LlEs-iBIY-t3PU-gTaT-ZIUt-iDmE-b9J9aC

[root@NEWLFS mnt]#

2.创建卷组,并将PV加入到卷组中:

使用vgcreate  VGNAME PV1 [PV2......]创建卷组

[root@NEWLFS mnt]#vgcreate lvm_vg /dev/hda5
  Volume group "lvm_vg" successfully created
[root@NEWLFS mnt]#

使用vgdisplay 查看VG详细信息:

[root@NEWLFS mnt]#vgdisplay
  --- Volume group ---
  VG Name               lvm_vg
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  3
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                2
  Open LV               0
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               20.85 GB
  PE Size               4.00 MB
  Total PE              5338
  Alloc PE / Size       1262 / 4.93 GB
  Free  PE / Size       4076 / 15.92 GB
  VGUUID              TFjqOG-5aHq-6SUz-q96N-Lu20-GrrP-Qvh2WM

[root@NEWLFS mnt]#

当重新启动或执行vgchange -a n 后,需要重新激活VG,才可以访问VG,LV

[root@NEWLFS mnt]#vgchange -a y lvm_vg
  1 logical volume(s) in volume group "lvm_vg" now active
[root@NEWLFS mnt]#

当关机或不再使用VG时,使用 vgchage -a n VGNAME 使VG不可用。
 
[root@NEWLFS mnt]#vgchange -a n lvm_vg
  0 logical volume(s) in volume group "lvm_vg" now active
[root@NEWLFS mnt]#

3. 创建逻辑卷:

使用lvcreate -L Size -n NAME VGNAME 创建逻辑卷:

[root@NEWLFS ~]#lvcreate -L 2G -n lv_home lvm_vg
  Logical volume "lv_home" created
[root@NEWLFS ~]#

使用lvdisplay 查看LV详细信息:

[root@NEWLFS mnt]#lvdisplay
  --- Logical volume ---
  LV Name                /dev/lvm_vg/lv_usr
  VG Name                lvm_vg
  LVUUID               zrpaw1-vMdI-KvT2-4XlA-2TxZ-4iV8-38fN88
  LV Write Access        read/write
  LV Status              NOT available
  LV Size                2.93 GB
  Current LE             750
  Segments               1
  Allocation             inherit
  Read ahead sectors     0

  --- Logical volume ---
  LV Name                /dev/lvm_vg/lv_home
  VG Name                lvm_vg
  LVUUID               spGvLc-8lOM-CgAi-8XvI-E5Jt-xCce-l4B54K
  LV Write Access        read/write
  LV Status              available
  # open                 0
  LV Size                2.00 GB
  Current LE             512
  Segments               1
  Allocation             inherit
  Read ahead sectors     0
  Block device           253:0

[root@NEWLFS mnt]#
由于我之前已经创建了一个lv_usr 所以这里显示两个LV 
          
最后一步,创建文件系统。这里我使用ReiserFS 3.6.19 :
[root@NEWLFS mnt]#mkreiserfs /dev/lvm_vg/lv_home
..........略
Continue (y/n):y
Initializing journal - 0%....20%....40%....60%....80%....100%
Syncing..ok

Tell your friends to use a kernel based on 2.4.18 or later,
and especially not a
kernel based on 2.4.9, when you use reiserFS. Have fun.

ReiserFS is successfully created on /dev/lvm_vg/lv_home.
[root@NEWLFS mnt]#

创建挂载点,挂载它:
[root@NEWLFS mnt]#mkdir lvm_usr lvm_home
[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/hda8             99M   18M   76M  20% /boot
/dev/hda10            6.7G  2.9G  3.4G  46% /mnt/mdk
/dev/mapper/lvm_vg-lv_home
                     2.0G   33M  2.0G   2% /mnt/lvm_home
[root@NEWLFS mnt]#

OK,现在已经成功的创建好了逻辑卷,并且使用了ReiserFS,可以投入使用啦。
下一部分说一下 如何管理LVM
Have Fun ! ^_^
阅读(318) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~