存储大爆料 之 不能说的秘密,新手必读!!
2013-05-09 13:02
218 查看
1 前言
一直以来,对存储的一知半解,甚是不爽,这次借着写一个现网案例的机会,决定先把存储的知识顺一下。存储又称磁阵,粗点讲,其实就是一堆大硬盘,通过某种接口和协议连接起来,通过磁阵管理器统一管理,实物图可见:磁阵图
磁阵管理器可以设置存储的raid类型,可以划分LUN,可以把LUN映射到服务器上,前提是在光纤交换机里划分ZONE来将主机的HBA卡跟磁阵的HBA绑定,光纤线路图可见:磁阵与服务器之间的光纤线路图。
LUN映射到服务器上,就可以在服务器上通过LVM管理存储,映射流程图可见:磁阵映射到服务器的流程图。
这里重点讲LVM的概念和操作,看完这篇文档,你会了解LVM是什么,里面有哪些概念,如何把LUN划分到LV挂载到服务器上,双机切换是怎么对存储进行处理的(这部分我在网上找了好久都没找到)。至于存储如何跟服务器连上,如何做RAID策略,如何划分LUN,不是此次目的,如有兴趣请自己去学习。
2 概念理解
这些概念我直接引用资料里的内容,就不原创了。2.1 LVM
LVM是 Logical Volume Manager(逻辑卷管理)的简写,它由Heinz Mauelshagen在Linux 2.4内核上实现,目前最新版本为:稳定版1.0.5,开发版 1.1.0-rc2,以及LVM2开发版。与 传统的磁盘与分区相比,LVM为计算机提供了更高层次的磁盘存储。它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。通过LVM系统管理员可以轻松管理磁盘分区,如:将若干个磁盘分区连接为一个整块的卷组(volumegroup),形成一个存储池。管理员可以在卷组上随意创建逻辑卷组(logical volumes),并进一步在逻辑卷组上创建文件系统。管理员通过LVM可以方便的调整存储卷组的大小,并且可以对磁盘存储按照组的方式进行命名、管理和分配,例如按照使用用途进行定义:“development”和“sales”,而不是使用物理磁盘名“sda”和“sdb”。而且当系统添加了新的磁盘,通过LVM管理员就不必将磁盘的文件移动到新的磁盘上以充分利用新的存储空间,而是直接扩展文件系统跨越磁盘即可。
2.2 LUN
lun的全称是logical unit number,也就是逻辑单元号。我们知道scsi总线(啥是SCSI总线?自己去百度)上可挂接的设备数量是有限的,一般为6个或者15个,我们可以用target ID(也有称为scsi id的)来描述这些设备,设备只要一加入系统,就有一个代号,我们在区别设备的时候,只要说几号几号就ok了。而实际上我们需要用来描述的对象,是远远超过该数字的,于是我们引进了lun的概念,也就是说lun id的作用就是扩充了target id。每个target下都可以有多个lun device,我们通常简称lun device为lun,这样就可以说每个设备的描述就有原来的target x变成target x lun y了,那么显而易见的,我们描述设备的能力增强了.就好比,以前你给别人邮寄东西,写地址的时候,可以写:
xx市人民大街54号 xxx(收)
但是自从高楼大厦越来越多,你不得不这么写:
xx市人民大街54号xx大厦518室
xxx (收)
所以我们可以总结一下,lun就是我们为了使用和描述更多设备及对象而引进的一个方法而已,一点也没什么特别的地方。
lun id不等于某个设备,只是个号码而已,不代表任何实体属性,在我们的实际环境里,我们碰到的lun可能是磁盘空间,可能是磁带机,或者是media changer等等。
lun的神秘之处(相对于一些新手来说)在于,它很多时候不是什么可见的实体,而是一些虚拟的对象。比如一个阵列柜,主机那边看作是一个target device,那为了某些特殊需要,我们要将磁盘阵列柜的磁盘空间划分成若干个小的单元给主机来用,于是就产生了一些什么逻辑驱动器的说法,也就是比target device级别更低的逻辑对象,我们习惯于把这些更小的磁盘资源称之为lun0,lun1,lun2....什么的。而操作系统的机制使然,操作系统识别的最小存储对象级别就是lun device,这是一个逻辑对象,所以很多时候被称之为logical
device。
LUN介绍摘自:http://blog.csdn.net/zeo112140/article/details/7568757
2.3 PV
物理卷physical volume ,典型的物理卷是硬盘分区,但也可以是整个硬盘或已创建的Software RAID卷。
2.4 VG
卷组volume group ,卷组是LVM中最高抽象层,是由一个或多个物理卷所组成的存储器池。2.5 LV
逻辑卷logical volume ,逻辑卷相当于非LVM系统中的分区,它在卷组上建立,是一个标准的块设备,可以在其上建立文件系统。3 用LVM划分PV/VG/LV
3.1 修改磁盘的分区格式为lvm格式8e
查看硬盘空间,并创建分区(按以下命令逐行执行)fdisk -l
fdisk /dev/sdb (如果每个lun一个分区,就可以不新建分区,只是修改分区格式)
p 查看当前分区情况
n 新建分区
p 主分区
2 建第2个主分区(根据实际情况)
+20G 设置分区大小
t 设置分区格式
8e 设置为linux lvm格式
w 保存设置
q 退出分区
3.2 建立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.3 建立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.4 激活VG
在被激活之前,VG与LV是无法访问的,这时可用命令:# vgchange -a y testvg
激活所要使用的卷组。当不再使用VG时,可用
# vgchange -a n testvg
使之不再可用。
vgchange可用来设置VG的一些参数,如是否可用( -a [y|n]选项)、支持最大逻辑卷数等。
3.5 移除VG
在移除一卷组前应确认卷组中不再有逻辑卷,首先休眠卷组:# vgchange -a n testvg
然后可用vgremove移除该卷组:
# vgremove testvg
3.6 为VG增加新PV
当卷组空间不足时,可以加入新的物理卷来扩大容量,这时可用命令vgextend,如# vgextend testvg /dev/hdc1 其中/dev/hdc1是新的PV,当然在这之前,它应使用pvcreate初始化。
3.7 从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.8 创建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.9 删除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.10 LVM操作全流程演示
在本节中,将在3块SCSI硬盘:/dev/sda,/dev/sdb,/dev/sdc上按步建立LVM。3.10.1 修改分区格式为lvm分区
fdisk /dev/sda (如果每个lun一个分区,就可以不新建分区,只是修改分区格式)t 设置分区格式
8e 设置为linux lvm格式
w 保存设置
q 退出分区
3.10.2 准备分区
首先要做的是初始化硬盘,建立PV,这将会删除硬盘上的原有数据。在此,用整个硬盘为PV:# pvcreate /dev/sda
# pvcreate /dev/sdb
# pvcreate /dev/sdc
pvcreate在每个硬盘的起始端建立卷组描述区( volume group descriptor area, VGDA)。
3.10.3 创建卷组
利用上面三个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-2a6N-f37x-0BME0Y
其中最重要的前三条要正确,且VG size是以上三个硬盘容量之和。
3.10.4 建立LV
在确定卷组test_vg正确后,就可在其上创建LV。LV的大小可在VG大小范围内任意选择,如同在硬盘上分区。建立线性方式LV
在test_vg上建立一个大小为1GB的线性方式LV:
# lvcreate –L 1G –n test_lv test_vg
lvcreate -- doing automatic backup of "test_vg"
lvcreate -- logical volume "/dev/test_vg/test_lv" successfully created
建立交错方式LV
在test_vg上建立一个大小为1GB的交错方式LV,交错参数为4KB:
# lvcreate -i3 -I4 -L1G -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中的两块硬盘。
3.10.5 建立文件系统
在LV test_lv创建后,就可在其上建立文件系统,如,ext2/ext3系统:
# mke2fs /dev/test_vg/test_lv
如,reiserfs:
# mkreiserfs /dev/test_vg/test_lv
3.10.6 测试文件系统
安装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。
4 纯手工***流程图大放送
下面的图是在出差期间自己总结的,画的比较质朴,但是透露着画家的艺术气质。。4.1 磁阵映射到服务器的流程图
每个笼子有15块磁盘,分出14块盘做raid10类的raid group,剩下一块磁盘做Hot Spare盘,当raid group中的某块磁盘坏掉的时候,Hot Spare盘就会自动顶替坏盘,Hot Spare盘是对所有raid group都可用的。无线城市现场用的raid 类型是 raid10,即raid0+raid1的组合,既能快速读写数据,又能保证数据的安全性,其他的RAID类型请自行前往百度学习了解,不在此赘述。
相关文章推荐
- 新手必读:Linux分布式存储之——Mogilefs
- 数据存储基础(新手必读)
- 不能说的秘密
- 宏定义与typedef不能说的秘密
- 新手必读:PhoneGap入门六大问题
- 新手必读防诈骗秘技
- 【新手必读】苹果Mac OS X的快捷键
- 【转】新手必读:六大流程助您搭建个人网站
- 测试新手必读(转载N篇)
- WinAVR+AVR Studio 新手入门必读
- 新手必读:PhoneGap入门六大问题
- C#新手练习:开发一个应用,模拟移动存储设备的读写
- 职场不能说的秘密
- 新手必读二
- 新手必读之管理篇——视图索引和服务器时间
- 潜规则:公司招聘中不能说的秘密,简历只有这么发才有希望
- 新手必读
- 前端工程师新手必读
- 新手指南 NAS存储装置解析---引言
- Python与Perl不能说的秘密