1. 程式人生 > >Linux 學習之路(十一):RAID和LVM

Linux 學習之路(十一):RAID和LVM

傳輸速度 Mb/8=MB

硬碟的介面:

IDE(ATA):133Mbps 並行匯流排

SATA:300Mbps,600Mbps,6Gbps 序列匯流排

USB:USB3.0:480Mbps 序列匯流排

SCSI:Small Computer System Interface轉速比較塊

​ UltraSCSI,320Mbps 並行匯流排

SAS: 序列2.5英寸,轉速快,造價高

RAID

獨立磁碟冗餘陣列 (Redundant Array of Independent Disks, RAID) 是一種將多個磁碟驅動器元件(通常是多塊硬碟或多個分割槽)組合為一個邏輯單元的儲存技術。根據 RAID 的部署情況,這個邏輯單元可以是單個的檔案系統,也可以是一個能在其上建立多個分割槽的透明中間層。根據所需的冗餘量和效能要求,資料按照

#RAID 級別 中的某一種方式分佈在驅動器中。所選的 RAID 級別決定了是否可以防止資料丟失(硬碟故障時)、是否提高效能或結合兩者優勢。

RAID級別:

級別 效能表現 冗餘能力(容錯能力) 空間利用率 需要盤數
0條帶 讀寫效能提升幾乎n倍 ns(一塊s) 至少2塊盤
1映象 寫下降,讀提升 1/2 至少2塊盤
5校驗盤 讀、寫提升 (n-1)/n 至少需要3塊
01(先條帶後鏡像) 讀、寫提升 1/2 至少需要4塊
10 讀、寫提升 1/2 至少需要4塊
JBOD(將多個小盤組合成一個大盤) 無提升 100% 至少需要2塊
50 讀、寫提升 (n-2)/n 至少需要6塊

n指幾塊盤,s指每塊盤大小,如果建立一個2G的RAID5: $$ \frac {n-1} {n}s=2G

$$ 注:n=3,s=1G

RAID的實現形式

硬體RAID

  • 將RAID控制器與外部裝置連線起來。
  • RAID晶片在內部控制SATA口插槽,即在BIOS介面配置啟用晶片,並將硬碟配置RAID級別。
  • 作業系統需要安裝RAID的驅動程式,使之可以識別RAID。作業系統把RAID都識別為/dev/sda等磁碟。

軟體RAID

  • 保證核心支援軟體RAID,核心中有一個裝置多磁碟md(multi disk)模組,可以讀取配置資訊。

  • md模擬一個RAID,邏輯RAID:/dev/md #,#數字標識不同RAID裝置,並不標識RAID級別。

  • 在核心內部,由程式完成分配。再通過各自口存入自己的裝置中/dev/sda,sdc。

  • 核心可以識別的軟RAID型別:fd型別。

mdadm(md):將任何塊裝置做成RAID。不同磁碟上的分割槽(建議)。

模式化的命令:

建立模式 -C

專用選項:-l:級別

​ -n:裝置個數

​ -a(yes|no):自動為其建立裝置檔案

​ -c:CHUNK大小,2^n,預設為64k

管理模式 --add,–del,–remove

模擬磁碟損壞的選項:

-f,–fail,–set-faulty

mdadm /dev/md # --fail /dev/sda7

監控模式 -F

檢視RAID陣列的詳細資訊(例如顯示所指定RAID的詳細資訊):

mdadm -D /dev/md1

將當前RAID資訊儲存至配置檔案,以便以後進行裝配

mdadm -D --scan > /etc/madam.conf

增長模式 -G

裝配模式 -A 重新識別RAID並組合起來

  • 實驗:在同一塊磁碟的不同分割槽建立一個2G的RAID0(一般建議不要這麼做)

4個512M分割槽或者2個1G分割槽(兩塊盤要一樣)

#沒有其他RAID裝置的前提下的操作步驟
mdadm -C /dev/md0
#建立之前要指定在哪些裝置上建立,於是要先建立分割槽
fdisk /dev/sda
n
+1G
t #調整分割槽
L
fd
w
#通知核心重讀:
partprobe /sev/sda
#確保分割槽可以被識別
cat /proc/partitions
#建立裝置為/dev/md0,自動建立裝置檔案,級別為0,共2個裝置,分別是/dev/sda5和/dev/sda6
mdadm -C /dev/md0 -a yes -l 0 -n 2 /dev/sda{5,6}
#當前裝置下所有處於啟用狀態的RAID裝置
cat /proc/mdstat
#任何一個裝置要能啟用則要先格式化,然後掛載
#格式化raid
mke2fs -j /dev/md0
mdadm -D /dev/md1
#掛載
mount /dev/md0 /mnt
ls /mnt
  • 建立一個2G的RAID1

2個2G的分割槽

#前提sda7\sda8都是2G分割槽
mdadm -C /dev/md1 -a yes -n 2 -l 1 /dev/sda7 /dev/sda8
cat /proc/mdstat
(映象磁碟的特點必須將每個資料位一一同步,即修改任一磁碟資料位,另一個也會被修改.)
fdisk -l #檢視裝置
mke2fs -j /dev/md1
mount /dev/md1 /media/
#複製一個檔案到/media下
cp /etc/inittab /media/
#在管理模式下模擬磁碟損壞
mdadm /dev/md1 -f /dev/sda8
#檢視md1資訊
mdadm --detail /dev/md1
#移除損壞盤
mdadm /dev/md1 -r /dev/sda8
#替換盤
mdadm /dev/md1 -a /dev/mda9(加入盤大小要與此前盤一致)

watch:週期性地執行指定命令,並以全屏方式顯示結果。

​ -n #:指定週期長度,單位為秒,預設為2

格式: watch -n # ‘COMMAND’

RAID5只要有冗餘都支援空閒盤

例如建立一個2G的RAID5:使用3個1G的。

一個空閒盤,則使用4個1G的。

條帶的倍數:chunk/block

軟RAID生成chunk的時候都要計算一下相當於多少個磁碟塊

在格式化的時候指定條帶的倍數,優化軟RAID效能:

mke2fs -j -E stride=16 -b 4096 /dev/sd0

DM:Device Mapper邏輯裝置

LVM 多路徑

卷組成

snapshot快照:訪問檔案的另一條路徑

儲存發生了改變的資料,主要作用是實現資料備份

邏輯卷底層可以是分割槽、磁碟或者硬體RAID,只要是塊裝置都可以。

PV物理卷

pvcreate,pvs,pvscan,pvmove(移動),pvremove(移除),pvdisplay(檢視)

VG卷組

vgcreate,vgremove(覆蓋裡面的源資料),vgextend,vgreduce,vgs,vgdisplay,vgscan

vgcreate VG_NAME /PATH/TO/PV ​ -s #:PE大小,預設為4MB

LV邏輯卷

lvcreate,lvremove,lvextend,lvreduce,lvs,lvdisplay

lvcreate -n LV_NAME -L #G VG_NAME

fdisk /dev/sda
10G,VG
n:7G+3G
t
L
8e
#檢視p
partprobe /dev/sda
cat /proc/partitions
#fdisk命令只支援建立15個分割槽
pvcreate /dev/sda{10,11}
#檢視當前系統PV
pvs
#詳細資訊
pvdisplay
#掃描當前pv
pvscan
vgs
vgcreate myvg /dev/sda{10,11}
vgremove myng
vgcreate -s 8M myvg/dev/sda{10,11}
vgdisplay myvg
#檢視VG當中有多少個pv
pvs
#移除pv上的資料
pvmove /dev/sda11 
#縮減vg大小(直接拿掉一個pv):
vgreduce
#把一個物理卷加入到此擴展卷組
vgextend myvg /dev/sda12
lvcreate -L 50M -n testlv myvg
lvdisplay /dev/myvg/testlv
mke2fs -j /dev/myvg/testlv
mount /dev/myvg/testlv/mnt
ls /mnt
ls /dev/mapper/
lvremove /dev/mapper/myvg-testlv

一、擴充套件邏輯卷

lvextend

​ -L [+]#

ext2擴充套件邏輯邊界resize2fs

二、縮減邏輯卷

注意:1.不能線上縮減,得先解除安裝;

​ 2.確保縮減後的空間大小依然能儲存原有的所有資料;

​ 3.在縮減之前應該先強行檢查檔案,以確保檔案系統處於一致性狀態

df -lh

umount

e2fsck -f

resize2fs /PATH/TO/LV 5G

lvreduce -L [-] # /PATH/TO/LV

三、快照卷

1、生命週期為整個資料時長:在這段時長內,資料的增長量不能超出快照卷大小

2、快照卷應該是隻讀的

3、跟原卷在同一卷組內

lvcreate

​ -s

​ -p r|w

lvcreate -L # -n SLV_NAME -p r /PATH/TO/LV

lvcreate -L 50M -n testlv-snap -s -p r /dev/myvg/testlv
lvs
mount /dev/myvg/testlv-snap