首页 > 代码库 > 磁盘管理之基于软RAID的LVM

磁盘管理之基于软RAID的LVM

     LVM即为逻辑卷管理是一种管理磁盘的工具使用此技术可以动态的扩展和缩小文件系统空间而不损坏其中数据同时它还具备快照功能实现文件的备份本文将介绍lvm创建逻辑卷,缩减逻辑卷以及利用快照功能实现频繁读写的文件系统的备份。

下图为其逻辑结构:

wKioL1PHrsWwa_DWAADSOY5u4Kc610.jpg

PV:物理卷  

PE:物理区域

VG:卷组

LV:逻辑卷

 

逻辑卷的创建可以是分区或是RAID 下面将以软RAID5方式详细介绍逻辑卷的创建过程

创建软raid5

首先创建分区 我们使用分区工具fdisk 设备为/dev/sdb 创建3个主分区分别为 /dev/sdb1 

/dev/sdb2 /dev/sdb3 大小分别为 5G 5G 5G

此处我们以命令行方式创建分区当然你也可以使用交互模式

echo -e "n \n p \n 1 \n \n +5G \n t  \n  fd  \n w " |fdisk /dev/sdb  
echo -e "n \n p \n 2 \n \n +5G \n t \n 2 \n  fd  \n w " |fdisk /dev/sdb
echo -e "n \n p \n 3 \n \n +5G \n t \n 3 \n  fd  \n w " |fdisk /dev/sdb


注意要指定分区类型为raid否则raid无法被迁移

执行上述命令后用fdisk -l /dev/sdb查看分区如下图:

wKioL1PHrx7g6BeVAADhBJlzoWw197.jpg

使内核识别新建分区执行如下命令
partx -a /dev/sdb
kpartx -af /dev/sdb


有时需要反复执行几次内核才会识别
cat /proc/partitions

wKioL1PHr37xQISnAAD-gjri5J4024.jpg

内核已经识别了我们新创建的分区

创建Raid5
mdadm -C /dev/md0 -n 3 -l 5 -a yes /dev/sdb{1,2,3}


执行上述命令后结果如下图:

wKioL1PHr7TAK8u4AACgPVz4y8w742.jpg


查看内核是否识别
cat /proc/mdstat


wKioL1PHr-ryvUpyAAD38AzJAx8533.jpg内核已经识别



以raid为基础创建分区以供lvm使用分区大小分别为 2G 3G 4G
方法与上述创建分区类似 只不过设备变为/dev/md0  设备类型为8e 
echo -e "n \n p \n 1 \n \n +2G \n  t  \n  8e  \n w " |fdisk /dev/md0
echo -e "n \n p \n 2 \n \n +3G \n  t  \n  2  \n 8e \n w " |fdisk /dev/md0
echo -e "n \n p \n 3 \n \n +4G \n  t  \n  3  \n  8e  \n w " |fdisk /dev/md0


执行后结果为:

wKiom1PHrxfB0ZV4AADdXr6DS2g627.jpg

准备工作结束



创建pv我们首先使用第1和2分区 第3分区用来演示向卷组添加物理设备
pvcreate /dev/md0p1
pvcreate /dev/md0p2


执行结果如下图:

wKiom1PHr1WSNSkGAADS1Rg_GzA857.jpg

查看 创建结果
pvs

wKioL1PHsJ_CtUuNAACNFMSiHb8835.jpg

Pv创建成功接着创建VG


vgcreate -s 4M testvg /dev/md0p1 /dev/md0p2


执行结果如下图:

wKiom1PHsBPhQ79UAAB29aIqB5c428.jpg

查看 创建结果
vgs

wKioL1PHsY_Q3Dl0AABjT7KI6bA692.jpg

Vg创建成功下面创建lv


lvcreate -L 2G -n testlv testvg

执行结果如下图:

wKioL1PHsc2xR1g8AABga_wQ0Vw352.jpg


查看创建结果

wKiom1PHsNWxfrS0AAB1LeV_C2E570.jpg

至此lv创建成功格式化后挂载就可以正常使用了
mke2fs -t ext4 /dev/testvg/testlv


wKiom1PHsP_CBpCzAAOZJIipsac742.jpg

将其挂载至 /mnt 

mount -t ext4 /dev/testvg/testlv /mnt
cp /etc/fstab /mnt


结果如下:


wKiom1PHsVXS1XWlAAAlx1GQAMs528.jpg


lv的动态扩展

我们已经成功的创建了一个逻辑分区下面介绍如何扩展逻辑分区

假设我们想把当前的2G分区扩展至3G

So easy只需要执行如下命令
lvextend -L 3G /dev/testvg/testlv


结果如下图:


wKiom1PHsbSQBtENAAEZIXuKEdg313.jpg
使文件系统生效
resize2fs /dev/testvg/testlv

wKiom1PHsd-g5yzmAAGB1S0JX-s176.jpg


那么如何缩减逻辑分区大小 特别注意:缩减分区前一定要注意缩减后的大小要能容纳当前分区的数据大小 否则数据将损坏  

将分区缩小至100M

第一步:卸载分区   注意在线缩减只支持ext3 我们是ext4的所以要卸载否则会损坏数据 切记!!

e2fsck -f  /dev/testvg/testlv

wKiom1PHsiuRH7ApAAGWrp6_kLA911.jpg

显示文件系统正常

首先要缩减文件系统边界
resize2fs /dev/testvg/testlv 100M

wKiom1PHsmPzNjt0AAEDk6RlHig039.jpg

文件系统缩减成功

然后缩减物理边界
lvreduce -L 100M /dev/testvg/testlv

wKiom1PHsoqyhxJFAAJMw_URjWw246.jpg

检查文件系统
e2fsck -f /dev/testvg/testlv
最后挂载文件系统
mount /dev/testvg/testlv /mnt
ls /mnt


wKiom1PHstTTvGxiAABebWS5QVs147.jpg

查看数据
Cat /mnt/fstab

wKiom1PHsvfD4FX7AALYA1vz12M752.jpg

数据健在 至此缩减成功!!


向卷组添加新的分区

我们将开始创建的/dev/md0p3添加到卷组 以扩充卷组容量供lv使用

开始前我们先看下当前剧组的大小以作对比

wKioL1PHtEuTEvLaAABeVM1D8jE843.jpg

pvcreate /dev/md0p3
vgextend testvg /dev/md0p3

wKiom1PHs2SBtNmLAADyqrPal-E511.jpg

查看添加结果
vgs

wKioL1PHtKnDT96gAABgCwQlip8102.jpg

扩展卷组成功

缩减卷组用:缩减前首先要确保所移走的分区不含数据 pvmove  /dev/md0p3

            然后在从卷组中移除                   vgreduce testvg /dev/md0p3 

这里就不做演示了.


LVM的快照功能

什么是快照?

wKioL1PHtOzS5BqkAAA52MkekCA658.jpg


    所谓快照就是文件系统中某一时刻时文件的状态 ,它也是一个逻辑卷有自己的挂载目录只不过此逻辑卷比较特殊当它所“拍摄”的分区文件不发生改变时他其中的文件内容就是和所“拍摄”分区的映射.

但是当源文件发生改变时,他就会复制一份没改变的文件到自己分区中,这样它其中的内容就是过去某一时刻文件系统的内容未曾改变.当你备份快照分区的内容时就是文件系统某时刻的内容,这样就防止一种情况就是当文件一旦发生改变就会复制一份到自己的分区中。

快照的创建

先查看一下当前逻辑卷的大小再决定创建快照的大小
lvs


wKiom1PHtDHR9OzlAACG8042rLM387.jpg
lvcreate -s -L 20M -n testsnap /dev/testvg/testlv

wKioL1PHtXnxFZB0AAB3aKeXEX4012.jpg

wKiom1PHtGqzl2v1AAONq0lBN5A727.jpg


现在我没将被“拍摄”的数据做下修改
echo “hello kitty” >>/mnt/fstab
两者数据比较如下图

wKioL1PHtbby8797AADTLh13irc958.jpg

是的快照中的数据不曾改变!!

实际中的应用

以此为例:

mount  -o remount,ro  /mnt &&lvcreate -s -L 20M -n testsnap /dev/testvg/testlv && mount -o remount,rw /dev/testvg/testlv


要快速完成因此三条命令要一气呵成....


本文出自 “梦想一克拉” 博客,请务必保留此出处http://centod.blog.51cto.com/9108378/1439653