是否遇到过这样的问题,划分了 <?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /> 10G 的一个分区,挂接到 /home 下,可是随着时间的流逝, 10G 的空间开始不够用了,需要把它扩充。假设要扩充到 12G ,那么唯一的方法就是建立一个 12G 的新分区,然后将原来的 10G 分区中的数据全部移动到新分区中,再修改挂接配置。这样不仅麻烦而且浪费时间。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

Linux 2.4 开始支持 LVM Logical Volume Manager ,逻辑卷管理器),通过 LVM ,可以动态地改变 分区 (准确地说应当称之为卷)的大小,而不必担心数据移动的问题。 LVM 的原理是,首先在硬盘上创建 PV Physical Volume: 物理卷)。 PV 可以创建在一个分区上,也可以创建在整个硬盘上,它由许多的 PE Physical Extent )组成,每个 PE 的默认值为 4MB 。之后将数个 PV 合在一起组成一个 VG Volume Group: 卷组)。最后在 VG 中创建 LV Logical Volume: 逻辑卷),它也由许多的 LE Logical Extent )组成, LE 的大小与 PE 相同,并与 PE 一一对应。 LV 就可以像普通的分区一样挂接在任何地方了。

下面我们总结一下这里出现的词汇:
LVM (Logical Volume Manager
,逻辑卷管理器): Linux 中用于管理逻辑卷的功能。
PV
Physical Volume ,物理卷):数据实际保存的位置,由许多 PE 组成。
VG
Volume Group ,卷组):多个 PV 组合在一起。
LV
Logical Volume ,逻辑卷): LVM 创建的虚拟卷,由许多 LE 组成,可以像普通分区一样进行挂接,可以动态修改大小。
PE
Physical Extent ): LVM 管理的最小单位,默认为 4MB
LE
Logical Extent ):大小与 PE 相同,并与 PE 一一对应。
制作 LVM

下面我们尝试在 Linux 下使用 LVM 来管理分区。以下操作使用的系统为 Fedora Core 3

1. 首先用 fdisk 创建两个分区 /dev/hda7 /dev/hda8 ,选择分区大小为 1G 。结果如下:
    Device Boot      Start         End      Blocks   Id  System
 /dev/hdb1               1        2117     1000251   83  Linux
 /dev/hdb2            2118        4234     1000282+  83  Linux

2. 使用 pvcreate 命令将分区建立为 PV
 # pvcreate /dev/hdb1
   Physical volume "/dev/hdb1" successfully created
 # pvcreate /dev/hdb2
   Physical volume "/dev/hdb2" successfully created

3. 使用 vgcreate 命令将新建的两个 PV 组合成 VG
 # vgcreate newvg /dev/hdb1 /dev/hdb2
   Volume group "newvg" successfully created

之后我们可以发现在 /dev 目录下多了一个名为 newvg 的目录,这就是我们建立的 VG

4. 使用 lvcreate 命令在 newvg 中建立一个 LV ,名为 lv01 ,大小为 256M
 # lvcreate -L
256M -n lv01 newvg
   Logical volume "lv01" created

可以发现在 /dev/newvg 下多了一个名为 lv01 的符号链接,这就是 LV

5. lv01 上建立文件系统。
 # mke2fs /dev/newvg/lv01

6. 挂接该文件系统。
 # mount -t ext2 /dev/newvg/lv01 /root/lv

至此一个 LV 已经建立完毕。我们可以试着增大该 LV 的容量。使用 lvextend 命令将刚刚建立的 LV 增大 128M 。扩大容量之后需要使用 resize2fs 命令来扩大原有的文件系统到新的容量。
 # lvextend -L+
128M /dev/newvg/lv01
   Extending logical volume lv01 to 384.00 MB
   Logical volume lv01 successfully resized
 
 # umount /dev/newvg/lv01
 
 # e2fsck -f /dev/newvg/lv01
 e2fsck 1.36 (05-Feb-2005)
 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/newvg/lv01: 12/65536 files (8.3% non-contiguous), 10336/262144 blocks
 
 # resize2fs /dev/newvg/lv01
 resize2fs 1.36 (05-Feb-2005)
 Resizing the filesystem on /dev/newvg/lv01 to 393216 (1k) blocks.
 The filesystem on /dev/newvg/lv01 is now 393216 blocks long.
 
 # mount -t ext2 /dev/newvg/lv01 /root/lv

之后马上就可以利用 df -h 命令看到文件系统的容量改变了。

我们也可以利用 vgdisplay 命令来查看 VG 的信息。
 # vgdisplay newvg
   --- Volume group ---
   VG Name               newvg
   System ID
   Format                lvm2
   Metadata Areas        2
   Metadata Sequence No  3
   VG Access             read/write
   VG Status             resizable
   MAX LV                0
   Cur LV                1
   Open LV               1
   Max PV                0
   Cur PV                2
   Act PV                2
   VG Size               1.91 GB
   PE Size               4.00 MB
   Total PE              488
   Alloc PE / Size       96 / 384.00 MB
   Free  PE / Size       392 / 1.53 GB
   VG UUID               YAlPwY-Vlfa-ZBa7-4jPQ-60Gk-Fzwi-jUW8BM

LVM 使用手册

1
简介
1.1
什么是 LVM?
LVM
Logical Volume Manager( 逻辑卷管理 ) 的简写,它由 Heinz Mauelshagen Linux 2.4 内核上实现,目前最新版本为:稳定版 1.0.5 ,开发版 1.1.0-rc2 ,以及 LVM2 开发版。
与传统的磁盘与分区相比, LVM 为计算机提供了更高层次的磁盘存储。它使系统管理员可以更方便的为应用与用户分配存储空间。在 LVM 管理下的存储卷可以按需要随时改变大小与移除 ( 可能需对文件系统工具进行升级 ) LVM 也允许按用户组对存储卷进行管理,允许管理员用更直观的名称 ( "sales' 'development') 代替物理磁盘名 ( 'sda' 'sdb') 来标识存储卷。
1.2
为什么使用 LVM?
LVM
通常用于装备大量磁盘的系统,但它同样适于仅有一、两块硬盘的小系统。
1.2.1
小系统使用 LVM 的益处
传统的文件系统是基于分区的,一个文件系统对应一个分区。这种方式比较直观,但不易改变:
1.
不同的分区相对独立,无相互联系,各分区空间很易利用不平衡,空间不能充分利用;
2.
当一个文件系统/分区已满时,无法对其扩充,只能采用重新分区/建立文件系统,非常麻烦;或把分区中的数据移到另一个更大的分区中;或采用符号连接的方式使用其它分区的空间。
3.
如果要把硬盘上的多个分区合并在一起使用,只能采用再分区的方式,这个过程需要数据的备份与恢复。
当采用 LVM 时,情况有所不同:
1.
硬盘的多个分区由 LVM 统一为卷组管理,可以方便的加入或移走分区以扩大或减小卷组的可用容量,充分利用硬盘空间;
2.
文件系统建立在逻辑卷上,而逻辑卷可根据需要改变大小 ( 在卷组容量范围内 ) 以满足要求;
3.
文件系统建立在 LVM 上,可以跨分区,方便使用;
1.2.2
大系统使用 LVM 的益处
在使用很多硬盘的大系统中,使用 LVM 主要是方便管理、增加了系统的扩展性。
在一个有很多不同容量硬盘的大型系统中,对不同的用户的空间分配是一个技巧性的工作,要在用户需求与实际可用空间中寻求平衡。
用户/用户组的空间建立在 LVM 上,可以随时按要求增大,或根据使用情况对各逻辑卷进行调整。当系统空间不足而加入新的硬盘时,不必把用户的数据从原硬盘迁移到新硬盘,而只须把新的分区加入卷组并扩充逻辑卷即可。同样,使用 LVM 可以在不停服务的情况下。把用户数据从旧硬盘转移到新硬盘空间中去。
2 LVM
构成
LVM
的结构简图如下:
hda1 hdc1 sdc (PV:s
物理卷,一般为分区或整个硬盘 )
\
/
\
/
diskvg (VG
卷组由物理卷组成 )
/ | \
/ | \
usrlv rootlv varlv (LV:s
逻辑卷在卷组上创建 )
| | |
ext2 reiserfs xfs (
建立在逻辑卷上的文件系统 )
2.1
卷组 volume group (VG)
卷组是 LVM 中最高抽象层,是由一个或多个物理卷所组成的存储器池。
2.2
物理卷 physical volume (PV)
典型的物理卷是硬盘分区,但也可以是整个硬盘或已创建的 Software RAID 卷。
2.3
逻辑卷 logical volume (LV)
逻辑卷相当于非 LVM 系统中的分区,它在卷组上建立,是一个标准的块设备,可以在其上建立文件系统。
2.4
物理块 physical extent (PE)
物理卷按大小相等的 为单位存储,块的大小与卷组中逻辑卷块的大小相同。
2.5
逻辑块 logical extent (LE)
逻辑卷按 为单位存储,在一卷组中的所有逻辑卷的块大小是相同的。
2.6
总述
例子:有一个卷组 VG1 ,它的物理块大小为 4MB 。在这个卷组中为 2 个硬盘分区: /dev/hda1 /dev/hdb1 ,它们分别成为物理卷 PV1 PV2 。物理卷将按 4MB 为单位分块,如 PV1 PV2 分别可分为 99 248 块。在 VG1 上建立逻辑卷,它的大小可在 1 347(99+248) 块之间。当建立逻辑卷时,会建立逻辑块与物理块的一一映射关系。
2.7
映射模式 (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... 。这种方式可以提高逻辑卷的性能,但是采用这种方式建立的逻辑卷将不能在它们所在的物理卷中扩展。
2.8 Snapshots (
快照 )
LVM
提供了一个非常好的特性: snapshots 。它允许管理员建立一个块设备:该设备是一逻辑卷在某一时刻冻结的精确拷贝。这个特性通常用于批处理过程 ( 如备份 ) 需要处理逻辑卷,但又不能停止系统。当操作完成时, snapshot 设备可以被移除。这个特性要求在建立 snapshot 设备时逻辑卷处于相容状态。
3 LVM
的一般操作
3.1
建立 PV
为把一个磁盘或分区作为 PV ,首先应使用 pvcreate 对其初始化,如对 IDE 硬盘 /dev/hdb
"
使用整个磁盘,
# pvcreate /dev/hdb
这将在磁盘上建立 VG 的描述符。
"
使用磁盘分区,如 /dev/hdb1
使用 fdisk t 命令把 /dev/hda1 的分区类型设为 0x8e ,然后运行:
# pvcreate /dev/hdb1
这将在分区 /dev/hda1 上建立 VG 的描述符。
PV
初始化命令 pvcreate 的一般用法为:
pvcreate PV1 [ PV2 ... ]
它的参数可以是整个磁盘、分区,也可以是一 loop 设备。
3.2
建立 VG
在使用 pvcreate 建立了 PV 后,可以用 vgcreate 建立卷组,如有 PV1 PV2 分别是 /dev/hda1 /dev/hdb1 ,使用
# vgcreate testvg /dev/hda1 /dev/hdb1
将建立一个名为 testvg 的卷组,它由两个 PV /dev/hda1 /dev/hdb1 组成。 vgcreate 的一般用法为:
# vgcreate [options] VG_name PV1 [PV2 ...]
其中的可选项包括设置 VG 最大支持的 LV 数、 PE 大小 ( 缺省为 4MB) 等。
注意:当使用 devfs 系统时,应使用设备的全名而不能是 Symbol Link ,如对上例应为:
# vgcreate testvg /dev/ide/host0/bus0/target0/lun0/part1\
/dev/ide/host0/bus0/target1/lun0/part1
3.3
激活 VG
在被激活之前, VG LV 是无法访问的,这时可用命令:
# vgchange -a y testvg
激活所要使用的卷组。当不再使用 VG 时,可用
vgchange -a n testvg
使之不再可用。
vgchange
可用来设置 VG 的一些参数,如是否可用 ( -a [y|n] 选项 ) 、支持最大逻辑卷数等。
3.4
移除 VG
在移除一卷组前应确认卷组中不再有逻辑卷,首先休眠卷组:
# vgchange -a n testvg
然后可用 vgremove 移除该卷组:
# vgremove testvg
3.5
VG 增加新 PV
当卷组空间不足时,可以加入新的物理卷来扩大容量,这时可用命令 vgextend ,如
# vgextend testvg /dev/hdc1
其中 /dev/hdc1 是新的 PV ,当然在这之前,它应使用 pvcreate 初始化。
3.6
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
如这个 PV 仍在被使用,则应把数据传移到其它 PV 上。在确认它未被使用后,可用命令 vgreduce 把它从 VG 中删除,如:
# vgreduce testvg /dev/hda1
3.7
创建 LV
在创建逻辑卷前,应决定 LV 使用哪些 PV ,这可用命令 vgdisplay pvdisplay 查看当前卷组与 PV 的使用情况。在已有的卷组上创建逻辑卷使用命令 lvcreate ,如:
# lvcreate -L1500 -ntestlv testvg
将在卷组 testvg 上建立一个 1500MB 的线性 LV ,其命名为 testlv ,对应的块设备为 /dev/testvg/testlv
# lvcreate -i2 -I4 -l100 -nanothertestlv testvg
将在卷组 testvg 上建立名为 anothertestlv LV ,其大小为 100LE ,采用交错方式存放,交错值为 2 ,块大小为 4KB
如果需要 LV 使用整个 VG ,可首先用 vgdisplay 查找 Total PE 值,然后在运行 lvcreate 时指定,如:
# vgdisplay testvg | grep "Total PE"
Total PE 10230
# lvcreate -l 10230 testvg -n mylv
将使用卷组 testvg 的全部空间创建逻辑卷 mylv
在创建逻辑卷后,就可在其上创建文件系统并使用它。
命令 lvcreate 的常用方法:
lvcreate [options] -n
逻辑卷名 卷组名 [PV1 ... ]
其中的常用可选项有:
"-i Stripes
:采用交错 (striped) 方式创建 LV ,其中 Stripes 指卷组中 PV 的数量。
"-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 指定名称。
3.8
删除 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
3.9
扩展 LV
为逻辑卷增加容量可用使用 lvextend ,即可以指定要增加的尺寸也可以指定扩容后的尺寸,如
# lvextend -L
12G /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 之上的文件系统扩容,使二者相匹配。对不同的文件系统有相对应的扩容方法。
3.9.1 ext2/ext3
除非内核已有 ext2online 补丁,否则在改变 ext2/ext3 文件系统的大小时应卸载它:
# umount /dev/testvg/testlv
# resize2fs /dev/testvg/testlv
# mount /dev/testvg/testlv /home
这里假设 testlv 安装点为 /home 。在 es2fsprogs-1.19 或以上版本中包含 resize2fs 命令。
LVM 发行包中有一个称为 e2fsadm 的工具,它同时包含了 lvextend resize2fs 的功能,如:
# e2fsadm -L+
1G /dev/testvg/testlv
等价于下面两条命令:
# lvextend -L+
1G /dev/testvg/testlv
# resize2fs /dev/testvg/testlv
但用户仍需首先卸载文件系统。
3.9.2 reiserfs
ext2 不同, Reiserfs 不必卸载文件系统,如:
# resize_reiserfs -f /dev/testvg/testvl
3.9.3 xfs
SGI XFS
文件系统必须在安装的情况下才可改变大小,并且要使用安装点而不是块设备,如:
# xfs_growfs /home
3.10
缩小 LV
逻辑卷可扩展同样也可缩小,但应在缩小 LV 之前首先减小文件系统,否则将可能导致数据丢失。
3.10.1 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
3.10.2 reiserfs
在缩小 reiserfs 时,应首先卸载它,如:
# umount /home
# resize_reiserfs -s
-1G /dev/testvg/testvl
# lvreduce -L
-1G /dev/testvg/testvl
# mount -treiserfs /dev/testvg/testvl /home
3.10.3 xfs
无法实现。
3.11
PV 间转移数据
若要把一个 PV VG 中移除,应首先把其上所有活动 PE 中的数据转移到其它 PV 上,而新的 PV 必须是本 VG 的一部分,有足够的空间。如要把 PV1:/dev/hda1 上的数据移到 PV2:/dev/sda1 上可用命令:
# pvmove /dev/hdb1 /dev/sdg1
如果在该 PV 之上的 LV 采用交错方式存放,则这个转移过程不能被打断。
建议在转移数据之前备份 LV 中的数据。
3.12
系统启动/关闭
"
为使系统启动时可自动激活并使用 LVM ,可将以下几行添加到启动 rc 脚本中:
/sbin/vgscan
/sbin/vgchange -a y
这些行将浏览所有可用的卷组并激活它们。要注意的是,它们应在安装卷组上的文件系统操作之前被执行,否则将无法正常安装文件系统。
"
在系统关机时,要关闭 LVM ,这可将以下这行添加到关机 rc 脚本中,并确保它在卸装了所有文件系统后执行:
/sbin/vgchange -a n
4
磁盘分区问题
4.1
一个磁盘上的多个分区
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
4.2 Sun disk labels
仅在 SUN SPARC 系统中有此问题。
5
建立 LVM 用例
在本节中,将在 3 SCSI 硬盘: /dev/sda /dev/sdb /dev/sdc 上按步建立 LVM
5.1
准备分区
首先要做的是初始化硬盘,建立 PV ,这将会删除硬盘上的原有数据。在此,用整个硬盘为 PV
# pvcreate /dev/sda
# pvcreate /dev/sdb
# pvcreate /dev/sdc
pvcreate
在每个硬盘的起始端建立卷组描述区 ( volume group descriptor area, VGDA)
5.2
创建卷组
利用上面三个 PV 建立卷组:
# vgcreate test_vg /dev/sda /dev/sdb /dev/sdc/
然后可用 vgdisplay 查看/验证卷组的信息:
# vgdisplay
--- Volume Group ---
VG Name test_vg
VG Access read/write
VG Status available/resizable
VG # 1
MAX LV 256
Cur LV 0
Open LV 0
MAX LV Size 255.99 GB
Max PV 256
Cur PV 3
Act PV 3
VG Size 1.45 GB
PE Size 4 MB
Total PE 372
Alloc PE / Size 0 / 0
Free PE / Size 372/ 1.45 GB
VG UUID nP2PY5-5TOS-hLx0-FDu0
-2a 6N-f37x-0BME0Y
其中最重要的前三条要正确,且 VS size 是以上三个硬盘容量之和。
5.3
建立 LV
在确定卷组 test_vg 正确后,就可在其上创建 LV LV 的大小可在 VG 大小范围内任意选择,如同在硬盘上分区。
5.3.1
建立线性方式 LV
test_vg 上建立一个大小为 1GB 的线性方式 LV
# lvcreate -L
1G -ntest_lv test_vg
lvcreate -- doing automatic backup of "test_vg"
lvcreate -- logical volume "/dev/test_vg/test_lv" successfully created
5.3.2
建立交错方式 LV
test_vg 上建立一个大小为 1GB 的交错方式 LV ,交错参数为 4KB
# lvcreate -i3 -I4 -L
1G -ntest_lv test_vg
lvcreate -- rounding 1048576 KB to stripe boundary size 1056768 KB / 258 PE
lvcreate -- doing automatic backup of "test_vg"
lvcreate -- logical volume "/dev/test_vg/test_lv" successfully created
注意:如果使用 -i2 参数,则 LV 将仅使用 test_vg 中的两块硬盘。
5.4
建立文件系统
LV test_lv 创建后,就可在其上建立文件系统,
如, ext2/ext3 系统:
# mke2fs /dev/test_vg/test_lv
如, reiserfs
mkreiserfs /dev/test_vg/test_lv
5.5
测试文件系统
安装 LV
# mount /dev/test_vg/test_lv /mnt
# df
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/hda1 1311552 628824 616104 51% /
/dev/test_vg/test_lv 1040132 20 987276 0% /mnt
则可以通过 /mnt 访问 LV
6
使用 snapshot 做备份
例如我们要对卷组 "test_vg" 每晚进行数据库备份,就要采用 snapshot 类型的卷组。这种卷组是其它卷组的一个只读拷贝,它含有在创建 snapshot 卷组时原卷组的所有数据,这意味你可以备份这个卷组而不用担心在备份过程中数据会改变,也不需要暂时关闭数据库卷以备份。
6.1
建立 snapshot
一个 snapshot 卷可大可小,但必须有足够的空间存放所有在本 snapshot 卷生存期间改变的数据,一般最大要求是原卷组的 1.1 倍。如空间不够, snapshot 卷将不能使用。
# lvcreate -L
592M -s -n dbbackup /dev/test_vg/databases
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
6.2
安装 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
6.3
备份数据
如采用 tar 向磁带备份:
# tar -cf /dev/rmt0 /mnt/test_vg/dbbackup
6.4
删除 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

 

 

一、 RHEL 4 中建有名为 rhcevg VG ,名为 rhcelv LV ,输出如下:
------------------------------------------------------------------
[root@rhce tmp]# pvscan |grep 'rhcevg';lvdisplay rhcevg/rhcelv
/dev/cdrom: open failed: No medium found
PV /dev/hdb1 VG rhcevg lvm2 [92.00 MB / 0 free]
PV /dev/hdb2 VG rhcevg lvm2 [132.00 MB / 124.00 MB free]
PV /dev/hdb3 VG rhcevg lvm2 [100.00 MB / 100.00 MB free]
PV /dev/hdb5 VG rhcevg lvm2 [3.16 GB / 3.16 GB free]
--- Logical volume ---
LV Name /dev/rhcevg/rhcelv
VG Name rhcevg
LV UUID QIuXvv-32p1-prEZ-F4jn-CBxM-gp7r-6vrb
0M
LV Write Access read/write
LV Status available
# open 0
LV Size 100.00 MB
Current LE 25
Segments 2
Allocation inherit
Read ahead sectors 0
Block device 253:0

---------------------------------------------------------------------
可以看出 rhcelv 的大小为 100M ,VG 还有很多未分配空间 ;

二、增加 rhcelv 大小至 3.26G , 即增加 3.16G

[root@rhce tmp]# lvresize -L +
3.16G rhcevg/rhcelv
Rounding up size to full physical extent 3.16 GB
Extending logical volume rhcelv to 3.26 GB
Logical volume rhcelv successfully resized

[root@rhce tmp]# lvdisplay rhcevg/rhcelv
--- Logical volume ---
LV Name /dev/rhcevg/rhcelv
VG Name rhcevg
LV UUID QIuXvv-32p1-prEZ-F4jn-CBxM-gp7r-6vrb
0M
LV Write Access read/write
LV Status available
# open 0
LV Size 3.26 GB
Current LE 834
Segments 4
Allocation inherit
Read ahead sectors 0
Block device 253:0

[root@rhce tmp]# mount /dev/rhcevg/rhcelv /mnt/rhcelv/;df -h |grep 'rhcelv'
/dev/mapper/rhcevg-rhcelv
97M 5.6M 87M 7% /mnt/rhcelv

#
增加后大小容量未更变,执行 ext2online 命令
[root@rhce tmp]# ext2online /dev/rhcevg/rhcelv
ext2online v
1.1.18 - 2001/03/18 for EXT2FS 0.5b
[root@rhce tmp]# df -h |grep 'rhcelv'
/dev/mapper/rhcevg-rhcelv
3.2G 7.2M 3.0G 1% /mnt/rhcelv
[root@rhce tmp]# lvdisplay rhcevg/rhcelv
--- Logical volume ---
LV Name /dev/rhcevg/rhcelv
VG Name rhcevg
LV UUID QIuXvv-32p1-prEZ-F4jn-CBxM-gp7r-6vrb
0M
LV Write Access read/write
LV Status available
# open 1
LV Size 3.26 GB
Current LE 834
Segments 4
Allocation inherit
Read ahead sectors 0
Block device 253:0

#
可以看到容量已增加

三、在减小 LV 大小,如下:
[root@rhce tmp]# umount /mnt/rhcelv/;lvresize -L
-2G rhcevg/rhcelv
WARNING: Reducing active logical volume to 1.26 GB
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce rhcelv? [y/n]: y
Reducing logical volume rhcelv to 1.26 GB
Logical volume rhcelv successfully resized

#
可以看到大小已减小 2G ,rhcelv 现大小为 1.26G , 查看

[root@rhce tmp]# pvscan |grep 'rhcevg';lvdisplay rhcevg/rhcelv
/dev/cdrom: open failed: No medium found
PV /dev/hdb1 VG rhcevg lvm2 [92.00 MB / 0 free]
PV /dev/hdb2 VG rhcevg lvm2 [132.00 MB / 0 free]
PV /dev/hdb3 VG rhcevg lvm2 [100.00 MB / 0 free]
PV /dev/hdb5 VG rhcevg lvm2 [3.16 GB / 2.22 GB free]
--- Logical volume ---
LV Name /dev/rhcevg/rhcelv
VG Name rhcevg
LV UUID QIuXvv-32p1-prEZ-F4jn-CBxM-gp7r-6vrb
0M
LV Write Access read/write
LV Status available
# open 0
LV Size 1.26 GB
Current LE 322
Segments 4
Allocation inherit
Read ahead sectors 0
Block device 253:0

----------------------------------
#
可以看出大小在 pvdisplay 中已显示为 1.26G ,
[root@rhce tmp]# mount /dev/rhcevg/rhcelv /mnt/rhcelv/
[root@rhce tmp]# df -h|grep 'rhcelv'
/dev/mapper/rhcevg-rhcelv
3.2G 7.2M 3.0G 1% /mnt/rhcelv

#
可以看出,容量未改;
[root@rhce tmp]# umount /mnt/rhcelv/
[root@rhce tmp]# fsck.ext3 /dev/rhcevg/rhcelv
e2fsck 1.35 (
28-Feb-2004 )
The filesystem size (according to the superblock) is 3416064 blocks
The physical size of the device is 1318912 blocks
Either the superblock or the partition table is likely to be corrupt!
Abort<y>?

#
卸载后 fsck 发现报错,重新格式化
[root@rhce tmp]# mkfs.ext3 /dev/rhcevg/rhcelv
mke2fs 1.35 (28-Feb-2004)
max_blocks 337641472, rsv_groups = 10304, rsv_gdb = 80
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
165088 inodes, 329728 blocks
16486 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=339738624
11 block groups
32768 blocks per group, 32768 fragments per group
15008 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912

Writing inode tables: done
inode.i_blocks = 3848, i_size = 4243456
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done

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

[root@rhce tmp]# fsck.ext3 /dev/rhcevg/rhcelv
e2fsck 1.35 (28-Feb-2004)
/dev/rhcevg/rhcelv: clean, 11/165088 files, 13881/329728 blocks

-----------------------------------------------------------------
重新格式化后, fsck 无误,挂载

[root@rhce tmp]# mount /dev/rhcevg/rhcelv /mnt/rhcelv/;df -h |grep 'rhcelv'
/dev/mapper/rhcevg-rhcelv
1.3G 34M 1.2G 3% /mnt/rhcelv

#
容量改变
#BTW,
说实在的,搞了很多次再明白;
#
增加容量只需挂载的状态下 ext2online ,(man ext2online 发现这一句话, It is only possible to enlarge a mounted filesystem.)
#
减小容量却需重建文件系统,不知可否有其它操作方式?

 

 

 

LVM 配置步骤
1.
准备一个分区
   fdisk /dev/hda (
/dev/sda) 本案例中创建的分区为 /dev/hda15

2. 创建 PV
   pvcreate /dev/hda15
如果有多少分区 /dev/hda15,/dev/hda16 /dev/hda17, 则可以 pvcreae /dev/hda1[5-7]

3. 创建 VG(vg_name VG 的名称 )
vgcreate vg_name /dev/hda15
如果有多少分区 /dev/hda15,/dev/hda16 /dev/hda17 创建一个 VG ,则可以 vgcreate vg_name /dev/hda1[5-7]

4.
创建 LV(lv_name LV 的名称 )
lvcreate -n lv_name -L
10M vg_name

5.
格式化 LV
mkfs.ext3 /dev/vg_name/lv_name

6.
挂载文件系统
mount /dev/vg_name/lv_name /lvm

LVM 管理
1.
扩大 LV
   在扩大 LV , 必须增大文件系统  
1.1
扩大 LV
  lvextend -L
20M /dev/vg_name/lv_name ( 扩大 LV 20M 空间 )  
  lvextend -L +
20M /dev/vg_name/lv_name ( 增加 LV 20M 空间, LV 现空间是 30M )
1.2
增大文件系统 ( 这一步容易疏忽 )
假设原来文件系统大小为 100M , 那又新增 20M , 故新的文件系统为 120M

ext2online /dev/vg_name/lv_name 120M

2.
缩小 LV
 [
假设文件系统是 10M ,LV 30M , 准备把 LV 缩小到 20M ] 在缩小 LV 空间时,务必考虑真实的文件系统大小,可能导致文件不可用。
2.1
缩小文件系统 ( 必先卸载文件系统 )
umount /lvm
fsck.ext3 /dev/vg_name/lv_name
resize2fs /dev/vg_name/lv_name
20M

2.2
缩小文件系统 ( 在线操作,不用卸载 )-- 在配置过程中好像不好使

ext2online /dev/vg_name/lv_name 20M

2.3
缩小 LV
lvreduce -L
20M /dev/vg_name/lv_name

3.
扩大 VG
vgextend /dev/hda1[8-9] ( 后面的分区务必先进行 pvcreate 方可使用 )
4.
删除 VG 删除 VG 前必须先删除 LV ,在删除 LV 前请先备份数据!!!

4.1
删除 LV
  lvremove /dev/vg_name/lv_name

4.2
删除 VG
  vgremove

案例 : RAID5 上建 LVM

1.
准备三个容量相同的分区
/dev/hda7 509 744 1895638+  fd Linux raid autodetect
/dev/hda8 745 980 1895638+  fd Linux raid autodetect
/dev/hda9 981 1216 1895638+ fd Linux raid autodetect

2.
RAID5
mdadm --create /dev/md0 --level 5 --raid-devices=3 /dev/hda[7-9]

3.
创建 PV
pvcreate /dev/md0

4.
创建 VG
vgcreate vg0 /dev/md0

5.
创建 LV
lvcreate -L
1024M -n opt vg0 ( 1G 空间 )
lvcreate -L
500M -n train vg0 ( 500M 空间 )

6.
格式化 LV
mkfs.ext3 /dev/vg0/opt mkfs.ext3 /dev/vg0/train

7. 新建挂载点
cd /
mkdir opt train

8.
修改 fstab 文件 , 加其中加入如下两行
  ...            ...             ...             ...         ...     ...
/dev/vg0/opt     /opt            ext3           defaults      1       2
/dev/vg0/train   /train          ext3           defaults      1       2

测试成功
使用 lfs livecd redhat rescue 模式也是会提示 lv mount 状态)
livecd 引导
使用 "vgscan" 搜索到硬盘的 vg
然后用 "vgchange -a y" 激活 vg
我是要缩小分区所以执行下面的命令:
e2fsck -f /dev/VolGroup00/LogVol00  
redhat 默认的 vg 名字好难打 <?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />
resize2fs /dev/VolGroup00/LogVol00
3000M    (这个数值不能小于 lv 中的数据所占空间)
lvreduce -L
3000M /dev/VolGroup00/LogVol00

如果要增大 lv
lvextend -L
5000M /dev/VolGroup00/LogVol00   (注意先查看 vg 的剩余空间)
e2fsck -f /dev/VolGroup00/LogVol00
resize2fs /dev/VolGroup00/LogVol00
5000M  

  如果是 rhel4 ,增大 lv 的时候可以使用 ext2online ,可以在线增大,不需要关机的