分类: LINUX
2009-10-10 17:49:48
Physical Volumes是处于底层的存储单元,是一个块设备,也就是说可以是一个分区或者是整个磁盘。但使用之前块设备之前必须将其初始化为PV,初始化的时候将在此设备的开端建一个LVM label。
(图)
LVM Label位于第二个512段,之后是元数据,再后是可用的空间。
默认情况下label是建立在第二个512-byte段(sector),由于LVM tools扫描PV Label读取的是前4个段,因此也可以建立在任何开始的4个段。一个LVM lable记录了一个物理设备的标识(identification)和在系统启动的时候设备激活的顺序。在系统重启和整个集群中一个LVM label会一直存在。LVM label将此设备标识为一个LVM PV,包含了PV的UUID(UUID是一个随机的唯一的标识号)。另外它记录了块设备的大小(单位byte)和LVM元数据(metadata)在此设备的位置。PV Label都以LABELONE.为开端。
LVM元数据很小,以ASCII的形式存储,它保存了LVM卷组的详细配置。元数据的拷贝存在于每一个PV的元数据区(metadata area),默认情况下有一份拷贝,当前的LVM允许在一个PV创建0、1、2个备份。一旦你指定了拷贝的数量就不能更改了。如果有两个拷贝的话,第一份会在设备的前端,另一份会在设备的后端,一个被破坏了之后可以通过另一个来恢复。默认的元数据大小很小,如果一个volume group有多个logical volume或是多个physical volume这个大小就不能满足了。可以在使用pvcreate的时候指定--metadatasize选项来指定大小。如果一个卷组包含很多PV,就没有必要保留很多份冗余的备份了,否则效率将很低。使用pvcreate的时候通过--metadatacopies 0可以创建一个没有元数据的备份。
元数据区是一个循环的buffer,如果新的元数据添加到旧的元数据之后,指针指向新的区域。具体的元数据包括那些信息,可以参看一下一下的例子。
以下是一个元数据的例子,卷组名称为VolGroup00。“/etc/lvm/archive/VolGroup00_00000.vg”
# Generated by LVM2 version 2.02.40-RHEL5 (2008-10-24): Mon Oct 5 05:08:14 2009
contents = "Text Format Volume Group"
version = 1
description = "Created *before* executing 'vgdisplay --ignorelockingfailure -v VolGroup00'"
creation_host = "localhost.localdomain" # Linux localhost.localdomain 2.6.18-128.el5 #1 SMP Wed Dec 17 11:42:39 EST 2008 i686
creation_time = 1254690494 # Mon Oct 5 05:08:14 2009
VolGroup00 {
id = "yt44ic-2pK7-JUxD-0ZgH-CUcT-kpLi-YhGGiH"
seqno = 3
status = ["RESIZEABLE", "READ", "WRITE"]
flags = []
extent_size = 8192 # 4 Megabytes
max_lv = 0
max_pv = 0
physical_volumes {
pv0 {
id = "dXclZ0-KO6m-b932-qKOW-vtGA-46sb-RUrBDD"
device = "/dev/sda2" # Hint only
status = ["ALLOCATABLE"]
flags = []
dev_size = 12370050 # 5.8985 Gigabytes
pe_start = 384
pe_count = 1509 # 5.89453 Gigabytes
}
}
logical_volumes {
LogVol00 {
id = "ZwbPFM-5RUZ-XapB-mZ1O-WUpT-aQsW-vFG6NL"
status = ["READ", "WRITE", "VISIBLE"]
flags = []
segment_count = 1
segment1 {
start_extent = 0
extent_count = 1248 # 4.875 Gigabytes
type = "striped"
stripe_count = 1 # linear
stripes = [
"pv0", 0
]
}
}
LogVol01 {
id = "KHb30X-tZxC-HBxh-2n9b-qLWW-70co-CSKjf1"
status = ["READ", "WRITE", "VISIBLE"]
flags = []
segment_count = 1
segment1 {
start_extent = 0
extent_count = 64 # 256 Megabytes
type = "striped"
stripe_count = 1 # linear
stripes = [
"pv0", 1248
]
}
}
}
}
Volume Group由PV构成,它创建了一个磁盘池用来分配LVM。VG中,可用的磁盘被以固定大小的单元分割,其中最小单元称为extent。在PV中被称为PV extent,在LV中被称为LV extent。PV extent与LV extent相等。VG将LV extent映射为PV extent。
Vg将被分为LV,有四种LVM Logical Volums,它们分别是线性LV(Linear Volumes)、条带LV(Striped Volumes)、镜像LV(Mirrored Vlumes)和快照LV(Snapshot Volumes)。分别见以下结构图解
(图)
(图)
快照主要是记录原来的数据第一次变化之前的值。可以实现在线备份而不需要 停 机。快照主要是基于块设备实现的,其对数据的记录是在块设备上的,而非文件系 统之上的。
通过使用Snapshot可以实现很多功能:
1、可以在不中断正在运行的系统的同时完成在LVM的备份。不中断系统意味 着可以实现系统持续性的进行数据更新。
2、可以通过对snapshot使用fsck命令检查文件系统的完整性,以便决定是不 是对原文件系统是否进行修复。
3、snapshot支持可读可写,因此在不破坏原始数据的前提下,在snapshot 上做测试。
4、利用snapshot的功能,可以创建xen虚拟机。比如创建的Dom U占用了 5G的空间,而通过snapshot建立Dom U的副本,而其需要的空间仅仅1G就 足够了,另外只需要两条命令的输入就可以完成一台虚拟机的创建。
(待续,图请参看LVM总结.pdf)
|