welcome to 's blog...


公告

我的分类(专题)

日志更新

最新评论

留言板

链接

搜索


Blog信息




LVM From CU
aku1 发表于 2009-2-26 11:56:38

103☆LVM
LVM 是Logical Volume Manager( 逻辑卷管理)的简写,它由Heinz Mauelshagen 在Linux 2.4 内核上实现
LVM 的结构hda1 hdc1 sdc (PV:s 物理卷,一般为分区或整个硬盘) \ | / \ | /     diskvg (VG 卷组由物理卷组成) / | \ / | \ usrlv rootlv varlv (LV:s 逻辑卷在卷组上创建) | | | ext2 reiserfs xfs ( 建立在逻辑卷上的文件系统)
物理块physical extent (PE) 物理卷按大小相等的"块"为单位存储,块的大小与卷组中逻辑卷块的大小相同。
逻辑块logical extent (LE) 逻辑卷按"块"为单位存储,在一卷组中的所有逻辑卷的块大小是相同的。
物理卷physical volume (PV) 典型的物理卷是硬盘分区,但也可以是整个硬盘或已创建的Software RAID 卷。
卷组volume group (VG) 卷组是LVM 中最高抽象层,是由一个或多个物理卷所组成的存储器池。
逻辑卷logical volume (LV) 逻辑卷相当于非LVM 系统中的分区,它在卷组上建立,是一个标准的块设备,可以在其上建立文件系统。
一个物理卷,包含了许多物理分区:
+-----[ Physical Volume ]------+
| PE | PE | PE | PE | PE | PE |
+------------------------------+
一个卷组,包含了2 个物理卷(PV)有6 个物理分区:
+------[ Volume Group ]-----------------+
| +--[PV]--------+ +--[PV]---------+
| | | PE | PE | PE | | PE | PE | PE | |
| +--------------+ +---------------+ |
+---------------------------------------+
我们现在做更进一步扩展:
+------[ Volume Group ]-----------------+
| +--[PV]--------+ +--[PV]---------+ |
| | PE | PE | PE | | PE | PE | PE | |
| +--+---+---+---+ +-+----+--+----+ |
| |Logical Volume| |Logical Volume| |
||/home        ||/var         ||
| +--------------+ +--------------+ |
+---------------------------------------+
映射模式 (linear/striped) 在建立逻辑卷时,可以选择逻辑块与物理块映射的策略:
1.线性映射-将把一定范围的物理块按顺序分配给逻辑卷,如 LV 的LE 1 - 99 映射到PV1,LE 100
- 347 映射到PV2。
2.交错模式-将把逻辑块交错映射到不同的物理卷中,如 LV 的LE 1 映射为PV1 的PE1,LE 2 映射为PV2 的PE1,LE 3 映射为PV1 的PE2...。这种方式可以提高逻辑卷的性能,但是采用这种方式建立的逻辑卷将不能在它们所在的物理卷中扩展。
Snapshots (快照) LVM 提供了一个非常好的特性:snapshots。它允许管理员建立一个块设备:该设备是一逻辑卷在某一时刻冻结的精确拷贝。这个特性通常用于批处理过程(如备份)需要处理逻辑卷,但又不能停止系统。当操作完成时,snapshot 设备可以被移除。这个特性要求在建立snapshot 设备时逻辑卷处于相容状态。
104☆LVM 建立PV
PV 初始化命令pvcreate 的一般用法为: pvcreate PV1 [ PV2 ... ] 它的参数可以是整个磁盘、分区,也可以是一loop 设备。
为把一个磁盘或分区作为PV,首先应使用 pvcreate 对其初始化,如对IDE 硬盘/dev/hdb,
使用整个磁盘,
# pvcreate /dev/hdb 这将在磁盘上建立VG 的描述符。先用fdisk 分区
使用磁盘分区,如/dev/hdb1。使用fdisk 的t 命令把/dev/hda1 的分区类型设为0x8e,然后运行: # pvcreate /dev/hdb1 这将在分区/dev/hda1 上建立VG 的描述符。pvcreate 在每个硬盘的起始端建立卷组描述区( volume group descriptor area, VGDA) 。
105☆LVM 建立VG
VG 初始化命令vgcreate 的一般用法为: # vgcreate [options] VG_NAME PV1 [PV2 ...] 其中的可选项包括设置VG 最大支持的LV 数、PE 大小(缺省为4MB)等。
在使用pvcreate 建立了PV 后,可以用vgcreate 建立卷组,如有PV1、PV2 分别是/dev/hda1 与/dev/hdb1,使用# vgcreate testvg /dev/sdb1 /dev/sdc 将建立一个名为testvg 的卷组,它由两个PV:/dev/hda1 与/dev/hdb1 组成。
注意:当使用devfs 系统时,应使用设备的全名而不能是Symbol Link ,如对上例应为: # vgcreate testvg /dev/ide/host0/bus0/target0/lun0/part1 /dev/ide/host0/bus0/target1/lun0/part1
106☆LVM 激活VG
激活卷组命令vgchange 可用来设置VG 的一些参数vgchange -a [y|n] test_vg 如是否可用( -a [y|n]选项)、支持最大逻辑卷数等。
在被激活之前,VG 与LV 是无法访问的,这时可用命令: # vgchange -a y testvg 激活所要使用的卷组。当不再使用VG 时,可用# vgchange -a n testvg 使之不再可用。对卷组的操作都应该先休眠卷组
107☆LVM 移除VG
在移除一卷组前应确认卷组中不再有逻辑卷LV,首先休眠卷组: # vgchange -a n testvg 然后可用vgremove 移除该卷组: # vgremove testvg
108☆LVM 为VG 增加PV
当卷组空间不足时,可以加入新的物理卷来扩大容量,这时可用命令vgextend,如# vgextend testvg /dev/sdb5 其中/dev/hdc1 是新的PV,当然在这之前,它应使用pvcreate 初始化。
109☆LVM 从VG 移除PV
在移除PV 之前,应确认该PV 没用被LV 使用,这可用命令pvdisplay 查看,如: # pvdisplay /dev/hda1 --- Physical volume --- PV Name /dev/hda1 VG Name testvg PV Size 1.95 GB / NOT usable 4 MB [LVM: 122 KB] PV# 1 PV Status available Allocatable yes (but full) Cur LV 1 PE Size (KByte) 4096 Total PE 499 Free PE 0 Allocated PE 499 PV UUID Sd44tK-9IRw-SrMC-MOkn-76iP-iftz-OVSen7
注意观察"Allocated PE"这一项,为0 代表没有被lv 使用如这个PV 仍在被使用,则应把数据传移到其它PV 上。在确认它未被使用后,可用命令vgreduce 把它从VG 中删除,如: # vgreduce testvg /dev/sdb5
110☆LVM 在PV 间转移数据
若要把一个PV 从VG 中移除,应首先把其上所有活动PE 中的数据转移到其它PV 上,而新的PV 必须是本VG 的一部分,有足够的空间。如要把PV1:/dev/hda1 上的数据移到PV2:/dev/sda1 上可用命令: # pvmove /dev/sdb1 /dev/sdc 如果在该PV 之上的LV 采用交错方式存放,则这个转移过程不能被打断。建议在转移数据之前备份LV 中的数据。
111☆LVM 创建LV
命令lvcreate 的常用方法: lvcreate [options] -n 逻辑卷名卷组名[PV1 ... ] 其中的常用可选项有: "-i Stripes :采用交错(striped)方式创建LV,其中Stripes 指卷组中PV 的数量。注意:如果使用 -i2参数,则LV 将仅使用test_vg 中的两块硬盘。"-I Stripe_size :采用交错方式时采用的块大小(单位为KB),Stripe_size 必须为2 的指数:2N ,N=2,3...9。
"-l LEs :指定LV 的逻辑块数。"-L size :指定LV 的大小,其后可以用K、M、G 表示KB、MB、GB。"-s :创建一已存在LV 的snapshot 卷。"-n name : 为LV 指定名称。在刚创建VG 时dev 中不会出现以VG 名为名的文件夹,但是当创建了LV 以后,则会出现,并且在文件夹中有一个以LV 名命名的文件
在创建逻辑卷前,应决定LV 使用哪些PV,这可用命令vgdisplay 与pvdisplay 查看当前卷组与PV 的使用情况。在已有的卷组上创建逻辑卷使用命令lvcreate,如: # lvcreate -L1500 -n testlv testvg 将在卷组testvg 上建立一个1500MB 的线性LV,其命名为testlv,对应的块设备为/dev/testvg/testlv 。# lvcreate -i2 -I4 -l100 -n anothertestlv testvg 将在卷组testvg 上建立名为anothertestlv 的LV,其大小为100LE,采用交错方式存放,交错值为2(2 个pv 上),块大小为4KB。
如果需要LV 使用整个VG,可首先用vgdisplay 查找 Total PE 值,然后在运行lvcreate 时指定,如: # vgdisplay testvg | grep "Total PE" Total PE 10230 # lvcreate -l 10230 testvg -n testlv 将使用卷组testvg 的全部空间创建逻辑卷testvg。
在创建逻辑卷后,就可在其上创建文件系统并使用它。逻辑卷上创建文件系统:mkreiserfs /dev/test_vg/testlv
这个设备是个连接
/dev/vg01/lv01 -> /dev/mapper/vg01-lv01
 
112 ☆LVM 删除LV
为删除一个逻辑卷,必须首先从系统卸载其上的文件系统,然后可用lvremove 删除,如: # umount /dev/testvg/testlv # lvremove /dev/testvg/testlv #必须指定全路径lvremove -- do you really want to remove "/dev/testvg/testlv"? [y/n]: y lvremove -- doing automatic backup of volume group "testvg" lvremove -- logical volume "/dev/testvg/testlv" successfully removed
113 ☆LVM 扩展LV
为逻辑卷增加容量可用使用lvextend,即可以指定要增加的尺寸也可以指定扩容后的尺寸,如# lvextend -L12G /dev/testvg/testlv # 必须全路径lvextend -- extending logical volume "/dev/testvg/testlv" to 12 GB lvextend -- doing automatic backup of volume group "testvg" lvextend -- logical volume "/dev/testvg/testlv" successfully extended
将扩大逻辑卷testlv 的容量为12GB。# lvextend -L+1G /dev/testvg/testlv lvextend -- extending logical volume "/dev/testvg/testlv" to 13 GB lvextend -- doing automatic backup of volume group "testvg" lvextend -- logical volume "/dev/testvg/testlv" successfully extended 将为LV testlv 再增大容量1GB 至13GB。
为LV 扩容的一个前提是:LV 所在的VG 有足够的空闲存储空间可用。在为LV 扩容之后,应同时为LV 之上的文件系统扩容,使二者相匹配。对不同的文件系统有相对应的扩容方法。
(推荐使用工具) ext2online device size (MmKG) ext2online 工具被添加用来在线地扩大已存在的 ext3 文件系统。备注需要注意的是,ext2online 并不能扩大它所在的块设备本身 . 一定要有足够的未被使用的空间在这个设备上。最简单的方法是使用 LVM 卷并运行 lvresize 或 lvextend 来扩展这个设备。[root@client ~]# lvextend -L +5M /dev/testvg/testlv 先扩大LV [root@client ~]# df -h /data
大小没有变化[root@client ~]# ext2online -d -v /dev/testvg/testlv #不用umount 再扩大文件系统,不用umount [root@client ~]# df -h /data 在你lvextend -L +xxxM 之后df -Th /mountpoint 看一下还是以前的大小然后ext2online -d -v /dev/testvg/testlv 就能使文件系统扩大了,不用umount
ext3 扩展文件系统(旧版本方法) 除非内核已有ext2online 补丁,否则在改变ext2/ext3 文件系统的大小时应卸载它: # umount /dev/testvg/testlv # resize2fs /dev/testvg/testlv # mount /dev/testvg/testlv /home 这里假设testlv 安装点为/home 。在es2fsprogs-1.19 或以上版本中包含resize2fs 命令。
reiserfs 文件系统方法与ext2 不同,Reiserfs 不必卸载文件系统,如: # resize_reiserfs -f /dev/testvg/testvl 可以在拷贝数据的同时增加减少空间相关命令:lvremove .lvextend,lvreduce .resize2fs resize_reiserfs
xfs 文件系统方法SGI XFS 文件系统必须在安装的情况下才可改变大小,并且要使用安装点而不是块设备,如: # xfs_growfs /home
114☆LVM 缩小LV 逻辑卷可扩展同样也可缩小,但应在缩小LV 之前首先减小文件系统,否则将可能导致数据丢失。
umount 要减小的LV 的步骤用ext2resize 减小一个LV 上的文件系统的大小用lvreduce 减小LV 的大小之后再mount,df -Th 看到生效(没有丢失数据)
ext2/ext3 可以使用LVM 的工具e2fsadm 操作(旧版本中),如: # umount /home # e2fsadm -L-1G /dev/testvg/testvl # mount /home 如果采用resize2fs,就必须知道缩少后卷的块数: # umount /home # resize2fs /dev/testvg/testvl 524288 # lvreduce -L-1G /dev/testvg/testvl # mount /home
reiserfs 在缩小reiserfs 时,应首先卸载它,如: # umount /home # resize_reiserfs -s-1G /dev/testvg/testvl # lvreduce -L-1G /dev/testvg/testvl # mount -treiserfs /dev/testvg/testvl /home
xfs
无法实现。
115☆e2fsadm
在LVM 发行包中有一个称为e2fsadm 的工具(旧版本),它同时包含了lvextend 与resize2fs 的功能,如: # e2fsadm -L+1G /dev/testvg/testlv 等价于下面两条命令: # lvextend -L+1G /dev/testvg/testlv
# resize2fs /dev/testvg/testlv
但用户仍需首先卸载文件系统。
116☆LVM 的快照
使用snapshot 做备份例如我们要对卷组"test_vg"每晚进行数据库备份,就要采用snapshot 类型的卷组。这种卷组是其它卷组的一个只读拷贝,它含有在创建snapshot 卷组时原卷组的所有数据,这意味你可以备份这个卷组而不用担心在备份过程中数据会改变,也不需要暂时关闭数据库卷以备份。
建立snapshot 卷一个snapshot 卷可大可小,但必须有足够的空间存放所有在本snapshot 卷生存期间改变的数据,一般最大要求是原卷组的1.1 倍。如空间不够,snapshot 卷将不能使用。# lvcreate -L592M -s -n dbbackup /dev/testvg/testlv #必须有快照盘"testlv",对哪个生成快照#针对某一个lv 的,创建的时候产生快照lvcreate -- WARNING: the snapshot must be disabled if it gets full lvcreate -- INFO: using default snapshot chunk size of 64 KB for "/dev/test_vg/dbbackup" lvcreate -- doing automatic backup of "test_vg" lvcreate -- logical volume "/dev/test_vg/dbbackup" successfully created
安装snapshot 卷现在可以安装该卷: # mkdir /mnt/test_vg/dbbackup # mount /dev/test_vg/dbbackup /mnt/test_vg/dbbackup mount: block device /dev/test_vg/dbbackup is write-protected, mounting read-only 从上面可以看出,snapshot 卷是只读的。当使用XFS 文件系统时,mount 命令要使用nouuid 与norecovery 选项: # mount /dev/test_vg/dbbackup /mnt/test_vg/dbbackup -o nouuid,norecovery,ro
备份snapshot 卷如采用tar 向磁带备份: # tar -cf /dev/rmt0 /mnt/test_vg/dbbackup
删除snapshot 卷在完成备份后,就可卸载并删除snapshot 卷。# umount /mnt/test_vg/dbbackup # lvremove /dev/test_vg/dbbackup lvremove -- do you really want to remove "/dev/test_vg/dbbackup"? [y/n]: y lvremove -- doing automatic backup of volume group "test_vg" lvremove -- logical volume "/dev/test_vg/dbbackup" successfully removed
117☆LVM 更换卷组硬盘
更换卷组硬盘由于某种原因,需要用新的硬盘替代卷组中的旧硬盘,如用一SCSI 硬盘替换IDE 硬盘,其步骤为:
准备/初始化新硬盘首先用pvcreate 命令初始化新的硬盘,如使用整个硬盘: # pvcreate /dev/sdf pvcreate -- physical volume "/dev/sdf" successfully created
加入卷组把新硬盘加入卷组: # vgextend test_vg /dev/sdf vgextend -- INFO: maximum logical volume size is 255.99 Gigabyte vgextend -- doing automatic backup of volume group "test_vg" vgextend -- volume group "test_vg" successfully extended
数据搬家在移除旧硬盘前,要把其上的数据转移到新硬盘上。在转移数据时,不要求卸载文件系统,但建议在数据转移前进行备份,以防转移进程中意外导致数据丢失。pvmove 用来实现数据转移,根据数据量的多少,它可能要使用大量的时间,并可降低逻辑卷的性能,因此要在系统不太忙时操作。
# pvmove /dev/hdb /dev/sdf pvmove -- moving physical extents in active volume group "test_vg" pvmove -- WARNING: moving of active logical volumes may cause data loss! pvmove -- do you want to continue? [y/n] y pvmove -- 249 extents of physical volume "/dev/hdb" successfully moved
移除未用硬盘当数据被转移到其它硬盘后,就可以从卷组中删除这块不再使用的硬盘: # vgreduce dev /dev/hdb vgreduce -- doing automatic backup of volume group "test_vg" vgreduce -- volume group "test_vg" successfully reduced by physical volume: vgreduce -- /dev/hdb 从此,卷组test_vg 不再使用IDE 硬盘/dev/hdb,这块硬盘可以从机器中拆下或用作它途。
118☆LVM 迁移卷组把一个卷组转移到其它系统是很容易的(如更换服务器),这要用命令vgexport 与vgimport 。
卸载文件系统
为整体搬迁卷组,应首先把它从文件系统中卸载,如: # unmount /mnt/design/users
设置卷组为非活动状态把卷组从内核中卸载,以避免任何对它可能的操作: # vgchange -a n test_vg vgchange -- volume group "test_vg" successfully deactivated
Export 卷组这个操作不是必须的,便它可以防止系统对卷组的访问: # vgexport test_vg vgexport -- volume group "test_vg" sucessfully exported
当机器关机后,构成卷组的硬盘就可被转移到新的服务器上。
Import 卷组在新的服务器上,可用pvscan 查看卷组情况,如在这台计算机上,硬盘新的设备为/dev/sdb,使用pvscan 可有: # pvscan pvscan -- reading all physical volumes (this may take a while...) pvscan -- inactive PV "/dev/sdb1" is in EXPORTED VG "test_vg" [996 MB / 996 MB free] pvscan -- inactive PV "/dev/sdb2" is in EXPORTED VG "test_vg" [996 MB / 244 MB free] pvscan -- total: 2 [1.95 GB] / in use: 2 [1.95 GB] / in no VG: 0 [0] 现可以import 卷组test_vg (同时也激活它)以安装其上的文件系统# vgimport test_vg /dev/sdb1 /dev/sdb2 vgimport -- doing automatic backup of volume group "test_vg" vgimport -- volume group "test_vg" successfully imported and activated
安装文件系统
# mkdir -p /mnt/design/users # mount /dev/test_vg/users /mnt/design/users
在完成以上操作后,原卷组在新的服务器上就可使用了。
119☆LVM 分割卷组
这种情况是:需要在系统中加入新的卷组,但没有其它可用新硬盘,而已有的卷组中还有大量空间可用。如向系统加入一个"design"卷组。
检查可用空间
# pvscan
pvscan -- reading all physical volumes (this may take a while...)
pvscan -- ACTIVE PV "/dev/sda" of VG "dev" [1.95 GB / 0 free]
pvscan -- ACTIVE PV "/dev/sdb" of VG "sales" [1.95 GB / 1.27 GB free]

pvscan -- ACTIVE PV "/dev/sdc" of VG "ops" [1.95 GB / 564 MB free] pvscan -- ACTIVE PV "/dev/sdd" of VG "dev" [1.95 GB / 0 free] pvscan -- ACTIVE PV "/dev/sde" of VG "ops" [1.95 GB / 1.9 GB free] pvscan -- ACTIVE PV "/dev/sdf" of VG "dev" [1.95 GB / 1.33 GB free] pvscan -- ACTIVE PV "/dev/sdg1" of VG "ops" [996 MB / 432 MB free] pvscan -- ACTIVE PV "/dev/sdg2" of VG "dev" [996 MB / 632 MB free] pvscan -- total: 8 [13.67 GB] / in use: 8 [13.67 GB] / in no VG: 0 [0] 我们决定把/dev/sdg1 与/dev/sdg2 分配组design,但首先要把其上的物理块移到其它卷的空闲空间中(如把卷组dev 移到/dev/sdf,卷组ops 移到/dev/sde)。
从选定硬盘移出数据由于硬盘上的逻辑卷仍在使用,故首先要转移它们的数据。把所有在使用的物理块从/dev/sdg1 上转移到/dev/sde,及从/dev/sdg2 转移到/dev/sdf。# pvmove /dev/sdg1 /dev/sde pvmove -- moving physical extents in active volume group "ops" pvmove -- WARNING: moving of active logical volumes may cause data loss! pvmove -- do you want to continue? [y/n] y pvmove -- doing automatic backup of volume group "ops" pvmove -- 141 extents of physical volume "/dev/sdg1" successfully moved
# pvmove /dev/sdg2 /dev/sdf pvmove -- moving physical extents in active volume group "dev" pvmove -- WARNING: moving of active logical volumes may cause data loss! pvmove -- do you want to continue? [y/n] y pvmove -- doing automatic backup of volume group "dev" pvmove -- 91 extents of physical volume "/dev/sdg2" successfully moved
创建新卷组现在把/dev/sdg2 从卷组dev 从分割出并加入到新卷组design 中。我们可用vgreduce 与vgcreate 完成工作,但vgsplit 此时更方便: # vgsplit dev design /dev/sdg2 vgsplit -- doing automatic backup of volume group "dev" vgsplit -- doing automatic backup of volume group "design" vgsplit -- volume group "dev" successfully split into "dev" and "design"
移除剩余的卷接下来的工作把/dev/sdg1 从卷组ops 中分出并加入卷组design: # vgreduce ops /dev/sdg1 vgreduce -- doing automatic backup of volume group "ops" vgreduce -- volume group "ops" successfully reduced by physical volume: vgreduce -- /dev/sdg1
# vgextend design /dev/sdg1 vgextend -- INFO: maximum logical volume size is 255.99 Gigabyte vgextend -- doing automatic backup of volume group "design" vgextend -- volume group "design" successfully extended
建立新逻辑卷及文件系统在卷组design 上建立逻辑卷,为今后的方便,现只使用一部分空间: # lvcreate -L750M -n users design lvcreate -- rounding up size to physical extent boundary "752 MB" lvcreate -- doing automatic backup of "design" lvcreate -- logical volume "/dev/design/users" successfully created
# mke2fs /dev/design/users mke2fs 1.18, 11-Nov-1999 for EXT2 FS 0.5b, 95/08/09 Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) 96384 inodes, 192512 blocks 9625 blocks (5.00<!-- ) reserved for the super user First data block=0 6 block groups 32768 blocks per group, 32768 fragments per group 16064 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840
Writing inode tables: done Writing superblocks and filesystem accounting information: done
# mkdir -p /mnt/design/users # mount /dev/design/users /mnt/design/users/ 现在就可使用卷组design。为方便使用,可把下面一行加入文件/etc/fstab 中: /dev/design/user /mnt/design/users ext2 defaults 1 2
120 ☆LVM 转变根文件系统为LVM
注意:强烈要求在进行下面的操作前对系统进行备份,并且把/文件系统建立在LVM 上会导致系统升级很复杂。在下面的例子中,系统除了/boot 外都安装在同一个分区中,文件系统的情况为: /dev/hda1 /boot /dev/hda2 swap
/dev/hda3 / 进行转换的一个必要条件是硬盘上还有足够的空间给分区/dev/hda4 创立LVM 并把/分区的内容都复制到LVM 上,否则:
1./分区还有至少一半空间空闲,可以缩减/分区,并把分出的空间划分到分区/dev/hda4;

2.硬盘上已无足够空间,必须使用第二块硬盘,如/dev/hdb。在完成以上准备及备份系统后,可继续以下步骤:

1.确认使用的Linux 内核支持LVM,并且在编译时设置了CONFIG BLK DEV RAM 与 CONFIGBLK DEV INITRD 。

2.设置/dev/hda4 分区类型为LVM(8e): # fdisk /dev/hda Command (m for help): t Partition number (1-4): 4 Hex code (type L to list codes): 8e Changed system type of partition 4 to 8e (Unknown) Command (m for help): w

3.设置LVM: "初始化LVM (vgscan) # vgscan "转变分区为PV: # pvcreate /dev/hda4 "建立卷组: # vgcreate vg /dev/hda4 "建立逻辑卷用以存放根系统这里假设空间为250MB) # lvcreate -L250M root vg

4.在逻辑卷上建立文件系统并把系统复制到其上: # mke2fs /dev/vg/root # mount /dev/vg/root /mnt/ # find / -xdev | cpio -pvmd /mnt

5.修改新系统的fstab 文件/mnt/etc/fstab ,使/安装到/dev/vg/root: /dev/hda3 / ext2 defaults 1 1 改变为: /dev/vg/root / ext2 defaults 1 1

6.创建LVM 初始化RAM 盘: # lvmcreate_initrd 此处要确认为lvmcreate_init 给出正确的initrd image 文件名,它应在/boot/ 目录下。

7. 在/etc/lilo.conf 中为LVM 加入新入口项,其形式如下: image = /boot/KERNEL_IMAGE_NAME label = lvmroot = /dev/vg/root initrd = /boot/INITRD_IMAGE_NAME ramdisk = 8192


此处 KERNEL IMAGE NAME 是支持LVM 的内核,INITRD IMAGE NAME 指由lvmcreate_initrd建立的initrd image 。如果LVM 的配置很多,可以把ramdisk 设置的大一些:此处为8192,缺省为4096。在lvmcrate_initrd 的输出中有如下一行: lvmcreate_initrd -- making loopback file (6189 kB)
其中括号中的数值为实际所需大小。
8.运行LILO,设置BOOT 扇区: # lilo

9.重启计算机,在LILO 提示符处输入"lvm" 启动计算机,此时系统的根文件系统是新建立的逻辑卷。此后可在LILO 配置文件/etc/lilo.conf 中加入以下一行: default=lvm 并运行lilo 设置缺省启动项为lvm。如果系统未能正常启动,可能的原因是内核不支持LVM、initrd image 不正确等等。

10.在正常启动后,就可把硬盘其它分区:/dev/hda3 加入LVM。"首先设置分区类型为 8e(LVM) # fdisk /dev/hda Command (m for help): t Partition number (1-4): 3 Hex code (type L to list codes): 8e Changed system type of partition 3 to 8e (Unknown) Command (m for help): w "把它初始化为PV,并加入卷组中: # pvcreate /dev/hda3 # vgextend vg /dev/hda3
121☆LVM 共享LVM 卷
LVM 不支持物理共享访问,这会导致数据的丢失。在使用fibre-channel 或shared-SCSI 的环境中,多台计算机以物理方式直接访问一组硬盘,于是可以使用LVM 把这些硬盘分为不同的逻辑卷。如果需要共享数据,则应使用GFS。
122☆LVM 系统启动/关闭
"为使系统启动时可自动激活并使用LVM,可将以下几行添加到启动 rc 脚本中: /sbin/vgscan /sbin/vgchange -a y
这些行将浏览所有可用的卷组并激活它们。要注意的是,它们应在安装卷组上的文件系统操作之前被执行,否则将无法正常安装文件系统。"在系统关机时,要关闭LVM,这可将以下这行添加到关机 rc 脚本中,并确保它在卸装了所有文件系统后执行: /sbin/vgchange -a n
123☆LVM 磁盘分配策略
一个磁盘上的多个分区LVM 允许PV 建立在几乎所有块设备上,如整个硬盘、硬盘分区、Soft RAID: # pvcreate /dev/sda1 # pvcreate /dev/sdf # pvcreate /dev/hda8 # pvcreate /dev/hda6 # pvcreate /dev/md1 所以在一块硬盘上可以有多个PV/分区,但一般建议一块硬盘上只有一个PV: "便于管理,易于处理错误"避免交错方式中性能下降。LVM 不能辨别两个PV 是否在同一硬盘上,故当采用交错方式时,会导致性能更差。但在某些情况下可采用: "把已存在的系统合并到LVM 中。在一个只有少数硬盘的系统中,转换为LVM 时需在在各分区之间转移数据。"把一个大硬盘分给不同的VG 使用。当一个VG 的有不同的PV 在同一硬盘时,创建交错方式的LV 时应注意使用哪一个PV。
Sun disk labels 仅在SUN 的SPARC 系统中有此问题。
124☆lvm 实验安装需求(requirements) :检查系统是否安了lvm 的module
1. lsmod | grep -i lvm

2. modprobe lvm-mod 3.apt-get install lvm* lvm-common evms-lvmutils


或者
rpm -q lvm , rpm -ivh lvm-xxxx.rpm with redhat
准备虚拟硬盘prepare a fake disk 感谢linux lvm 支持loopback (loop device),才让我们有机会建立lvm 下的虚拟硬盘,就跟真硬盘一样用
1. dd if=/dev/zero of=lvm0.iso count=5000

2. dd if=/dev/zero of=lvm1.iso count=5000

3. dd if=/dev/zero of=lvm2.iso count=5000

4. dd if=/dev/zero of=lvm3.iso count=5000


5.losetup /dev/loop0 lvm0.iso 6.losetup /dev/loop1 lvm1.iso 7.losetup /dev/loop2 lvm2.iso
8.losetup /dev/loop3 lvm3.iso
好了,我们这里建立了可用的虚拟硬盘了,要删除这样的硬盘:
losetup -d /dev/loopX
下面我们建立几个物理卷(?) Physical Volume ( 对不起,我不知中文是怎么翻译的)
1. vgscan

2. pvcreate /dev/loop0

3. pvcreate /dev/loop1

4. pvcreate /dev/loop2

5. pvscan <---非常有用

6. lvmdiskscan <-- 查看所有硬盘(包含虚拟)的情况7。pvdisplay /dev/loop0 <--看看


下面我们建立一个volume group( 对不起,我不知中文是怎么翻译的),就是这个概念让我们可以随时加大分区。-s 是叫PE (Physical Extend) 的大小是8K,缺省值是4Mo,PE 是个基础块,它的大小直接影响物理卷的大小,因为linux 核最大限制是65536 个PE,PE 最小值是8K,最大值是16G。理论最大值是16Gx65536PE=1 petabytes.大家可以看第四张图,可以帮助理解。
下面命令的意思是建立一个叫vg01 的volume group ,并把硬盘loop0,loop1 加到入其中: vgcreate -s 8k vg01 /dev/loop0 /dev/loop1
如果vg01 不够用了,我们还可以用下面方法加入其它硬盘:vgextend vg01 /dev/loop2
在volume group vg01 下建立逻辑卷(Logicial volume creation) ,名字叫 lv01, 大小为4M:
1. lvcreate -L4M -n lv01 vg01

2. vgdisplay vg01


再看一眼vg01:
看看新建的逻辑卷lv01:
3. lvdisplay /dev/vg01/lv01
也可以换个名字:4。lvrename /dev/vg01/lv01 /dev/vg01/lv_test
给逻辑卷进行格式化,我用ext3,你也可以用vfat,reiserfs,ext2,不过实际应用应该注意到如果你想在windows 下共享这个vfat 的话,windows 不会认为是一个分区,也不认识它的格式,这是因为我们这里利用了linux lvm 支持loopback 的特性,所以看不出来,实际上如果你真有几张硬盘的话,想用lvm,也必须先把分区定为linux lvm type ,然后再格式化成vfat 。因为windows 不认识lvm,所以也不会认识你的vfat 了。我已经做过实验了!大家可以不再化时间了。1。mkfs -t ext3 -j /dev/vg01/lv_test 2。mount /dev/vg01/lv_test /mnt
可以用了!
下面简单给出删除/扩充/减小volume groupe 的命令,还有所有有关lvm 清单,请大家小心,下面的命令适应与ext2/ext3, 其它如reiserfs,jfs,xfs,命令不一样。有感兴趣的朋友可以给我发信,我再详细给出命令。
delete volume groupe 1。vgchange -a n /dev/vg01 2。vgremove /dev/vg01
extend 1。lvextend -L+1G /dev/vg01/lv01 2。umount /mountingpoint 3。resize2fs /dev/vg01/lv01 4。mount /dev/vg01/lv01 /mountingpoint
reduce: 1。umount /mountingpoint 2。resize2fs /dev/vg01/lv01 3。lvreduce -L-1G /dev/vg01/lv01 4。mount /dev/vg01/lv01 /mountingpoint

阅读全文 | 回复(0) | 引用通告 | 编辑


发表评论:

    昵称:
    密码: (游客无须输入密码)
    主页:
    标题:



Powered by Oblog.