您的位置:首页 > 其它

lvm

2012-06-21 20:06 281 查看
lvm :logical volume manage 逻辑卷管理器

可以讲多个物理分区整合在一起,让这些分区看起来就像是一个磁盘一样。

功能:

在不影响数据的情况下弹性调整磁盘的容量

创建系统快照,用于备份大量数据。

LVM 的各个阶段及命令

pv:physical volume 物理卷

LVM的最底层

命令:

pvcreate :将实体 partition 建立成为 PV ;
pvscan :搜寻目前系统里面仸何具有 PV 的磁盘;
pvdisplay :显示出目前系统上面的 PV 状态;
pvs 显示多少个物理卷
pvmove移动数据
pvremove :将 PV 属性移除,让该 partition 丌具有 PV 属性。
#pvcreate /dev/sda9
#pvcreate /dev/sda{5,6,7}

VG :volume group 卷组

VG就是把多个PV整合到一起,组成一个大磁盘。指定PE (physical extend 物理扩展块,是LVM的最小存储块默认是4MB)大小,一个VG 最都包含65534个PE ,所以按照默认值,VG最大容量256G。

命令:

vgcreate -s 指定PE 大小 默认4m
vgs
vgdisplay VGNAME
vgextend  myvg /path/to/DEVICE扩展卷组
vgchange 设置VG是否启动
vgreduce 在VG内删除PV
vgremove 删除一个VG
vgscan
#vgcreate -s 16m vgname /dev/sda{5,6,7}
#vgextend vgname /dev/sda8  增加vg 的容量

LV:logical volume 逻辑卷

最终的VG 还会被切成LV,LV就可以被格式化使用,也只有LV可以被格式化,

命令:

lvcreate -L 3G -n mylv1 myvg  ( -l N)
容量   名字  卷组  PE的个数(容量)
#lvcreate
#lvscan
#lvs
#lvdisplay
#lvextend  在LV 内增加容量
#lvreduce        减少容量
#lvremove       删除一个LV
#lvresize  对LV 进行容量大小的调整

# lvcreate -L 30M -n lvname  vgname
最终会发现创建的是32M,因为PE默认是4M,LV的容量是4的倍数。

PV VG LV 的关系可看下图 :









结合上面两副图我们应该对他们之间的关系有个清晰地印象了,下面我们就做一个简单的实验来看一下具体操作步骤:

要求:

1、先分出两个分区,每个分区容量为1G,且systemID标示为8e

2、用pvcreat 将物理分区新建成PV

3、用vgcreate 将PV整合为VG,VG名称为myvg,且PE大小为16m

4、用lvcreate 创建一个60M的LV ,LV名称为mylv.

5、用mke2fs 格式化这个LV,且挂载到/mnt/lvm目录下

具体操作如下:

# fdisk -l
/dev/sdb5               1         123      987934+  8e  Linux LVM
/dev/sdb6             124         246      987966   8e  Linux LVM
# partprobe /dev/sdb
#pvcreate /dev/sdb{5,6}              创建PV
# pvdisplay
"/dev/sdb5" is a new physical volume of "964.78 MB"
--- NEW Physical volume ---
PV Name               /dev/sdb5
VG Name
PV Size               964.78 MB
Allocatable           NO
PE Size (KByte)       0
Total PE              0
Free PE               0
Allocated PE          0
PV UUID               98pIbr-ORIu-7ymE-46st-V2ap-WCS2-lYZhrE
# vgcreate -s 16M myvg /dev/sdb5              创建VG
Volume group "myvg" successfully created
# vgdisplay
--- Volume group ---
VG Name               myvg
System ID
Format                lvm2  版本号
Metadata Areas        1
Metadata Sequence No  2
VG Access             read/write
VG Status             resizable
MAX LV                0
Cur LV                1
Open LV               1
Max PV                0
Cur PV                1
Act PV                1
VG Size               960.00 MB
PE Size               16.00 MB  PE的大小
Total PE              60
Alloc PE / Size       4 / 64.00 MB
Free  PE / Size       56 / 896.00 MB
VG UUID               YT0SBT-xa3R-2Ukr-Dd9O-fqSs-F1gW-umBFF3

# lvcreate -L 60M -n mylv myvg           创建LV
Rounding up size to full physical extent 64.00 MB
#指定60m 实际创建64M,因为PE的值是16M.只能是16的倍数
Logical volume "mylv" created
# lvdisplay
--- Logical volume ---
LV Name                /dev/myvg/mylv
VG Name                myvg
LV UUID                7E5AvR-3Z6n-zBwx-iuJj-gkNj-YCQu-TxJfWw
LV Write Access        read/write
LV Status              available
# open                 1
LV Size                64.00 MB
Current LE             4    其实就是PE 大小就是16M
Segments               1
Allocation             inherit
Read ahead sectors     auto
- currently set to     256
Block device           253:2

# mke2fs -j /dev/myvg/mylv    格式化
# mkdir /mnt/lvm
# mount /dev/myvg/mylv /mnt/lvm/    挂载

说着复杂 创建其实很简单

下面我们做一些有技术含量的实验

放大LV的容量:

1、用fdisk设置新的具有8e systemID的分区

2、利用pvcreate 构建pv

3、放大VG的容量,利用vgextend将PV 加入到我们的vgname

4、放大LV的容量,利用lvresize将新加入的PV 内的PE 加入到lvname中

5、放大文件系统的容量,通过resize2fs将文件系统的容量确实增大

#fdisk -l
#pvcreate /dev/sdb6
#vgextend myvg /dev/sdb6
#lvextend -L 100M /dev/myvg/mylv
# resize2fs  /dv/mgvg/mylv1

缩小LV的容量:

必须先卸载 而且还要强制进行文件系统检测

1、先卸载mylv

2、磁盘检查,用fsck或者e2fsck 都可以

3、直接降低文件系统容量 用resize2fs

4、降低LV的容量,利用lvreduce

5、重新挂载 到此就可以结束了

6、移除/dev/sdb6,先利用pvmove将/dev/sdb6上的数据移除,再利用vgreduce将/dev/sdb6移除vg这个组,最后再利用pvremove移除它的PV属性。即可

#umount /mnt/lvm      卸载
#e2fsck -f /dev/myvg/mylv 磁盘检查
#resize2fs /dev/myvg/mylv  6900m  缩减 必须制定大小
#lvreduce -L 40M /dev/myvg/mylv
#mount /dev/myvg/mylv /mnt/lvm  重新挂载
#df /mnt/lvm                查看  减小了
#pvmove /dev/sdb6  /dev/sdb5

#vgreduce myvg /dev/sdb6
#pvscan 查看 sdb6不属于任何一个vg

#pvremove /dev/hdb6      # 将sdb6的pv属性删除

LVM的系统快照:

系统快照(snapshot)是LVM的另外一个重要功能,快照就是将当时的数据记录下来,就好像照相记录一样,以后数据有任何改动,原数据会被移动到快照区,没有被改变的区域则由快照区与文件系统共享。





如图所示,我们就可以看到,快照区的容量远远小于数据的容量,他只用存储改变的数据,所以说系统快照是很好的备份工具,用具备份大量的数据,同时也不影响系统的正常运行。

由于快照区和原本的LV共享很多PE,所以快照区与被快照的区域必须在同一个VG上。

命令:

#lvcreate -L 30m -p r -s -n mylvsnap /dev/myvg/mylv

-L 30M 指定创建的快照的容量

-p r 只读

-s 指定为创建快照

-n 快照的名称

/dev/myvg/mylv 指定对哪个lv创建快照

创建成功后就是挂载,可以通过/mnt/snap/访问原LV里的数据

#mkdir /mnt/snap

#mount /dev/myvg/mylvsnap /mnt/snap

此时我们就可以备份数据了,也不会影响系统正常的数据读取,

#cd /mnt/snap

# tar -jcf /backups/lvm.tar.gz * 备份好了

先卸载lvm 在把LV格式化 然后用备份的数据恢复

#umount /mnt/lvm

#mke2fs -j /dev/myvg/mylv

#mount /dev/myvg/mylv /mnt/lvm

#tar -jxf /backups/lvm.tar.gz -C /mnt/lvm

#ll /mnt/lvm

好了,数据恢复了 ,

最后所有的实验做完了 ,我们要做一下善后处理工作 删除LVM 把所有的分区恢复成原来的systemID,做到善始善终,以便我们做其他实验。

1. 先卸除系统上面的 LVM 文件系统 (包括忚快照与所有 LV);

#umount /mnt/lvm

#umount /mnt/snapshot

2. 使用 lvremove 删除 LV ;

#lvremove /dev/vgname/lvname

#lvremove /dev/vgname/lvss

3. 使用 vgchange -a n VGname 让 VGname 这个 VG 不具有 Active 的标志;

# vgchange -a n vgname

4. 使用 vgremove 删除 VG:

#vgremove vgname

5. 使用 pvremove 删除 PV;

#pvremove /dev/hda{5,6,7}

6. 最后,使用 fdisk 修改 ID 回来啊!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  lvm pe vg pv lv