raid -- LVM


===================================================================

Linux存储模式


应用程序

虚拟文件系统提供接口

文件系统 ext3,ext4vfat,ntfs

硬件驱动 sda, sdb

硬件




硬盘类型:

传统硬盘:

ide,sata家用

scsi sas

固态硬盘

ssd


从集成角度分:

直连存储

普通阵列还是是普通硬盘数据总线连接

高端阵列 SAN 存储区域网络,使用光纤把计算机和存储设备连接起来组成的网络,一般用于大型数据库,适合IO密集型的应用

NAS网络附加存储适合cpu密集型的应用


分布式存储(分布式文件系统)



阵列raid:

硬件raid

软件raid


应用程序

虚拟文件系统提供接口

文件系统 ext3,ext4vfat,ntfs

硬件驱动 sda, sdb

硬件raid

硬件


应用程序

虚拟文件系统提供接口

文件系统 ext3,ext4vfat,ntfs

硬件驱动 sda, sdb

硬件



常见的raid阵列算法:

raid0

raid0不支持热插拔


条带化存放数据的

至少两个硬盘

能够提高N倍读写速度,N是磁盘的个数

不能损坏任意一个硬盘RAID 0只是单纯地提高性能,并没有为数据的可靠性提供保证,而且其中的一个磁盘失效将影响到所有数据。因此,RAID 0不能应用于数据安全性要求高的场合。



raid1

镜像raid

至少两个硬盘

能够数据进行冗余(冗余不等备份)

可以坏掉任何硬盘,只要剩下一个好的就OK

基本不会带来什么性能提升,个别的raid卡能够对读数据提高速度,写数据肯定不会提高。


raid5

至少3个设备组长

可以提供数据的读写性能,也能提供数据冗余

只能坏掉任意一个设备。

支持热插拔


raid10


实际是将RAID 0RAID 1标准结合的产物,在连续地以位或字节为单位分割数据并且并行

/写多个磁盘的同时,为每一块磁盘作磁盘镜像进行冗余它的优点是同时拥有RAID 0

超凡速度和RAID 1的数据高可靠性,但是CPU占用率同样也更高,而且磁盘的利用率比






例子1:使用软raid的方法实现raid0


建立一个虚拟机,给它额外增加四个1G的硬盘


raid0不支持热插拔


# mdadm --create/dev/md0 --level=0 --raid-devices=2 /dev/vdb /dev/vdc


# cat /proc/mdstat

Personalities :[raid6] [raid5] [raid4] [raid0]

md0 : active raid0vdc[1] vdb[0]

4093952 blocks super 1.2 512k chunks


unused devices:<none>


格式化、挂载好了

# mkfs.ext4/dev/md0



验证原理:

# mount -o sync/dev/md0 /mnt

# iostat -d -m vdb vdc 2

# ddif=/dev/zero of=/mnt/200M bs=1Mcount=200



临时把阵列拆掉

# umount /mnt

# mdadm --stop/dev/md0 临时拆掉,数据不会丢失

mdadm: stopped/dev/md0



重新组装

# mdadm -As

mdadm: /dev/md/0has been started with 2 drives.

会自动扫描所有硬盘,通过查看硬盘是否存在软raid的组装信息,如果有,就把他们组装



如果想永久拆掉阵列,下次不会自动组装(彻底破坏阵列)

# mdadm --stop/dev/md0

# mdadm--zero-superblock /dev/vdb

# mdadm--zero-superblock /dev/vdc



例子2:实现raid1,想方法去验证raid1的原理

# mdadm --create /dev/md1 --level=1 --raid-devices=2/dev/vdd /dev/vde


# watch "cat/proc/mdstat"

Personalities :[raid6] [raid5] [raid4] [raid0] [raid1]

md1 : active raid1vde[1] vdd[0]

2046964 blocks super 1.2 [2/2] [UU]

[=======>.............] resync = 38.9% (797632/2046964) finish=0

.5min speed=36256K/sec 首次组装,需要初始化后才能使用



验证原理:

如果是真实环境下,硬盘损坏掉,直接把坏掉硬盘拔掉,然后换上新的硬盘,它重新计算和初始化,计算完毕(把数据同步到新的硬盘),raid1又恢复了。

# mdadm /dev/md1--fail /dev/vdd

mdadm: set/dev/vdd faulty in /dev/md1


# cat /proc/mdstat

Personalities :[raid6] [raid5] [raid4] [raid0] [raid1]

md1 : active raid1vde[1] vdd[0](F)

2046964 blocks super 1.2 [2/1] [_U]


# mdadm /dev/md1--add /dev/vdb

# watch "cat/proc/mdstat"

Personalities :[raid6] [raid5] [raid4] [raid0] [raid1]

md1 : active raid1vde[1] vdd[0]

2046964 blocks super 1.2 [2/2] [UU]

[=======>.............] resync = 38.9% (797632/2046964) finish=0

.5minspeed=36256K/sec 同步完毕,功能完整raid1又恢复了



把就的故障硬盘移除

# mdadm /dev/md1 --remove /dev/vdd

mdadm: hot removed/dev/vdd from /dev/md1




例子3:实现raid5

在此之前,需要知道Linux硬盘是否能正常运行

fdisk -l


Disk /dev/sda:21.5 GB, 21474836480 bytes

255 heads, 63sectors/track, 2610 cylinders

Units = cylindersof 16065 * 512 = 8225280 bytes

Sector size(logical/physical): 512 bytes / 512 bytes

I/O size(minimum/optimal): 512 bytes / 512 bytes

Disk identifier:0x000e918e


Device Boot Start End Blocks Id System

/dev/sda1 * 1 638 5120000 83 Linux

Partition 1 doesnot end on cylinder boundary.

/dev/sda2 638 1913 10240000 83 Linux

/dev/sda3 1913 2550 5120000 82 Linux swap / Solaris


Disk /dev/sdb:21.5 GB, 21474836480 bytes

255 heads, 63sectors/track, 2610 cylinders

Units = cylindersof 16065 * 512 = 8225280 bytes

Sector size(logical/physical): 512 bytes / 512 bytes

I/O size(minimum/optimal): 512 bytes / 512 bytes

Disk identifier:0x18a3f71e


Device Boot Start End Blocks Id System

/dev/sdb1 1 2610 20964793+ 83 Linux


Disk /dev/sdc:1073 MB, 1073741824 bytes

255 heads, 63sectors/track, 130 cylinders

Units = cylindersof 16065 * 512 = 8225280 bytes

Sector size(logical/physical): 512 bytes / 512 bytes

I/O size(minimum/optimal): 512 bytes / 512 bytes

Disk identifier:0x2933311b


Device Boot Start End Blocks Id System

/dev/sdc1 1 130 1044193+ 83 Linux


Disk /dev/sdd:1073 MB, 1073741824 bytes

255 heads, 63sectors/track, 130 cylinders

Units = cylindersof 16065 * 512 = 8225280 bytes

Sector size(logical/physical): 512 bytes / 512 bytes

I/O size(minimum/optimal): 512 bytes / 512 bytes

Disk identifier:0x8fd865c7


Device Boot Start End Blocks Id System

/dev/sdd1 1 130 1044193+ 83 Linux





# mdadm --create /dev/md0 --level=5 --raid-devices=3/dev/vd{b,c,d} --spare-devices=1 /dev/vde


# watch "cat/proc/mdstat"

Personalities :[raid6] [raid5] [raid4] [raid0] [raid1]

md0 : active raid5vdd[4] vde[3](S) vdc[1] vdb[0]

4092928 blocks super 1.2 level 5, 512kchunk, algorithm 2 [3/2] [

UU_]

[=>...................] recovery = 6.8% (140416/2046464) finish

=1.5minspeed=20059K/sec


就算在虚拟机中添加了硬盘还需创建分区表。(fdisk /dev/sda-f


等待初始化完毕,就能使用

查看RAID是否成功的创建是否运行的正常,有两种方法

查看详细信息:mdadm --detail /dev/md0命令查看RAID的详细信息



验证原理:

1、验证三个原始设备都是同时读写的

2、验证数据冗余功能

把其中原始设备设定为故障,由于我们添加了备用盘,所以他会自动进行恢复,无需手工干预


=======================================================================================

LVM

LVM是逻辑盘卷管理(Logical Volume Manager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分LVM区管理的灵活性。

LVM是在磁盘分区和文件系统之间添加的一个逻辑层,来为文件系统屏蔽下层磁盘分区布局,提供一个抽象的盘卷,在盘卷上建立文件系统。


基本术语

前面谈到,LVM是在磁盘分区和文件系统之间添加的一个逻辑层,来为文件系统屏蔽下层磁盘分区布局,提供一个抽象的盘卷,在盘卷上建立文件系统。首先我们讨论以下几个LVM术语:
*物理存储介质(The physical media)
这里指系统的存储设备:硬盘,是 存储系统最低层的 存储单元。
*物理卷(physical volume,PV)
物理卷就是指 硬盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数。
*卷组(Volume Group,VG)
LVM卷组类似于非LVM系统中的物理硬盘,其由物理卷组成。可以在卷组上创建一个或多个“LVM分区”(逻辑卷),LVM卷组由一个或多个物理卷组成。
*逻辑卷(logical volume,LV)
LVM的逻辑卷类似于非LVM系统中的 硬盘分区,在逻辑卷之上可以建立文件系统(比如/home或者/usr等)。
*PE(physical extent,PE)
每一个物理卷被划分为称为PE(PhysicalExtents)的 基本单元,具有唯一编号的PE是可以被LVM寻址的最小单元。PE的大小是可配置的,默认为4MB。
*LE(logical extent,LE)
逻辑卷也被划分为被称为LE(LogicalExtents)的可被 寻址的基本单位。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。
首先可以看到,物理卷(PV)被由大小等同的 基本单元PE组成。
一个卷组由一个或多个物理卷组成。
从上图可以看到,PE和LE有着一一对应的关系。逻辑卷建立在卷组上。逻辑卷就相当于非LVM系统的 磁盘分区,可以在其上创建文件系统。
下图是 磁盘分区、卷组、逻辑卷和文


优点

LVM通常用于装备大量磁盘的系统,但它同样适于仅有一、两块硬盘的小系统。
小系统使用LVM的益处
传统的文件系统是基于分区的,一个文件系统对应一个分区。这种方式比较直观,但不易改变:
1.不同的分区相对独立,无相互联系,各分区空间很易利用不平衡,空间不能充分利用;
2.当一个文件系统/分区已满时,无法对其扩充,只能采用重新分区/建立文件系统,非常麻烦;或把分区中的数据移到另一个更大的分区中;或采用符号连接的方式使用其它分区的空间。
3.如果要把硬盘上的多个分区合并在一起使用,只能

LVM

采用再分区的方式,这个过程需要数据的备份与恢复。当采用LVM时,情况有所不同:
1.硬盘的多个分区由LVM统一为卷组管理,可以方便的加入或移走分区以扩大或减小卷组的 可用容量,充分利用硬盘空间;
2.文件系统建立在逻辑卷上,而逻辑卷可根据需要改变大小(在卷组容量范围内)以满足要求;
3.文件系统建立在LVM上,可以跨分区,方便使用;
大系统使用LVM的益处
在使用很多硬盘的大系统中,使用LVM主要是方便管理、增加了系统的扩展性。
在一个有很多不同容量硬盘的大型系统中,对不同的用户的空间分配是一个技巧性的工作,要在用户需求与实际可用空间中寻求平衡。
用户/用户组的空间建立在LVM上,可以随时按要求增大,或根据使用情况对各逻辑卷进行调整。当系统空间不足而加入新的硬盘时,不必把用户的数据从原硬盘迁移到新硬盘,而只须把新的分区加入卷组并扩充逻辑卷即可。同样,使用LVM可以在不停服务的情况下。把用户数据从旧硬盘转移到新硬盘空间中去。


友情链接:http://redking.blog.51cto.com/27212/123126


LVM 是一种把硬盘驱动器空间分配成逻辑卷的方法,这样硬盘就不必使用分区而被简易地重划大小。主要就是这个功能,可以随意扩展或者缩小某个分区的大小,前提这个分区是逻辑卷管理的。


从硬盘驱动器中创建物理卷(physical volumes-PV)。
从物理卷中创建卷组(volume groups-VG)。
从卷组中创建逻辑卷(logical volumes-LV),并分派逻辑卷挂载点
其中只有逻辑卷才可以写数据


分一个物理分区,建立一个物理卷,然后这个物理卷建立一个卷组,我们就可以在这个卷组里面去分无数个逻辑卷,而且逻辑卷可以随意扩大缩小,不会对物理分区有影响,逻辑卷的功能也和物理分区差不多,一样可以格式化成随意的文件系统,挂载到随意的目录。 同时也支持quota


LVM的优点就是可以随意拉升和缩小。在基础部分我们已经用图形界面创建过,现在我们使用命令来创建
第一步:划分物理分区
使用和刚才一样de方法
#fdisk /dev/sda
输入 n哈~然后回车使用默认的起始点,接着输入大小哈。我们创建一个300M大小的空间,输入 +300M
image
注意,这里比刚才多一步,由于LVM的ID和EXT3不一样,而系统默认是的EXT3,所以这里我们需要修改一下
在主菜单输入 T
系统会让你选择要改变ID的分区,输入我们刚创建的分区,也就是最后一个8

image

Hex code (type L to list codes):
这里输入分区类型,LVM是8e,如果你不记得了,可以使用l 查看分区ID的对应列表
输入l后,系统会列出所有分区对应的ID号
image
在列表中,我们可以看见LINUX LVM对应的是8e,所以我们直接输入8e,然后回车,
在主菜单输入p,查看当前分区情况
image
看见最后你分出来的分区ID已经是8e,那么就可以输入w 保存退出
退出以后,记得要重启这个分区才能生效。我们要使用一个命令让它立即生效
#partprobe

image

到这里,第一步创建物理分区完成哈~
第二步:创建LVM的物理卷
使用命令
#pvcreate /dev/sdax
sdax就是你刚才创建的分区
创建成功后,可以使用 pvdisplay 查看
image
image
那我们在这里暂停一下,给大家回顾下什么是LVM
LVM就想一种磁盘管理方式,叫逻辑卷管理器,从 Red Hat Linux 8.0 开始,逻辑卷管理器(LVM)可以在硬盘驱动器分配上使用,LVM 是一种把硬盘驱动器空间分配成逻辑卷的方法,这样硬盘就不必使用分区而被简易地重划大小。

image

LVM有点象WIN下的动态磁盘,动态磁盘知道吗?LVM 是一种把硬盘驱动器空间分配成逻辑卷的方法,这样硬盘就不必使用分区而被简易地重划大小。主要就是这个功能,可以随意扩展或者缩小某个分区的大小,前提这个分区是逻辑卷管理的。
image
嗯,这个就是它的主要功能
从硬盘驱动器中创建物理卷(physical volumes-PV)。
从物理卷中创建卷组(volume groups-VG)。
从卷组中创建逻辑卷(logical volumes-LV),并分派逻辑卷挂载点
其中只有逻辑卷才可以写数据
image
没有大小限制哈,只要你硬盘有空间,比如刚才我们说的硬盘只支持15个分区,那么我们就可以使用LVM来把分区数量无限化

image

对 ,分一个物理分区,建立一个物理卷,然后这个物理卷建立一个卷组,我们就可以在这个卷组里面去分无数个逻辑卷,而且逻辑卷可以随意扩大缩小,不会对物理分区有影响,逻辑卷的功能也和物理分区差不多,一样可以格式化成随意的文件系统,挂载到随意的目录。 同时也支持quota
好了,我们继续哈~
刚才我们创建了物理卷PV-(physical volumes),可以使用pvdisplay查看。
PV创建好以后,我们就要创建卷组了,volume groups-VG ,卷组是在物理卷的基础上创建的,也就把物理卷的空间拿来给卷组管理,然后逻辑卷就可以向卷组要空间了
第三步:创建卷组
#vgcreate 卷组名 物理卷
#vgcreate myvg /dev/sda8
创建成功后,可以使用 vgdisplay 来查看卷组

image

第四步:创建逻辑卷 (重点)
#lvcreate -L 大小 卷组名 -n 逻辑卷名称
我就从卷组里面分100M出来创建一个逻辑卷
#lvcreate -L 100M myvg -n mylv1
image
OK,现在我们格式化mylv1为ext3文件格式并挂载到/mnt/mylv1目录
第五步:格式化、挂载逻辑卷
#mkfs.ext3 /dev/myvg/mylv1
image
#mkdir /mnt/mylv1
#mount -t ext3 /dev/myvg/mylv1 /mnt/mylv1
然后进入这个目录,能够看见lost+fount目录就成功了
image
这个逻辑卷使用fdisk -l 是查看不到滴,只有使用lvdisplay 查看
[root@rhel5 /mnt/mylv1]# fdisk -l
Disk /dev/sda: 32.2 GB, 32212254720 bytes
255 heads, 63 sectors/track, 3916 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 13 104391 83 Linux
/dev/sda2 14 1318 10482412+ 83 Linux
/dev/sda3 1319 1971 5245222+ 83 Linux
/dev/sda4 1972 3916 15623212+ 5 Extended
/dev/sda5 1972 2624 5245191 83 Linux
/dev/sda6 2625 2689 522081 82 Linux swap / Solaris
/dev/sda7 2690 2751 497983+ 83 Linux
/dev/sda8 2752 2788 297171 8e Linux LVM
[root@rhel5 /mnt/mylv1]# lvdisplay
--- Logical volume ---
LV Name /dev/myvg/mylv1
VG Name myvg
LV UUID xXbNEd-LAQa-xLtB-c92X-3BJ9-qfWu-z54ejZ
LV Write Access read/write
LV Status available
# open 1
LV Size 100.00 MB
Current LE 25
Segments 1
Allocation inherit
Read ahead sectors 0
Block device 253:0
[root@rhel5 /mnt/mylv1]#
如果要查看这个逻辑卷挂在到哪了,可以使用#mount 查看
image
现在我们再在刚才的卷组里面划分一个逻辑卷mylv2出来,大小是150M,文件格式为ext3,挂载到/mnt/mylv2
#lvcreate -L 150M myvg -n mylv2
#mkfs.ext3 /dev/myvg/mylv2
#mkdir /mnt/mylv2
#mount -t ext3 /dev/myvg/mylv2 /mnt/mylv2
就这四条命令就OK了哈~
image
现在mylv1是100M,mylv2是150M哈~
我现在要把mylv2减少50M ,将这50M添加到mylv1里面去哈,大家看下面
使用命令
#lvresize -L 绝对大小 对象
#lvresize -L 100M /dev/myvg/mylv2
image
然后确定大小
resize2fs /dev/myvg/mylv2
注意:缩小空间时可能会导致数据损坏,就像下面反复报错误哈~
image
正确滴方法是:
对于lvm,如果是扩大某个lv,操作比较简单,但如果是缩小lv,则有一定的风险。我们先要缩小/dev/myvg/lv2文件系统,然后才能缩小lvm,如果在缩小lvm之前忘了缩小文件系统,这时候可以这样来挽救:
1:不要进行对该分区的任何写入操作,最好是也不read
2:用lvresize2fs重新扩大该分区,且扩大的容量是刚刚缩小的容量(数字一定要和刚刚的一致哈~)。
3:缩小文件系统
4:最后缩小逻辑卷哈。
5:确认文件系统和逻辑卷大小一致。
[root@rhel5 ~]# umount /mnt/mylv2
[root@rhel5 ~]# lvresize -L 150M /dev/myvg/mylv2
Rounding up size to full physical extent 152.00 MB
Extending logical volume mylv2 to 152.00 MB
Logical volume mylv2 successfully resized
[root@rhel5 ~]# e2fsck -f /dev/myvg/mylv2
e2fsck 1.39 (29-May-2006)
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/mylv2: 12/38912 files (8.3% non-contiguous), 10580/155648 blocks
[root@rhel5 ~]# resize2fs /dev/myvg/mylv2 100M
resize2fs 1.39 (29-May-2006)
Resizing the filesystem on /dev/myvg/mylv2 to 102400 (1k) blocks.
The filesystem on /dev/myvg/mylv2 is now 102400 blocks long.
[root@rhel5 ~]# lvresize -L 100M /dev/myvg/mylv2
WARNING: Reducing active logical volume to 100.00 MB
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce mylv2? [y/n]: y
Reducing logical volume mylv2 to 100.00 MB
Logical volume mylv2 successfully resized
[root@rhel5 ~]# e2fsck -f /dev/myvg/mylv2
e2fsck 1.39 (29-May-2006)
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/mylv2: 12/26624 files (8.3% non-contiguous), 9032/102400 blocks
[root@rhel5 ~]# mount -t ext3 /dev/myvg/mylv2 /mnt/mylv2
[root@rhel5 ~]#
ok,这样就缩小了LV的大小,注意要先umount哈~
使用同样的命令给mylv1加50M,这个就比较简单了哈~
#lvresize -L 150M /dev/myvg/mylv1
image
确定大小,或者说是让命令生效
#resize2fs /dev/myvg/mylv1
image
这样就完成了LVM的扩展和减少,我们用lvdisplay查看一下哈~
image
现在我们使用的空间都是在卷组里面调用的,如果卷组的空间用完了怎么办?
那我们就需要给卷组拉升大小,给卷组拉升大小的方法
第一步、创建物理分区
#fdisk /dev/sda
然后分一个分区,你想多大就多大,改变分区ID位8e。 然后保存退出
[root@rhel5 /mnt/mylv1]# fdisk /dev/sda
The number of cylinders for this disk is set to 3916.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
(e.g., DOS FDISK, OS/2 FDISK)
Command (m for help): n
First cylinder (2789-3916, default 2789):
Using default value 2789
Last cylinder or +size or +sizeM or +sizeK (2789-3916, default 3916): +500M
Command (m for help): p
Disk /dev/sda: 32.2 GB, 32212254720 bytes
255 heads, 63 sectors/track, 3916 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 13 104391 83 Linux
/dev/sda2 14 1318 10482412+ 83 Linux
/dev/sda3 1319 1971 5245222+ 83 Linux
/dev/sda4 1972 3916 15623212+ 5 Extended
/dev/sda5 1972 2624 5245191 83 Linux
/dev/sda6 2625 2689 522081 82 Linux swap / Solaris
/dev/sda7 2690 2751 497983+ 83 Linux
/dev/sda8 2752 2788 297171 8e Linux LVM
/dev/sda9 2789 2850 497983+ 83 Linux
Command (m for help): t
Partition number (1-9): 9
Hex code (type L to list codes): 8e
Changed system type of partition 9 to 8e (Linux LVM)
Command (m for help): p
Disk /dev/sda: 32.2 GB, 32212254720 bytes
255 heads, 63 sectors/track, 3916 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 13 104391 83 Linux
/dev/sda2 14 1318 10482412+ 83 Linux
/dev/sda3 1319 1971 5245222+ 83 Linux
/dev/sda4 1972 3916 15623212+ 5 Extended
/dev/sda5 1972 2624 5245191 83 Linux
/dev/sda6 2625 2689 522081 82 Linux swap / Solaris
/dev/sda7 2690 2751 497983+ 83 Linux
/dev/sda8 2752 2788 297171 8e Linux LVM
/dev/sda9 2789 2850 497983+ 8e Linux LVM
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table.
The new table will be used at the next reboot.
Syncing disks.
[root@rhel5 /mnt/mylv1]#
使用partprobe 使分区马上生效
image
第二步:创建物理卷
#pvcreate /dev/sda9
image
第三步:拉升卷组,把刚建立的物理卷的空间加到以前的卷组中 (重点)
#vgextend 卷组名 物理卷
#vgedtend myvg /dev/sda9
image
现在你就可以使用vgdisplay 来查看新的myvg 卷组的大小了
#vgdisplay myvg
image
给卷组增加大小后,我们就可以把新的空间分配到LVM中,这样LVM的空间就可以无限扩张
下面我们来看下删除逻辑卷
我们创建LVM是从 物理分区-物理卷-卷组-逻辑卷-挂载到目录这个顺序来的
删除当然像反安装一样,反正来哈~
1)先是取消挂载
#umount /mnt/mylv1
#umount /mnt/mylv2
image
2)然后就是删除LVM
#lvremove /dev/myvg/mylv1
#lvremove /dev/myvg/mylv2
image
3)然后就删除卷组
#vgremove myvg
image
4)然后删除物理卷
#pvremove /dev/sda8
#pvremove /dev/sda9
image
5)最后就是删除物理分区了
fdisk /dev/sda
[root@rhel5 ~]# fdisk /dev/sda
The number of cylinders for this disk is set to 3916.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
(e.g., DOS FDISK, OS/2 FDISK)
Command (m for help): p
Disk /dev/sda: 32.2 GB, 32212254720 bytes
255 heads, 63 sectors/track, 3916 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 13 104391 83 Linux
/dev/sda2 14 1318 10482412+ 83 Linux
/dev/sda3 1319 1971 5245222+ 83 Linux
/dev/sda4 1972 3916 15623212+ 5 Extended
/dev/sda5 1972 2624 5245191 83 Linux
/dev/sda6 2625 2689 522081 82 Linux swap / Solaris
/dev/sda7 2690 2751 497983+ 83 Linux
/dev/sda8 2752 2788 297171 8e Linux LVM
/dev/sda9 2789 2850 497983+ 8e Linux LVM
Command (m for help): d
Partition number (1-9): 9
Command (m for help): p
Disk /dev/sda: 32.2 GB, 32212254720 bytes
255 heads, 63 sectors/track, 3916 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 13 104391 83 Linux
/dev/sda2 14 1318 10482412+ 83 Linux
/dev/sda3 1319 1971 5245222+ 83 Linux
/dev/sda4 1972 3916 15623212+ 5 Extended
/dev/sda5 1972 2624 5245191 83 Linux
/dev/sda6 2625 2689 522081 82 Linux swap / Solaris
/dev/sda7 2690 2751 497983+ 83 Linux
/dev/sda8 2752 2788 297171 8e Linux LVM
Command (m for help): d
Partition number (1-8): 8
Command (m for help): p
Disk /dev/sda: 32.2 GB, 32212254720 bytes
255 heads, 63 sectors/track, 3916 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 13 104391 83 Linux
/dev/sda2 14 1318 10482412+ 83 Linux
/dev/sda3 1319 1971 5245222+ 83 Linux
/dev/sda4 1972 3916 15623212+ 5 Extended
/dev/sda5 1972 2624 5245191 83 Linux
/dev/sda6 2625 2689 522081 82 Linux swap / Solaris
/dev/sda7 2690 2751 497983+ 83 Linux
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table.
The new table will be used at the next reboot.
Syncing disks.
[root@rhel5 ~]# partprobe
[root@rhel5 ~]#
这样逻辑卷就算成功删除了
LVM就这样了。我讲的比较浅,如果大家有更深的用法,可以下来和我探讨,有什么要问的,可以问哈~

===========================================================================

重新理解:

LVM逻辑卷管理




传统硬盘:


盘碟1 --\ /----分区1

------- 硬盘 -----

盘碟2 --/ \----分区2



LVM结构:


物理卷1 ---\ /-----逻辑卷1

------- 卷组 -----

物理卷2 ---/ \-----逻辑卷2





物理卷:所有能够存放数据库的块设备,都能够成为物理卷,它是卷组容量的提供者,也是底层实际存放数据的硬件


卷组:由多个物理卷组成的集体,它是物理卷的容量的整合。


逻辑卷:从卷组中划分出一部分空间作为存放的数据的逻辑设备。可以对它进行格式化、挂载使用



LVM逻辑卷的一些特性:

方便调整容量

支持一些高级特性:条带化、镜像、快照功能



应用程序

虚拟文件系统提供接口

文件系统 ext3,ext4vfat,ntfs

LVM驱动

硬件驱动 sda, sdb

硬件



例子1:实现简单的逻辑卷


1、创建物理卷

# pvcreate /dev/sda7 /dev/sda8 /dev/sda9


就是在块设备上写入了一些关于逻辑卷的元数据信息


查看物理卷

# pvs

PV VG Fmt Attr PSize PFree

/dev/sda7 lvm2 a-- 2.01g 2.01g

/dev/sda8 lvm2 a-- 2.01g 2.01g

/dev/sda9 lvm2 a-- 2.01g 2.01g


# pvdisplay


2、创建卷组

# vgcreate myvg/dev/sda7 /dev/sda8 /dev/sda9

Volume group "myvg" successfullycreated


创建了一个名字为myvg的卷组,它是由sda7,sda8,sda9等物理卷组成的。


# vgs

VG #PV #LV #SNAttr VSize VFree

myvg 3 0 0 wz--n- 6.01g 6.01g


# vgdisplay


3、创建逻辑卷

# lvcreate -nmysqldata -L 2G myvg

Logical volume "mysqldata" created


创建了一个名字为mysqldata,容量为2G的逻辑卷,容量是从myvg卷组中取出的


# lvs

LV VG Attr LSize Origin Snap% Move Log Copy% Convert

mysqldata myvg -wi-a- 2.00g

# lvdisplay


# ls/dev/myvg/mysqldata


# mkfs.ext4/dev/myvg/mysqldata



例子:一些常见的管理操作


1、对逻辑卷进行扩容

特点:支持在线热调整,无需取消挂载,在调整的过程中,逻辑卷可以正常读写

前提:逻辑卷所在的卷组有足够的空间允许本次调整


# vgs

VG #PV #LV#SN Attr VSize VFree

myvg 3 1 0 wz--n- 6.01g 4.01g


# lvs

LV VG Attr LSize Origin Snap% Move Log Copy% Convert

mysqldata myvg -wi-ao 2.00g



# lvextend/dev/myvg/mysqldata -L +1G <--- +1G 在原有的容量的基础上增加了1G

Extending logical volume mysqldata to 3.00GiB

Logical volume mysqldata successfully resized


# resize2fs/dev/myvg/mysqldata <---刷新文件系统的元数据,更新可用容量信息



# lvs

LV VG Attr LSize Origin Snap% Move Log Copy% Convert

mysqldata myvg -wi-ao 3.00g





2、对逻辑卷进行裁剪容量

一般不会进行容量裁剪,因为很可能会对文件系统进行永久性地损坏。千万要小心。

不支持在线调整


1

# umount/dev/myvg/mysqldata


2)调整之前必须保证文件系统是干净,没有损坏数据

# fsck -f/dev/myvg/mysqldata


3必须先调整文件系统的信息

# resize2fs /dev/myvg/mysqldata1G <---把原来的3G变成现在的1G

前提:你的逻辑卷的已经使用的空间不能大于1G


4对逻辑卷进行裁剪容量

# lvreduce/dev/myvg/mysqldata -L 1G

WARNING: Reducing active logical volume to1.00 GiB

THIS MAY DESTROY YOUR DATA (filesystem etc.)

Do you really wantto reduce mysqldata? [y/n]: y


5再次检测文件系统,保证没错

# fsck -f/dev/myvg/mysqldata


测试挂载、使用




3、对卷组进行扩容

增加新的物理卷到卷组中

# pvcreate /dev/sda10

# vgextend myvg/dev/sda10


# vgs

VG #PV #LV#SN Attr VSize VFree

myvg 4 1 0 wz--n- 8.02g 7.02g



4、对卷组进行裁剪容量

裁剪前:

# pvs

PV VG Fmt Attr PSize PFree

/dev/sda10 myvg lvm2 a-- 2.00g 2.00g

/dev/sda7 myvg lvm2 a-- 2.00g 1.00g <--- 该物理卷的空间已经分配出去给某个逻辑卷使用,所以不能裁掉它

/dev/sda8 myvg lvm2 a-- 2.00g 2.00g

/dev/sda9 myvg lvm2 a-- 2.00g 2.00g



# vgreduce myvg/dev/sda10

Removed "/dev/sda10" from volumegroup "myvg"


# pvs

PV VG Fmt Attr PSize PFree

/dev/sda10 lvm2 a-- 2.01g 2.01g <---已经不属于任何卷组

/dev/sda7 myvg lvm2 a-- 2.00g 1.00g

/dev/sda8 myvg lvm2 a-- 2.00g 2.00g

/dev/sda9 myvg lvm2 a-- 2.00g 2.00g



5、移除逻辑卷、移除物理卷、移除卷组


# umount/dev/myvg/mysqldata

# lvremove/dev/myvg/mysqldata

Do you really wantto remove active logical volume mysqldata? [y/n]: y




# vgreduce myvg /dev/sda10

# pvremove/dev/sda10 <---移除的物理卷必须是不属于任何卷组的



# vgremove myvg





例子3:创建条带化的逻辑卷

特点:就是类似于raid0,把数据均衡到多个物理卷,实现IO的并发。



前提:要实现真正条带化带来的性能提升,那么物理卷必须是2个以上,而且是真正的独立的不同的硬件设备(不同的硬盘)



# vgcreate myvg/dev/sda{7,8,9}

Volume group "myvg" successfullycreated


# lvcreate -nmysqldata -L 2G myvg -i 2

Using default stripesize 64.00 KiB

Logical volume "mysqldata" created

-i 2 该逻辑卷的数据会条带化写到两个不同的物理卷


# pvs

PV VG Fmt Attr PSize PFree

/dev/sda7 myvg lvm2 a-- 2.00g 1.00g --

/dev/sda8 myvg lvm2 a-- 2.00g 1.00g --

/dev/sda9 myvg lvm2 a-- 2.00g 2.00g



验证条带化:

# mount -o sync/dev/myvg/mysqldata /mnt

# ddif=/dev/zero of=/mnt/100M bs=1Mcount=100


# iostat -d -msda7 sda8 2



例子4:创建镜像逻辑卷

类似于 raid1 可以实现数据的冗余


# lvcreate -nmysqldata -L 2G -m 1 --mirrorlog core myvg

Logical volume "mysqldata" created


-m 1 数据需要镜像到另外一个独立的物理卷,所有整个逻辑卷会用到两个不同物理卷


# lvs

LV VG Attr LSize Origin Snap% Move Log Copy% Convert

mysqldata myvg mwi-a- 2.00g 13.48

^^m代表镜像 ^^^等待100%同步完成才能使用


# pvs

PV VG Fmt Attr PSize PFree

/dev/sda7 myvg lvm2 a-- 2.00g 4.00m <---

/dev/sda8 myvg lvm2 a-- 2.00g 4.00m <---

/dev/sda9 myvg lvm2 a-- 2.00g 2.00g




验证数据的冗余:

1、把一些数据放在逻辑卷上

2、破坏其中一个物理卷

# dd if=/dev/zero of=/dev/sda8

3、验证数据继续可以被访问

输入何人lvm管理命令,都会提示有一个设备损坏掉、已经无法识别


4、移除故障的设备,把新的物理卷添加进去,把故障的镜像逻辑卷恢复到正常状态

# vgreduce --removemissing --force myvg

myvg卷组中,把故障的物理卷强制移走

# lvs

LV VG Attr LSize Origin Snap% Move Log Copy% Convert

mysqldata myvg -wi-ao 2.00g ^^^^已经没有了100%

已经没有镜像功能了,因为它所镜像的其中一个物理卷已经被移除了


# lvconvert/dev/myvg/mysqldata -m 1 --mirrorlog core

重新把失去镜像功能的mysqldata转换成镜像


myvg/mysqldata: Converted: 0.2%

myvg/mysqldata: Converted: 23.0%

myvg/mysqldata: Converted: 47.1%

myvg/mysqldata: Converted: 70.9%

myvg/mysqldata: Converted: 95.7%

myvg/mysqldata: Converted: 100.0% 恢复完毕


# lvs

LV VG Attr LSize Origin Snap% Move Log Copy% Convert

mysqldata myvg mwi-ao 2.00g 100.00






例子5:创建逻辑卷的快照


不支持镜像逻辑卷做快照。


1、建立一个普通逻辑卷,并且存放一些数据

# lvcreate -n mysqldata -L 2G myvg

Logical volume "mysqldata" created

# mkfs.ext4/dev/myvg/mysqldata



自行存放一些数据


2、对该逻辑卷创建快照

# lvcreate -n mysqldata-sp -L 400M --snapshot/dev/myvg/mysqldata

Logical volume "mysqldata-sp"created


mysqldata逻辑卷创建一个容量为400M的快照,名字为mysqldata-sp



# lvs

LV VG Attr LSize Origin Snap% Move Log Copy% Convert

mysqldata myvg owi-ao 2.00g

mysqldata-sp myvg swi-a- 400.00mmysqldata 0.00


3、挂载创建后的快照卷,及时对里面的数据进行备份移走。

# mount/dev/myvg/mysqldata-sp /media/


使用rsync,cp,tar等命令对快照卷上看到的数据进行备份移走

# cp -a/media/* /backup



4、备份完毕之后,应该把快照删除,免得影响原来逻辑卷读写效率

就算不删除,快照卷的空间一使用完毕,快照卷就彻底失效。

# umount /media/

# lvremove/dev/myvg/mysqldata-sp




例子6:使用逻辑卷的快照实现对mysql数据库的“快速”备份



mysqldump 逻辑备份,只能对innodb实现真正的在线热备份,其他存储引擎锁库备份,备份过程中,数据库不能正常读写

meb 物理热备,也是只能对innodb实现真正的在线热拷贝备份,其他也是要锁库备份。很难做到真正的在线备份。


前提:把mysql数据库的数据目录挂载到逻辑卷中


快照备份的优势:

快照创建的速度非常块,也就一秒以内的事情,对数据库的影响也是一秒以内的影响,创建后,只要在快照卷还没失效之前,对数据库的快照做完成备份,备份的过程不会数据库有任何读写的锁定,但会有一定的性能影响。


# vim /etc/my.cnf

[mysqld]

datadir=/data

user=mysql

socket=/data/mysqld.sock

port=3306

skip-name-resolve


# df -h

。。。

/dev/mapper/myvg-mysqldata

2.0G 67M 1.9G 4% /data



# service mysqldstart



1、对数据库进行全库锁定

对数据库的锁定了,为了避免在创建快照的过程中,避免意外的数据发生,所以锁定是数据全的保障而已。

mysql> flushtables with read lock;


2、创建快照

# lvcreate -nmysqldata-sp -L 400M -s /dev/myvg/mysqldata


3、解锁

mysql> unlocktables;


4、备份快照

# mount/dev/myvg/mysqldata-sp /mnt

# cp -a/mnt/* /backup/



5、移除快照

# lvremove/dev/myvg/mysqldata-sp




注意:为了能使用快照备份的数据把数据库恢复到最新的状态,而不仅仅快照的时候状态,那么备份的时候,应该把二进制日志文件也要做好备份。而二进制文件的备份,应该周期性的,不是跟快照一起做备份。









你可能感兴趣的:(虚拟机,操作系统,bridge,软件包,客户机)