存储基础知识之——磁盘阵列原理及操作实战

标签: 分布式存储 存储技术 LUN LV LVM | 发表时间:2014-02-09 16:51 | 作者:童燕群
出处:http://shentar.me

一、前言

磁盘阵列,简单的说就是将多个硬盘通过一定的接口和协议连接起来,然后通过控制器或者磁盘管理设备来统一管理的存储设备。下图是磁盘阵列的实物图。

磁阵大图

磁阵管理器可以设置存储的RAID类型,可以划分LUN,可以把LUN映射到服务器上,前提是在光纤交换机里划分ZONE来将主机的HBA卡跟磁阵的HBA绑定,光纤线路图可参见4.2节。

这里重点讲LVM的概念和操作,看完这篇文档,你会了解LVM是什么,里面有哪些概念,如何把LUN划分到LV挂载到服务器上,双机切换是怎么对存储进行处理的。至于存储如何跟服务器连上,如何做RAID策略,如何划分LUN,这里不涉及。

二、概念

2.1 LVM

LVM是 Logical Volume Manager(逻辑卷管理)的简写,它由Heinz Mauelshagen在Linux 2.4内核上实现,目前最新版本为:稳定版1.0.5,开发版 1.1.0-rc2,以及LVM2开发版。与传统的磁盘与分区相比,LVM为计算机提供了更高层次的磁盘存储。它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。通过LVM系统管理员可以轻松管理磁盘分区,如:将若干个磁盘分区连接为一个整块的卷组(volume group),形成一个存储池。管理员可以在卷组上随意创建逻辑卷组(Logical Volumes),并进一步在逻辑卷组上创建文件系统。管理员通过LVM可以方便的调整存储卷组的大小,并且可以对磁盘存储按照组的方式进行命名、管理和分配,例如按照使用用途进行定义:“development”和“sales”,而不是使用物理磁盘名“sda”和“sdb”。而且当系统添加了新的磁盘,通过LVM管理员就不必将磁盘的文件移动到新的磁盘上以充分利用新的存储空间,而是直接扩展文件系统跨越磁盘即可。

LVM结构图

2.2 LUN

LUN的全称是Logical Unit Number,也就是逻辑单元号。我们知道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。

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,

1) 使用整个磁盘,

# pvcreate /dev/hdb 

这将在磁盘上建立VG的描述符。

2) 使用磁盘分区,如/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.1 磁阵映射到服务器的流程图

每个笼子有15块磁盘,分出14块盘做raid10类的RAID Group,剩下一块磁盘做Hot Spare盘,当RAID Group中的某块磁盘坏掉的时候,Hot Spare盘就会自动顶替坏盘,Hot Spare盘是对所有RAID Group都可用的。

磁阵映射到服务器的流程图

RAID 10(RAIS0 + RAID1)的示意图:

RAID10 示意图

4.2 磁阵与服务器之间的光纤线路图

磁阵光纤接线图

4.3 刀片机框

这个刀片机框的后面,刀片机有自己的管理器,而且有刀片机的光纤交换机,管理器和光纤交换机都有主备。

刀片机框

4.4 光纤插线板

刀片机,PC服务器器,光纤交换机,磁阵都是连在光纤插线板上的,各部件的连接是在光纤插线板上进行的:

光纤插线板

4.5 光纤交换机

上下是主备光纤交换机,在光纤交换机里划分ZONE来将主机的HBA卡跟磁阵的HBA绑定,这样在磁阵的控制器里就可以看到主机了

光纤交换机

4.6 磁阵

磁阵有自己的管理器,可以用笔记本连上,操作磁阵,做RAID策略和划分LUN。

磁阵

磁阵管理器大图

磁阵大图

4.7 磁阵双机管理相关脚本

以MDSP的双机脚本VGLVAgent.rar和出差期间的FS双机脚本vg.rar为例。从脚本来看双机切换对存储处理的整个主体流程为:

1)主机文件系统解挂载

umount /mdsp/mi

PS:此操作是main.cf文件里直接调用命令来执行,在上面的脚本里没有。

2)主机VG去激活

lvm vgchange -a n ${vgName} > /dev/null 2>&1

PS:如果LV绑定了裸设备需要用raw命令解除绑定

3)备机VG激活

lvm vgchange -a y ${vgName} > /dev/null 2>&1

PS:如果VG的状态不是exported状态的,则需要导入VG

lvm vgimport ${vgName} > /dev/null 2>&1

4)备机LV激活

lvm lvchange -a y /dev/${vgName}/${lvName} >/dev/null 2>&1

5)备机文件系统挂载

mount /dev/test_vg/test_lv /mdsp/mi

从脚本来看,双机操作的对象是VG和LV,不涉及LUN。

附件: VGLVAgent.rar vg.rar

转载信息:整理自 存储大爆料 之 不能说的秘密,新手必读!!

相关 [基础 知识 磁盘阵列] 推荐:

存储基础知识之——磁盘阵列原理及操作实战

- - 忘我的追寻
磁盘阵列,简单的说就是将多个硬盘通过一定的接口和协议连接起来,然后通过控制器或者磁盘管理设备来统一管理的存储设备. 磁阵管理器可以设置存储的RAID类型,可以划分LUN,可以把LUN映射到服务器上,前提是在光纤交换机里划分ZONE来将主机的HBA卡跟磁阵的HBA绑定,光纤线路图可参见4.2节. 这里重点讲LVM的概念和操作,看完这篇文档,你会了解LVM是什么,里面有哪些概念,如何把LUN划分到LV挂载到服务器上,双机切换是怎么对存储进行处理的.

RAID磁盘阵列学习笔记

- Michael - IT技术博客大学习
标签:  RAID  磁盘阵列.     RAID是“Redundant Array of Independent Disk”的缩写,中文意思是独立冗余磁盘阵列. 简单地解释,就是将N台硬盘通过RAID Controller(分Hardware,Software)结合成虚拟单台大容量的硬盘使用. RAID的采用为存储系统(或者服务器的内置存储)带来巨大利益,其中提高传输速率和提供容错功能是最大的优点.

java基础知识

- - CSDN博客互联网推荐文章
JAVA相关基础知识. 1、面向对象的特征有哪些方面. 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面. 抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节. 抽象包括两个方面,一是过程抽象,二是数据抽象. 继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法.

后端基础知识

- Kings - 潘魏增
在团队内部做了一次《后端基础知识》的技术分享,这里也公开出来,希望对一些朋友有用. 前端工程师所必备的技能之中,后端知识的重要性显而易见,它会影响前端工程师的大局观,会直接影响分析解决问题的效率和准确度,在了解系统架构、调试以及排查故障的时候特别有用. 后端基础知识掌握得越透彻,解决问题的能力就越强.

Deep Learning 基础知识

- - 互联网旁观者
Deep Learning是机器学习研究中的新领域,其目的是让机器学习更加接近人工智能. 下面这篇文档则是关于Deep learning的最新介绍文档:. A particular property of such flow graphs is depth: the length of the longest path from an input to an output..

Spring框架学习【基础知识】

- - CSDN博客推荐文章
1.在java开发领域,Spring相对于EJB来说是一种轻量级的,非侵入性的Java开发框架,曾经有两本很畅销的书《Expert one-on-one J2EE Design and Development》和《Expert one-on-one J2EEdevelopment without EJB》是java高手进阶必看的宝典,Spring就是从这两本书的理论发展起来的.

移动端尺寸基础知识

- - 可乐橙
初涉移动端设计和开发的同学们,基本都会在尺寸问题上纠结好一阵子才能摸到头绪. 我也花了很长时间才弄明白,感觉有必要写一篇足够通俗易懂的教程来帮助大家. 从原理说起,理清关于尺寸的所有细节. 由于是写给初学者的,所以不要嫌我啰嗦. 首先说现象,大家都知道移动端设备屏幕尺寸非常多,碎片化严重. 尤其是Android,你会听到很多种分辨率:480x800, 480x854, 540x960, 720x1280, 1080x1920,而且还有传说中的2K屏.

python基础教程-第1章节 基础知识

- 李斌 - 博客园-首页原创精华区
  我找到了1本python的书,听说这个教程非常的基础. 那就太好了,我从来没有写过程序,那就从这本书开始学习啊,哈哈. 我是想边学编程边做一些学习记录方便以后复习啊,再就是可以监督自己学得认真点啊,让自己学得更牢靠. 因为我梦想有一天能知道程序到底是个什么玩意. 一:python的安装与一生中的第一个程序.

"关于签证的50个基础知识

- Vince - Cao Liu
ADS(Approved Destination Status)签证的中文解释是“被批准的旅游目的地国家”. 加注ADS签证后仅限于在被批准的旅游目的地国家一地旅游,此签证在目的地国家境内不可签转,不可延期. (2)什么是落地签证、免签证、过境签证. 落地签证是指是指您不用在出发前申请目的地国的签证,而是到该国后再办理,可以免去入关前办理签证的各种手续.

关于签证的50个基础知识

- 小明 - 草榴社區
ADS(Approved Destination Status)签证的中文解释是“被批准的旅游目的地国家”. 加注ADS签证后仅限于在被批准的旅游目的地国家一地旅游,此签证在目的地国家境内不可签转,不可延期.  (2)什么是落地签证、免签证、过境签证. 落地签证是指是指您不用在出发前申请目的地国的签证,而是到该国后再办理,可以免去入关前办理签证的各种手续.