磁盤陣列劃分時LVM的概念和操作
磁盤陣列,簡單的說就是將多個硬盤通過一定的接口和協議連接起來,然后通過控制器或者磁盤管理設備來統一管理的存儲設備。下圖是磁盤陣列的實物圖。
磁陣管理器可以設置存儲的RAID類型,可以劃分LUN,可以把LUN映射到服務器上,前提是在光纖交換機里劃分ZONE來將主機的HBA卡跟磁陣的HBA綁定,光纖線路圖可參見4.2節。
這里重點講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系統管理員可以輕松管理磁盤分區,如:將若干個磁盤分區連接為一個整塊的卷組(volume group),形成一個存儲池。管理員可以在卷組上隨意創建邏輯卷組(Logical Volumes),并進一步在邏輯卷組上創建文件系統。管理員通過LVM可以方便的調整存儲卷組的大小,并且可以對磁盤存儲按照組的方式進行命名、管理和分配,例如按照使用用途進行定義:“development”和“sales”,而不是使用物理磁盤名“sda”和“sdb”。而且當系統添加了新的磁盤,通過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)的示意圖:
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。