是否遇到过这样的问题,划分了
10G
的一个分区,挂接到
/home
下,可是随着时间的流逝,
10G
的空间开始不够用了,需要把它扩充。假设要扩充到
12G
,那么唯一的方法就是建立一个
12G
的新分区,然后将原来的
10G
分区中的数据全部移动到新分区中,再修改挂接配置。这样不仅麻烦而且浪费时间。
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 �C 99
映射到
PV1
,
LE 100 �C 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
名字好难打
)
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
,可以在线增大,不需要关机的