LVM2+ReiserFS使用小记(转载)

发表于:2007-07-04来源:作者:点击数: 标签:
注:LVM现在有LVM1,LVM2两种版本,本文使用的是LVM2 什么是 LVM ? (Logical Volume Manager(逻辑卷管理)) LVM为计算机提供了更高层次的磁盘存储。 它使系统管理员可以更方便的为应用与用户分配存储空间。 在LVM管理下的存储卷可以按需要随时改变大小与移除 (
注:LVM现在有LVM1,LVM2两种版本,本文使用的是LVM2
 

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

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

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

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

使用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:
http://sources.redhat.com/lvm2/ 这里会得到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"

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

将Device mapper support 下面的全部选择,编译进核心,仍然错误。。。。
编译内核去掉CFLAGS,CXXFLAGS再编译,还是错误。。。。 莫非是整个环境问题?
换到未优化的lfs中,编译。。安装。。。。错误。。。javascript:window.open(this.src);" style="CURSOR: pointer" onload="return imgzoom(this,550)">

不甘心,换到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
          PV UUID               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
          VG UUID               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
          LV UUID                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
          LV UUID                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 !

原文转自:http://www.ltesting.net