?前言:本博客僅作記錄學習使用,部分圖片出自網絡,如有侵犯您的權益,請聯系刪除?
目錄
一、RAID磁盤冗余陣列
1、部署磁盤整列
2、損壞磁盤陣列及修復
3、磁盤陣列+備份盤
4、刪除磁盤陣列
二、LVM邏輯卷管理器
致謝
一、RAID磁盤冗余陣列
硬盤設備是計算機中比較容易故障的元器件之一,加之由于其需要存儲數據的特殊性質,不能像CPU、內存、電源甚至主板故障后更換新的就好,所以生產環境中一定要未雨綢繆,提前做好數據的冗余及異地備份等工作
1988年,美國加利福尼亞大學伯克利分校首次提出并定義了Redundant Array of Independent Disks技術的概念,中文名稱是磁盤冗余陣列,簡稱RAID。RAID技術通過把多個硬盤設備組合成一個容量更大、安全性更好的磁盤陣列,并把數據切割成多個區段后分別存放在各個不同的物理硬盤設備上,然后利用分散讀寫技術來提升磁盤陣列整體的性能,同時把多個重要的數據的副本同步到不同的物理郵硬盤設備上,從而起到數據冗余備份效果
目前已有的RAID磁盤陣列的方案至少有十幾種,RAID 0,RAID 1,RAID 5與RAID 10這4種最常見的方案
RAID級別 | 最少硬盤 | 可用容量 | 讀寫性能 | 安全性 | 特點 |
---|---|---|---|---|---|
0 | 2 | n | n | 低 | 追求最大容量和速度,任何一塊盤損壞,數據全部異常 |
1 | 2 | n/2 | n | 高 | 追求最大安全性,只要陣列組中有一塊硬盤可用,數據不受影響 |
5 | 3 | n-1 | n-1 | 中 | 在控制成本的前提下,追求硬盤的最大容量、速度及安全性,允許有一塊硬盤異常,數據不受影響 |
10 | 4 | n/2 | n/2 | 高 | 綜合RAID 1和RAID 0的優點,追求硬盤的速度和安全性,允許有一半硬盤異常(不可同組),數據不受影響 |
1、RAID 0
RAID 0技術把多塊物理設備(至少兩塊)通過硬件或軟件的方式串聯在一起,組成一個大的卷組,并將數據依此寫入到各個物理硬盤中。通俗來說,RAID 0技術能有效的提升硬盤數據的吞吐速度,但是不具備數據備份和錯誤修復能力。
數據被分別寫入到不同的硬盤設備中,即硬盤A和硬盤B設備分別保存數據資料,最終實現提升讀取、寫入速度的效果
2、RAID 1
RAID 1技術把兩塊以上的硬盤設備進行綁定,在寫入數據時,是將數據同時寫入到多塊硬盤設備上(可以將其視為數據的鏡像或備份)。當其中的一塊硬盤發生故障后,一般會立即自動以熱交換的方式來恢復數據的正常使用
因為在多塊硬盤設備中寫入了相同的數據,因此硬盤設備的利用率下降,理論上說硬盤空間真實利用率只有50%,由三塊硬盤設備組成的RAID 1磁盤陣列的可用率只有33%。無疑增大了系統計算功能的負載
3、RAID 5
RAID 5技術是把硬盤設備的數據奇偶校驗信息保存到其他硬盤設備中。RAID 5磁盤陣列中數據的奇偶校驗信息并不是單獨保存到某一塊硬盤設備中,而是存儲到除自身以外的其他每一塊硬盤設備上;圖中parity部分存放的就是數據的奇偶校驗信息,換句話說,就是RAID 5技術實際上沒有備份硬盤中的真實數據信息,而是當硬盤設備出現問題后通過奇偶校驗信息來嘗試重建損壞的數據。
RAID 5最少由三塊硬盤組成,使用的是Disk Striping硬盤切割技術。比RAID 1級別好處在于保存的是奇偶校驗信息而不是一模一樣的內容,所以當重復寫入某個文件時,RAID 5級別磁盤陣列只需要對應一個奇偶校驗信息就可以,效率更高,存儲成本也降低。
4、RAID 10
鑒于RAID 5對各方面有了妥協,但是大部分企業更在乎的是數據本身的價值而非硬盤價格,因此生產環境中主要使用RAID 10技術。
RAID 10就是RAID 1+RAID 0技術的一個“組合體”。RAID 10技術至少需要4塊硬盤來組建,其中分別兩兩制作成RAID 1磁盤陣列,以保證數據的安全性;然后再對兩個RAID 1磁盤陣列實施RAID 0技術,進一步提高硬盤設備的讀寫速度。
1、部署磁盤整列
首先在虛擬機中添加4塊硬盤設備來制作一個RAID 10磁盤陣列,SCSI或SATA接口類型
這些硬盤是模擬出來的,當前生產環境中用到的服務器一般都配備RAID陣列卡,我們學習階段沒必要單獨去購買一臺服務器,而是學會用mdadm命令在Linux系統中創建和管理軟件RAID磁盤陣列。
1.1、mdadm命令
mdadm命令用于創建、調整、監控和管理RAID設備,語法:"mdadm 參數 硬盤名稱"
參數 | 作用 |
---|---|
-a | 檢測設備名稱 |
-n | 指定設備數量 |
-l | 指定RAID級別 |
-C | 創建 |
-v | 顯示過程 |
-f | 模擬設備損壞 |
-r | 移除設備 |
-Q | 查看摘要信息 |
-D | 查看詳細信息 |
-S | 停止RAID磁盤陣列 |
接下來,使用mdadm命令創建RAID 10,名稱為"/dev/md0"
前面講過,udev是Linux系統內核中用來給硬件命名的服務,其命名規則也非常簡單。可以猜測到第二個SCSI存儲設備的名稱會是/dev/sdb,以此類推。mdadm命令中的參數-C代表創建一個RAID陣列卡;-v參數顯示創建的過程,同時在后面追加一個設備名稱/dev/md0,這樣/dev/mdo就是創建后的RAID磁盤陣列的名稱;-n 4參數代表使用4塊硬盤來部署這個RAID磁盤陣列;而-l 10參數則代表RAID 10方案;最后再加上4塊硬盤設備的名稱就OK了
?[root@linuxprobe ~]# mdadm -Cv /dev/md0 -n 4 -l 10 /dev/sdb /dev/sdc /dev/sdd /dev/sdemdadm: layout defaults to n2mdadm: layout defaults to n2mdadm: chunk size defaults to 512Kmdadm: size set to 20954112Kmdadm: Defaulting to version 1.2 metadatamdadm: array /dev/md0 started.
初始化過程使用-D參數進行查看,也可以用-Q參數查看簡要信息:
?[root@linuxprobe ~]# mdadm -Q /dev/md0/dev/md0: 39.97GiB radi10 4 devices, 0 spares. Use mdadm --detail for more detail.
四塊20G大小的硬盤組成的磁盤陣列可用空間只有39.97了,RAID 10技術通過兩兩一組硬盤組成的RAID 1保證了數據的可靠性,每一份數據都被保存兩次,50%的使用率。
把制作好的RAID磁盤陣列格式化為ext4格式:
?[root@linuxprobe ~]# mkfs.ext4 /dev/md0...
創建掛載點后把硬盤設備進行掛載操作:
?[root@linuxprobe ~]# mkdir /RAID[root@linuxprobe ~]# mount /dev/md0 /RAID[root@linuxprobe ~]# df -h.../dev/md0 40G 49M 38M 1% /RAID
查看/dev/md0磁盤陣列組設備的詳細信息,確認下RAID級別(Raid Level)、大小(Array Size)和總硬盤數(Total Devices)是否正確;
?[root@linuxprobe ~]# mdadm -D /dev/md0/dev/md0:...
最后想讓創建好的RAID磁盤陣列能夠一直為我們服務,不會因每次的重啟操作而取消,記得將信息添加到/etc/fstab文件中:
?[root@linuxprobe ~]# echo "/dev/md0 /RAID ext4 defaults 0 0" >> /etc/fstab[root@linuxprobe ~]# cat /etc/fstab.../dev/md0 /RAID ext4 defaults 0 0
2、損壞磁盤陣列及修復
首先確認有一塊物理硬盤設備出現損壞后不能再繼續正常使用后,使用mdadm命令來予以移除之后查看下RAID磁盤陣列組的狀態已經被改變
?[root@linuxprobe ~]# mdadm /dev/md0 -f /dev/sdbmdadm: set /dev/sdb faulty in /dev/md0[root@linuxprobe ~]# mdadm -D /dev/md0/dev/md0:...0 8 16 - faulty /dev/sdb
使用-f參數是讓硬盤模擬損壞,為了能夠徹底的將故障盤移除,還要再一步操作:
?[root@linuxprobe ~]# mdadm /dev/md0 -r /dev/sdbmdadm: hot removed /dev/sdb from /dev/md0
當RAID 1磁盤陣列中存在一個故障盤時并不影響RAID 10磁盤陣列的使用。更換硬盤后使用-a參數進行添加操作,默認會自動開始數據的同步工作,使用-D參數即可看到整個過程和百分比進度:
?[root@linuxprobe ~]# mdadm /dev/md0 -a /dev/sdbmdadm: added /dev/sdb[root@linuxprobe ~]# mdadm -D /dev/md0/dev/md0:...
3、磁盤陣列+備份盤
RAID 10磁盤陣列中最多允許50%的硬盤設備發生故障,但存在一個極端情況,即同一RAID 1磁盤陣列中的硬盤設備若全部損壞,也會導致數據丟失。怎么辦呢,可以使用RAID備份盤技術來預防。該技術的核心理念就是準備一塊足夠大的硬盤,這塊硬盤平時處于閑置狀態,一旦RAID磁盤陣列中有硬盤出現故障后則會馬上頂替上去。
示例:恢復虛擬機初始狀態,現在看一下RAID 5的部署效果。部署RAID 5磁盤陣列時,至少需要用到3塊硬盤,還需再加一塊備份硬盤(也叫熱備盤),所以總計需要在虛擬機中模擬4塊硬盤設備:
現在創建一個RAID 5磁盤陣列+備份盤。
?# 參數-n 3代表創建這個RAID 5磁盤陣列所需的硬盤數# 參數-l 5代表RAID的級別# 參數-x 1則代表有一塊備份盤[root@linuxprobe ~]# mdadm -Cv /dev/md0 -n 3 -l 5 -x 1 /dev/sdb /dev/sdc /dev/sdd /dev/sdemdadm: layout defaults to left-symmetricmdadm: layout defaults to left-symmetric...[root@linuxprobe ~]# mdadm -D /dev/md0...3 8 64 - spare /dev/sde
現將部署好的RAID 5磁盤陣列格式化為ext4文件格式,然后掛載到目錄上,之后就使用了:
?[root@linuxprobe ~]# mkfs.ext4 /dev/md0...[root@linuxprobe ~]# mkdir /RAID[root@linuxprobe ~]# echo "/dev/md0 /RAID ext4 defaults 0 0" >> /etc/fstab
由三塊硬盤組成的RAID 5級別磁盤陣列,它對應的可用空間是n-1,也就是40G。熱備盤的空間是不算入內的,平時完全就是在“睡覺”中,只有意外出現時才開始工作
?[root@linuxprobe ~]# mount -a[root@linuxprobe ~]# df -h.../dev/md0 40G 49M 38G 1% /RAID
實驗:我們把硬盤設備/dev/sdb溢出磁盤陣列,然后迅速查看/dev/md0磁盤陣列的狀態,就會發現備份盤已經自動頂替上去并開始了數據同步。RAID中這種備份盤技術非常實用,可以在保證RAID磁盤陣列數據安全性的基礎上進一步提高數據可靠性;
?[root@linuxprobe ~]# mdadm /dev/md0 -f /dev/sdbmdadm: set /dev/sdb faulty in /dev/md0[root@linuxprobe ~]# mdadm -D /dev/md0/dev/md0:...0 8 16 - faulty /dev/sdb
4、刪除磁盤陣列
生產環境中,RAID磁盤陣列組部署后一般不會輕易被停用了,萬一趕上了,還是需要知道怎么刪除的。上面這種RAID 5+熱備盤損壞的情況是比較復雜的,就以這種情況講解:
首先需要將所有的磁盤都設置成停用狀態:
?[root@linuxprobe ~]# umount /RAID[root@linuxprobe ~]# mdadm /dev/md0 -f /dev/sdcmdadm: set /dev/sdc faulty in /dev/md0[root@linuxprobe ~]# mdadm /dev/md0 -f /dev/sddmdadm: set /dev/sdd faulty in /dev/md0[root@linuxprobe ~]# mdadm /dev/md0 -f /dev/sdemdadm: set /dev/sde faulty in /dev/md0
然后再逐一的移除出去:
[root@linuxprobe ~]# mdadm /dev/md0 -r /dev/sdb
mdadm: hot removed /dev/sdb from /dev/md0
[root@linuxprobe ~]# mdadm /dev/md0 -r /dev/sdc
mdadm: hot removed /dev/sdc from /dev/md0
[root@linuxprobe ~]# mdadm /dev/md0 -r /dev/sdd
mdadm: hot removed /dev/sdd from /dev/md0
[root@linuxprobe ~]# mdadm /dev/md0 -r /dev/sde
mdadm: hot removed /dev/sde from /dev/md0
著急的同學也可以用"mdadm /dev/md0 -f /dev/sdb -r /dev/sdb" 一條命令搞定。但由于這個命令在早期版本不能一起使用,保險還是一步一步執行。移除后查看磁盤陣列狀態:
[root@linuxprobe ~]# mdadm -D /dev/md0
/dev/md0:...- 0 0 0 removed- 0 0 1 removed- 0 0 2 removed
繼續再停用整個RAID磁盤組:
[root@linuxprobe ~]# mdadm --stop /dev/md0
mdadm: stopped /dev/md0
[root@linuxprobe ~]# ls /dev/md0
ls: cannot access '/dev/md0': No Such file or directory
二、LVM邏輯卷管理器
前面的硬盤管理技術雖然能夠有效地提高硬盤設備的讀寫速度以及數據的安全性,但是在硬盤分區好或者部署為RAID磁盤陣列后,再想修改硬盤分區大小就不容易了。這時需要另外一項非常普及的硬盤設備資源管理技術了—Ligical Volume Manager(邏輯卷管理器,簡稱LVM)。LVM允許用戶對硬盤資源進行動態調整。
邏輯卷管理器是Linux系統用于對硬盤分區進行管理的一種機制,理論性較強。LVM技術是在硬盤分區和文件系統之間添加了一個邏輯層,它提供了一個抽象的卷組,可以把多塊硬盤進行卷組合并。這樣一來,用戶不必關心物理硬盤設備的底層架構和布局,就可以實現對硬盤分區的動態調整。LVM技術架構如下:
物理卷處于LVM中的最底層,可以將其理解為物理硬盤、硬盤分區或者RAID磁盤陣列。卷組建立在物理卷之上,一個卷組能夠包含多個物理卷,而且在卷組創建之后也可以繼續向其中添加新的物理卷。邏輯卷是用卷組中空閑的資源建立的,并且邏輯卷在建立以后可以動態地擴展或縮小空間。這就是LVM的核心理念。
1、部署邏輯卷
原先分配的硬盤分區不夠用。通過部署LVM來解決。部署時需要逐個配置物理卷、卷組和邏輯卷,常用的部署命令如下:
功能/命令 | 物理卷管理 | 卷組管理 | 邏輯卷管理 |
---|---|---|---|
掃描 | pvscan | vgscan | lvscan |
建立 | pvcreate | vgcreate | lvcreate |
顯示 | pvdisplay | vgdisplay | lvdisplay |
刪除 | pvremove | vgremove | lvremove |
擴展 | vgextend | lvextend | |
縮小 | vgreduce | lvreduce |
示例:還原虛擬機,并重新添加兩塊新硬盤設備(更好的演示LVM理念中用戶無需關心底層物理硬盤設備的特性)
第1步:讓新添加的兩塊硬盤設備支持LVM技術:
?[root@linuxprobe ~]# pvcreate /dev/sdb /dev/sdcPhysical volume "dev/sdb" successfully created.Physical volume "dev/sdc" successfully created.
第2步:把兩塊硬盤設備加入到storage卷組中,然后查看卷組的狀態:
?[root@linuxprobe ~]# vgcreate storage /dev/sdb /dev/sdcVolume group "storage" successfully created.[root@linuxprobe ~]# vgdisplay--- Volume group ---...Free PE / Size ?10238 / 39.99 GiB
第3步:再切割出一個約為150MB的邏輯卷設備。
這里需要注意切割單位的問題。在對邏輯卷進行切割時有兩種計量單位。第一種是以容量為單位,所使用參數為-L:使用-L 150M生成一個大小為150MB的邏輯卷。另外一種是以基本單元的個數為單位,所使用參數為-l,每個基本單元的大小默認是4MB:使用-l 37可以生成一個大小為37*4MB = 148MB的邏輯卷。
?[root@linuxprobe ~]# lvcreate -n vo -l 37 storageLogical volume "vo" created.[root@linuxprobe ~]# lvdisplay--- Logical volume ---...LV Size 148.00 MiB
第4步,把生成好的邏輯卷進行格式化,然后掛載使用:
Linux系統會把LVM中的邏輯卷設備存放在/dev設備目錄中,實際上就是個快捷方式,同時會以卷名的名稱來建立一個目錄,其中保存了邏輯卷的設備映射文件,即/dev/卷組名稱/邏輯卷名稱
?[root@linuxprobe ~]# mkfs.ext4 /dev/storage/vomke2fs 1.44.3 (10-July-2018)...[root@linuxprobe ~]# mkdir /linuxprobe[root@linuxprobe ~]# mount /dev/storage/vo /linuxprobe
第5步:查看掛載狀態,并寫入到配置文件,使其永久生效
?[root@linuxprobe ~]# df -h.../dev/mapper/storage-vo 140M 1.6M 128M 2% /linuxprobe[root@linuxprobe ~]# echo "/dev/storage/vo /linuxprobe ext4 defaults 0 0" >> /etc/fstab[root@linuxprobe ~]# cat /etc/fstab.../dev/storage/vo /linuxprobe ext4 defaults 0 0
2、擴容邏輯卷
前面實驗中,卷組是由兩塊硬盤設備共同組成的,用戶在使用存儲設備時感知不到設備底層的架構和布局,只要卷中有足夠的資源,就可以一直為邏輯卷擴容。擴展前請一定要記得卸載設備和掛載點的關聯。
[root@linuxprobe ~]# umount /linuxprobe
第1步:把上一個實驗中的邏輯卷vo擴展至290M
[root@linuxprobe ~]# lvextend -L 290M /dev/storage/vo
Rounding size to boundary between physical extents: 290.00 MiB
...
第2步:檢查硬盤的完整性,確認目錄結構、內容和文件內容沒有丟失,沒有報錯均為正常
[root@linuxprobe ~]# e2fsck -f /dev/storage/vo
e2fsck 1.44.3 (10-July-2018)
...
/dev/storage/vo: 11/38000 files (0.0% non-contiguous),
第3步:重置設備在系統中的容量,剛剛是對LV邏輯卷設備進行了擴容操作,但系統內核還沒有同步到這部分新修改的信息,手動同步:
[root@linuxprobe ~]# resize2fs /dev/storage/vo
第4步:重新掛載硬盤設備并查看掛載狀態
[root@linuxprobe ~]# mount -a
[root@linuxprobe ~]# df -h
...
/dev/mapper/storage-vo 279M 2.1M 259M 1% /linuxprobe
3、縮小邏輯卷
相比較與擴容,縮容風險更大,所以在執行前一定要提前備份好數據。另外Linux系統規定,在對LVM邏輯卷進行縮容操作前,要先檢查文件系統的完整性。在執行縮容操作前記得把文件系統卸載掉:
[root@linuxprobe ~]# umount /linuxprobe
第1步:檢查文件系統的完整性
?[root@linuxprobe ~]# e2fsck -f /dev/storage/vo
第2步:通知系統內核將邏輯卷vo的容量減小到120M
?[root@linuxprobe ~]# resize2fs /dev/storage/vo 120M
第3步:將LV邏輯卷的容量修改為120M
?[root@linuxprobe ~]# lvreduce -L 120M /dev/storage/vo
發現,步驟與擴容相反
第4步:重新掛載文件系統并查看系統狀態
?[root@linuxprobe ~]# mount -1[root@linuxprobe ~]# df -h.../dev/mapper/storage-vo 113M 1.6M 103M 2% /Linuxprobe
4、邏輯卷快照
LVM還具有"快照卷"功能,該功能類似于虛擬機軟件的還原時間點功能。特點:
- 快照卷的容量必須等同于邏輯卷的容量
-
快照卷僅一次有效,一旦執行還原操作后則會被立即自動刪除
在操作前,先看看VG卷組中的容量是否夠用:
?[root@linuxprobe ~]# vgdisplay...Free PE / Size 10208 / <39.88 GiB
通過卷組的輸出信息可以看到,卷組中已經使用了120MB的容量,空閑容量還有39.88GB。接下來用重定向邏輯卷設備所掛載的目錄中寫入一個文件:
?[root@linuxprobe ~]# echo "Welcome to Linuxprobe.com" > /linuxprobe/readme.txt[root@linuxprobe ~]# ls -l /linuxprobe
第1步:使用-s參數生成一個快照卷,使用-L參數指定切割的大小,需要與要做快照的設備容量保持一致。另外還需要在命令后面寫上是針對哪個邏輯卷執行的快照操作,稍后數據也會還原到這個對應的設備上:
[root@linuxprobe ~]# lvcreate -L 120M -s -n SNAP /dev/storage/vo
Logical volume "SNAP" created
[root@linuxprobe ~]# lvdisplay
...
LV Path /dev/storage/SNAP
LV snapshot status active destination for vo
LV Size 120.00 MiB
第2步:在邏輯卷所掛載的目錄中創建一個100MB的垃圾文件,然后再查看快照卷的狀態。發現存儲空間占的用量上升了
[root@linuxprobe ~]# dd if =/dev/zero of=/linuxprobe/files count=1 bs=100M
1+0 records in
...
[root@linuxprobe ~]# lvdisplay
...
Allocated to snapshot 83.71%
第3步:為了檢驗SNAP快照卷的效果,需要對邏輯卷進行快照還原操作。在此之前記得先卸載掉邏輯卷設備與目錄的掛載
lvconvert命令用于管理邏輯卷的快照,語法:“lvconvert [參數] 快照卷名稱”
使用lvconvert能夠將邏輯卷的快照進行自動恢復,使用 “--merge”參數進行操作,系統會自動分辨設備的類型:
?[root@linuxprobe ~]# umount /linuxprobe[root@linuxprobe ~]# lvconvert --merge /dev/storgae/SNAP
第4步:快照卷會被自動刪除掉,并且剛剛在邏輯卷設備唄執行快照操作后再創建出來的100MB的垃圾文件也被清除了
?[root@linuxprobe ~]# mount -a[root@linuxprobe ~]# cd /linuxprobe[root@linuxprobe linuxprobe]# lslost+found readme.txt[root@linuxprobe linuxprobe]# cat readme.txtWelcome to Linuxprobe.com
5、刪除邏輯卷
當生產環境中想要重新部署LVM或者不再需要使用時,則需要執行LVM的刪除操作;為此,需要提前備份好重要的數據信息,然后依次刪除邏輯卷、卷組、物理卷設備,這個順序不可顛倒!!
第1步:取消邏輯卷與目錄的掛載關聯,刪除配置文件中永久生效的設備參數:
?[root@linuxprobe ~]# umount /linuxprobe[root@linuxprobe ~]# vim /etc/fstab.../dev/storage/vo /linuxprobe ext4 defaults 0 0(刪除掉這行)
第2步:刪除邏輯卷設備,需要輸入y來確認操作:
?[root@linuxprobe ~]# lvremove /dev/storage/voDo you really want to remove active logical volume storage/vo? [y/n]: yLogical volume "vo" successfully removed
第3步:刪除卷組,此處只寫卷組名即可,不需要設備的絕對路徑。
?[root@linuxprobe ~]# vgremove storgaeVolume group "storage" successfully removed
第4步:刪除物理卷設備:
?[root@linuxprobe ~]# pvremove /dev/sdb /dev/sdcLabels on Physical volume "/dev/sdb" successfully wiped.Labels on Physical volume "/dev/sdc" successfully wiped.
上述操作執行完畢后,再執行display、vgdisplay、pvdisplay命令來查看LVM的信息時就不會再看到信息了。
致謝
在此,我要對所有為知識共享做出貢獻的個人和機構表示最深切的感謝。同時也感謝每一位花時間閱讀這篇文章的讀者,如果文章中有任何錯誤,歡迎留言指正。?
學習永無止境,讓我們共同進步!!