drth 发表于 2013-10-17 08:57:59

LVM的简单配置

主要内容
LVM的简单介绍
LVM的配置与管理
LVM快照卷

LVM的简单介绍
作为一个linux用户,经常会碰到情况:因为事先已经分好了区,用着用着磁盘不够用了,而重新分区,又会对数据造成影响,有时候还需要重启。对个人用户来说问题倒不是很大,但对于企业来说无疑会造成重大损失。而LVM可以很好地解决这种问题。
逻辑滚动栏管理器(Logical Volume Manager,缩写为LVM),又译为逻辑卷宗管理器、逻辑磁盘管理器,是Linux核心所提供的逻辑滚动栏管理功能。它在硬盘的硬盘分区之上,又创建一个逻辑层,以方便系统管理硬盘分区系统。

优点:
接口统一,管理方式统一,还可以进行动态卷扩展

图例:



名词解释
物理卷(PV)
物理卷是指硬盘分区或者从逻辑上看起来和硬盘分区类似的设备(比如RAID设备)。
卷组(VG)
一个或者多个逻辑卷组成一个卷组。对于LVM而言,卷组类似于非LVM系统中的物理硬盘。卷组把多个逻辑卷组合在一起,形成一个可管理的单元。
逻辑卷(LV)
一个或者多个物理卷组成一个逻辑卷。对于LVM而言,逻辑卷类似于非LVM系统中的硬盘分区。逻辑卷可以包含一个文件系统(比如/home或者/usr)。
物理块physical extent (PE)
物理卷按大小相等的“块”为单位存储,块的大小与卷组中逻辑卷块的大小相同。
逻辑块logical extent (LE)
逻辑卷按“块”为单位存储,在一卷组中的所有逻辑卷的块大小是相同的。

LVM的配置与管理
1. PV的创建
# pvcreate /dev/sdb2
Physical volume "/dev/sdb2" successfully created
# pvcreate /dev/sdc2
Device /dev/sdc2 not found (or ignored by filtering).
# pvcreate /dev/sdd2
Device /dev/sdd2 not found (or ignored by filtering).
本例中将/dev/sdb2, /dev/sdc2, /dev/sdd2三个分区建立为物理卷。
查看PV信息的命令pvs或pvdisplay


# pvs
PV         VG   FmtAttr PSizePFree
/dev/sdb2       lvm2 a--10.00g 10.00g
/dev/sdc2       lvm2 a--10.00g 10.00g
/dev/sdd2       lvm2 a--10.00g 10.00g
# pvdisplay
"/dev/sdb2" is a new physical volume of "10.00 GiB"
--- NEW Physical volume ---
PV Name               /dev/sdb2
VG Name         
PV Size               10.00 GiB
Allocatable         NO
PE Size               0
Total PE            0
Free PE               0
Allocated PE          0
PV UUID               FIi1X2-wkxK-5Dwm-m2xA-lLy4-C8xi-k3Momk

"/dev/sdc2" is a new physical volume of "10.00 GiB"
--- NEW Physical volume ---
PV Name               /dev/sdc2
VG Name         
PV Size               10.00 GiB
Allocatable         NO
PE Size               0
Total PE            0
Free PE               0
Allocated PE          0
PV UUID               DuQiC5-vV0P-nPrN-Pxmw-ls6u-DltT-vLuZ1u

"/dev/sdd2" is a new physical volume of "10.00 GiB"
--- NEW Physical volume ---
PV Name               /dev/sdd2
VG Name         
PV Size               10.00 GiB
Allocatable         NO
PE Size               0
Total PE            0
Free PE               0
Allocated PE          0
PV UUID               tkkjyZ-auVC-zeBG-o75Y-x7Fk-tWFA-oG9Lc1

2. VG的创建


# vgcreate myvg -s 8M /dev/sdb2 /dev/sdc2 /dev/sdd2
Volume group "myvg" successfully created
-s后面指定PE大小
查看VG的信息的命令vgs和vgdisplay


# vgs
VG   #PV #LV #SN Attr   VSizeVFree
myvg   3   0   0 wz--n- 30.00g 30.00g
# vgdisplay
--- Volume group ---
VG Name               myvg
System ID         
Format                lvm2
Metadata Areas      3
Metadata Sequence No1
VG Access             read/write
VG Status             resizable
MAX LV                0
Cur LV                0
Open LV               0
Max PV                0
Cur PV                3
Act PV                3
VG Size               30.00 GiB
PE Size               8.00 MiB
Total PE            3840
Alloc PE / Size       0 / 0
FreePE / Size       3840 / 30.00 GiB
VG UUID               Q5foAw-zo14-4Ljv-tTog-cYde-EvyY-4np2Ip

3. LV的创建
# lvcreate -L 30G -n mylv myvg
Logical volume "mylv" created
-L指定LV的大小,-n为LV的名字,最后的是VG的名字
查看LV的信息的命令lvs,lvdisplay


# lvdisplay
--- Logical volume ---
LV Path                /dev/myvg/mylv
LV Name                mylv
VG Name                myvg
LV UUID                c2FPdN-t2xv-k2Nj-634C-6Tft-D0Is-V6UVOI
LV Write Access      read/write
LV Creation host, time FLyence.Wu, 2013-10-08 01:12:54 +0800
LV Status            available
# open               0
LV Size                30.00 GiB
Current LE             3840
Segments               3
Allocation             inherit
Read ahead sectors   auto
- currently set to   256
Block device         253:0

4. 格式化并挂载


# mkfs.ext4 /dev/myvg/mylv
# mount /dev/myvg/mylv /mnt
# echo "hello lvm" > /mnt/hello
# ls /mnt
hellolost+found
# cat /mnt/hello
hello lvm
在新挂载的分区中,新建一个文件,之后扩张和缩减LV时,判断文件是否损坏。

5. 扩展VG
首先准备好一个PV,使用vgextend命令即可完成扩展:vgextend VG_NAME /PATH/TO/PV


# pvcreate /dev/sda10
Physical volume "/dev/sda10" successfully created
# vgextend myvg /dev/sda10
Volume group "myvg" successfully extended
# vgs
VG   #PV #LV #SN Attr   VSizeVFree
myvg   4   1   0 wz--n- 40.00g 10.00g
myvg由30G增加到40G。

6. 缩减VG
确定要移除的PV;
将此PV上的数据转移至其它PV:pvmove /path/to/pv
从卷组中将此PV移除:vgreduce VG_NAME /PATH/TO/PV


# pvmove /dev/sdb2
/dev/sdb2: Moved: 0.1%
/dev/sdb2: Moved: 41.6%
/dev/sdb2: Moved: 88.4%
/dev/sdb2: Moved: 100.0%
# vgreduce myvg /dev/sdb2
Removed "/dev/sdb2" from volume group "myvg"

7. 扩展逻辑卷
首先确定要扩展的大小由30G-->40G
确定当前逻辑卷所在的卷组有足够的空闲空间;
扩展:
1、物理边界 +:扩展了 不带:扩展到
lvextend -L [+]SIZE /path/to/lv
2、逻辑边界
resize2fs /path/to/device
由于刚把/dev/sdb2移除了,现在重新加回去


# vgextend myvg /dev/sdb2
Volume group "myvg" successfully extended
# vgs
VG   #PV #LV #SN Attr   VSizeVFree
myvg   4   1   0 wz--n- 40.00g 10.00g
# lvextend -L +10G /dev/myvg/mylv
Extending logical volume mylv to 40.00 GiB
Logical volume mylv successfully resized
# resize2fs /dev/myvg/mylv
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/myvg/mylv is mounted on /mnt; on-line resizing required
old desc_blocks = 2, new_desc_blocks = 3
Performing an on-line resize of /dev/myvg/mylv to 10485760 (4k) blocks.
The filesystem on /dev/myvg/mylv is now 10485760 blocks long.
# lvs
LV   VG   Attr   LSizePool Origin Data%Move Log Cpy%Sync Convert
mylv myvg -wi-ao--- 40.00g

8. 缩减逻辑卷
首先确定缩减的大小,前提是至少能容纳原有的所有数据。
40G --> 35G
缩减:
1、卸载并强行检测文件系统;
e2fsck -f
2、逻辑边界
resize2fs /path/to/device SIZE
3、物理边界
lvreduce -L [-]SIZE /path/to/l


# e2fsck -f /dev/myvg/mylv
e2fsck 1.41.12 (17-May-2010)
/dev/myvg/mylv is mounted.
e2fsck: Cannot continue, aborting.
# umount /mnt
# e2fsck -f /dev/myvg/mylv
e2fsck 1.41.12 (17-May-2010)
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/myvg/mylv: 12/2621440 files (0.0% non-contiguous), 209555/10485760 blocks
# resize2fs /dev/myvg/mylv 35G
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/myvg/mylv to 9175040 (4k) blocks.
The filesystem on /dev/myvg/mylv is now 9175040 blocks long.
# lvreduce -L -5G /dev/myvg/mylv
WARNING: Reducing active logical volume to 35.00 GiB
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce mylv? : y
Reducing logical volume mylv to 35.00 GiB
Logical volume mylv successfully resized
# lvs
LV   VG   Attr   LSizePool Origin Data%Move Log Cpy%Sync Convert
mylv myvg -wi-a---- 35.00g
将mylv挂载回去,查看hello文件是否完好


# mount /dev/myvg/mylv /mnt
# ls /mnt
hellolost+found
# cat /mnt/hello
hello lvm
数据并没有损坏,需要注意的是在缩减lv时,有风险,可能会造成数据损坏

LVM快照卷
逻辑卷管理(LVM)提供了为任何逻辑卷作一个快照的功能,目的是在一致的状态下来得到一个分区的备份.因为在备份过程中,应用程序可能访问一个分区的文件或者数据库.一些文件可能在一个状态被备份,而后面的文件可能在一个更新后被备份,导致备份的不完整。使用快照卷后,当文件发生变化时,先复制一份放到快照卷中。备份时,通过快照卷去访问分区
LVM 快照通过把文件系统的改变记录到一个快照分区,而不是对这个分区做镜像.因此当你创建一个快照分区时,你不需要使用和你正创建快照的分区一样大小的分区, 而是在做快照过程中需要改变的大小.这取决于有多少数据正在写入分区和你希望保留LVM快照多长 时间. 你保留的时间越长,在文件系统的的改变越多,更多的快照分区就会被填充改变的信息.在分区上的改变率越高,快照的平均生命期越短.如果一个LVM分区的改变量超过了快照的大小,那么快照就会被释放。


# lvcreate -L 500M -s -p r -n mylvsnap /dev/myvg/mylv
Rounding up size to full physical extent 504.00 MiB
Logical volume "mylvsnap" created
#-L指定快照卷大小,-s创建快照卷,-p r限制快照卷为只读访问,-n指定快照卷名称
建立后以只读形式挂载快照卷
# mount -o ro /dev/myvg/mylvsnap /media
改动/mnt里的hello文件,然后比较/mnt和/media中hello的差异


# echo "hello,lvm snap" >> /mnt/hello
# cat /mnt/hello
hello lvm
hello,lvm snap
# cat /media/hello
hello lvm


xiguaqq20 发表于 2013-10-17 15:19:32

这是什么东东啊

shenhp 发表于 2013-10-17 19:04:07

我不在江湖,但江湖中有我的传说。

常青树 发表于 2013-10-18 10:55:22

女,喜甜食,甚胖!该女有一癖好:痛恨蚂蚁,见必杀之。问其故曰:这小东西,那么爱吃甜食,腰还那么细!

joozh 发表于 2013-10-18 19:31:56

这是什么东东啊

5ol.cc 发表于 2013-10-19 01:43:49

不错不错,楼主您辛苦了。。。

renran421 发表于 2013-10-19 07:02:24

我身在江湖,江湖里却没有我得传说。
页: [1]
查看完整版本: LVM的简单配置