[Linux] RAID存儲技術

目錄

RAID實現方式

RAID 0

RAID 1

RAID 5

RAID 10

管理RAID0

創建RAID

查看RAID

格式化和掛載

刪除RAID

管理RAID1

創建RAID

查看RAID

格式化和掛載

增加熱備盤

模擬故障

刪除故障磁盤

刪除RAID

管理RAID5

創建RAID

查看RAID

md5設備劃分分區


RAID實現方式

從實現角度看,RAID主要分為:

  • 軟RAID:所有功能均有操作系統和CPU來完成,沒有獨立的RAID控制/處理芯片和I/O處理芯片,效率最低。

  • 硬RAID:配備了專門的RAID控制/處理芯片和I/O處理芯片以及陣列緩沖,不占用CPU資源,成本很高。

  • 軟硬混合RAID:具備RAID控制/處理芯片,但缺乏I/O處理芯片,需要CPU和驅動程序來完成,性能和成本在軟RAID和硬RAID之間。

RAID 0

RAID0使用數據條帶化(striping)的方式將數據分散存儲在多個磁盤驅動器上,而不進行冗余備份。數據被分成固定大小的塊,并依次存儲在每個磁盤上。

例如,如果有兩個驅動器(驅動器A和驅動器B),一塊數據的第一個部分存儲在驅動器A上,第二個部分存儲在驅動器B上,以此類推。這種條帶化的方式可以同時從多個驅動器讀取或寫入數據,從而提高系統的性能。

適用于需要高性能而不關心數據冗余的場景

優點

  • 高性能:通過數據條帶化和并行讀寫操作,RAID0可以提供更快的數據傳輸速度和更高的系統性能。

  • 成本效益:相對于其他RAID級別(如RAID1或RAID5),RAID0不需要額外的磁盤用于冗余備份,因此在成本上更具競爭力。

缺點

  • 缺乏冗余:由于RAID0不提供數據冗余,如果任何一個驅動器發生故障,所有數據都可能丟失。因此,RAID0不適合存儲關鍵數據。

  • 可靠性降低:由于沒有冗余備份,RAID0的可靠性相對較低。如果任何一個驅動器發生故障,整個陣列的可用性將受到影響。

RAID 1

優點

  • 數據冗余備份:RAID1通過數據鏡像將數據完全復制到多個驅動器上,提供冗余備份,保護數據免受驅動器故障的影響。

  • 高可用性:由于數據的冗余備份,即使一個驅動器發生故障,系統仍然可以從其他驅動器中讀取數據,保證數據的可用性和連續性。

  • 讀取性能提升:RAID1可以通過并行讀取數據的方式提升讀取性能,從而加快數據訪問速度。

缺點

  • 成本增加:由于需要額外的磁盤用于數據冗余備份,RAID1的成本相對較高。需要考慮額外的硬件成本。

  • 寫入性能略低:由于數據需要同時寫入多個驅動器,相對于單個驅動器的寫入性能,RAID1的寫入性能可能略低。

RAID 5

優點

  • 性能增強:通過數據條帶化和并行讀寫操作,RAID5可以提供較高的數據傳輸速度和系統性能。

  • 數據冗余備份:通過分布式奇偶校驗,RAID5可以提供數據的冗余備份,保護數據免受驅動器故障的影響。

  • 成本效益:相對于其他RAID級別(如RAID1),RAID5只需要額外一個驅動器用于奇偶校驗信息,從而在成本上更具競爭力。

缺點

  • 寫入性能受限:由于寫入數據時需要重新計算奇偶校驗信息,相對于讀取操作,RAID5的寫入性能較低。

  • 驅動器故障期間的數據完整性:如果一個驅動器發生故障,系統在恢復數據時需要進行計算,這可能導致數據訪問速度較慢,并且在此期間可能會有數據完整性的風險。

RAID 10

優點

  • 高性能:通過數據條帶化和并行讀寫操作,RAID10可以提供較高的數據傳輸速度和系統性能。

  • 數據冗余備份:通過數據鏡像將數據完全復制到另一個驅動器上,RAID10提供了數據的冗余備份,保護數據免受驅動器故障的影響。

  • 較高的可靠性:由于RAID10采用鏡像的方式進行數據冗余備份,即使一個驅動器發生故障,仍然可以從其他驅動器中讀取數據,確保數據的可用性和連續性。

  • 快速的故障恢復:在RAID10中,如果一個驅動器發生故障,系統可以直接從鏡像驅動器中恢復數據,而無需進行復雜的計算,從而加快故障恢復的速度。

缺點

  • 較高的成本:相對于其他RAID級別,RAID10需要更多的驅動器用于數據鏡像,從而增加了硬件成本。

  • 低效的空間利用:由于RAID10的數據鏡像特性,有效的存儲容量只等于所有驅動器中一半的容量,因此空間利用率較低。

管理RAID0

創建RAID

#創建一個包含2個塊設備的raid0設備/dev/md0
mdadm -C /dev/md0 -l raid0 -n 2 /dev/sd{b,c}

查看RAID

#查看raid信息
cat /proc/mdstat
#查看raid設備詳細信息
mdadm -D /dev/md0

格式化和掛載

mkfs.xfs /dev/md0
mkdir /data/raid0
mount /dev/md0 /data/raid0
df -h /data/raid0#創建數據
cp /etc/ho* /data/raid0
ls /data/raid0/

刪除RAID

#卸載
umount /dev/md0
#stop RAID陣列,將刪除陣列
mdadm --stop /dev/md0
#清除原先設備上的 md superblock
mdadm --zero-superblock /dev/sd{b,c}

raid0條帶不能增加新成員盤

raid0條帶不能強制故障成員盤

管理RAID1

創建RAID

#創建一個包含兩個塊設備的raid1設備/dev/md1
mdadm -C /dev/md1 -l 1 -n 2 /dev/sd{a,b}

查看RAID

mdadm -D /dev/md1

等待同步完成

格式化和掛載

mkfs.xfs /dev/md1
mkdir -p /data/raid1
mount /dev/md1 /data/raid1
df -h /data/raid1#創建數據
cp /etc/ho* /data/raid1
ls /data/raid1/

增加熱備盤

mdadm /dev/md1 -a /dev/sdd
mdadm -D /dev/md1 | tail -5

此時sdd的狀態為spare(備用)

模擬故障

mdadm /dev/md1 -f /dev/sdb
#查看成員狀態
mdadm -D /dev/md1 |tail -5

sdd立刻頂替故障磁盤,并進行同步。數據依然能夠正常訪問

刪除故障磁盤

m3stopdadm /dev/md1 -r /dev/sdb
mdadm -D /dev/md1 |tail -5

刪除RAID

#卸載
umount /dev/md1
#stop RAID陣列,將刪除陣列
mdadm --stop /dev/md1
#清除原先設備上的md superblock
mdadm --zero-superblock /dev/sd{a..d}

管理RAID5

創建RAID

#創建一個包含4個塊設備的raid5設備/dev/md5
mdadm -C /dev/md5 -l 5 -n 4 /dev/sd{b..e}

查看RAID

mdadm -D /dev/md5

md5設備劃分分區

#創建兩個分區
fdisk /dev/md5
lsblk /dev/md5

#格式化
mkfs.xfs /dev/md5p1
mkfs.xfs /dev/md5p2
#新建目錄
mkdir /data/webapp /data/dbapp
#掛載
mount /dev/md5p1 /data/webapp/
mount /dev/md5p2 /data/dbapp/
#驗證
df -h | grep md5
echo hello webapp > /data/webapp/test
echo hello dbapp > /data/dbapp/test
#添加備用盤
mdadm /dev/md5 --add /dev/sdf
#模擬故障
mdadm /dev/md5 --fail /dev/sdb
##此時會發現sdf立刻頂替了損壞的盤
#移除故障盤
mdadm /dev/md5 --remove /dev/sdf
#再次添加
mdadm /dev/md5 --add /dev/sdb
#擴容raid設備,將raid成員數增加到5個
mdadm -G /dev/md5 --raid-devices 5
mdadm /dev/md5 --add /dev/sdg
lsblk /dev/md5
#新建分區3
fdisk /dev/md5
lsblk
#文件系統擴容
df -hT /data/dbapp/
xfs_growfs /data/dbapp/
df -hT /data/dbapp/

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/95748.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/95748.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/95748.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

程序設計|C語言教學——C語言基礎4:進階

一、預處理指令預處理指令在編譯前執行,除了#include,還有以下常用指令:1. #define 宏定義無參宏:定義常量或代碼片段,編譯時直接替換(無類型檢查)。#define PI 3.1415926 // 定義常量 #define…

數據結構之heap算法

文章目錄前言1. heap結構概述2. push_heap3. pop_heap4. sort_heap5. make_heap前言 heap這種數據結構,允許用戶以任何次序將任何數據放入該結構中,但是最后取出數據的時候一定是權值最高(或者最低)的元素。主要和實現有關&#x…

MCU 軟件斷點調試注意事項!!!

——為什么調試器會在運行中改我的Flash程序?調試單片機時,很多人都有這樣的疑問:明明我在調試前刷進去的固件是好的,為什么加了一個斷點之后,調試器居然去改了 Flash? 如果我拔掉調試器,這個固…

啟發式合并 + 莫隊 戀戀的心跳大冒險

題目來源:2025 Wuhan University of Technology Programming Contest 比賽鏈接:Dashboard - 2025 Wuhan University of Technology Programming Contest - Codeforces 題目大意: Solution: 首先肯定要預處理出以每個節點為起點…

JCTools 無鎖并發隊列基礎:ConcurrentCircularArrayQueue

ConcurrentCircularArrayQueue ConcurrentCircularArrayQueue 是一個抽象類,它為基于數組的并發循環隊列提供了基礎功能。從其命名可以看出幾個關鍵特性:??Concurrent??:常指無鎖并發。??Circular Array??:內部使用循環數…

力扣(LeetCode) ——622. 設計循環隊列(C語言)

題目:622. 設計循環隊列示例1: MyCircularQueue circularQueue new MyCircularQueue(3); // 設置長度為 3 circularQueue.enQueue(1); // 返回 true circularQueue.enQueue(2); // 返回 true circularQueue.enQueue(3); // 返回 true circularQueue.…

在JVM跑JavaScript腳本 | Oracle GraalJS 簡介與實踐

這是2024年初的 GraalVM 系列博文,當時寫了大綱,知道一年半后的現在才得以完成發布😄 1、概述 實話說,標題的場景為小眾需求,日常開發基本用不到,我是最近在做一個低代碼輪子玩具 app-meta 需要實現 FaaS&…

基于 EC 數據與大模型技術實現天氣預報:從數據到上線的全棧方法

1. 先校準“EC 數據”與“AI 預報”的語境 EC 數據家族(常用) IFS/HRES:確定性全球模式,水平分辨率約 9 km,常用預報范圍 10 天; IFS/ENS:51 成員集合預報,提供 15 天概率信息; ERA5:再分析數據,小時級、0.25,可追溯至 1940 年,用作訓練/評測黃金基準。 AI 預報…

迭代器模式及優化

迭代器模式(Iterator Pattern)是一種行為型設計模式,用于提供一種統一的方式遍歷聚合對象(如集合、容器)中的元素,而無需暴露對象的內部實現細節。它將遍歷邏輯與聚合對象分離,使得遍歷操作可以…

純Qt手撕gb28181協議/gb28181協議服務端/gb28181協議設備端/gb28181設備模擬器/gb28181虛擬監控設備

一、前言說明 搞完onvif設備模擬器,總想著把28181設備模擬也實現,因為之前已經花了大力氣把28181平臺軟件端實現了,為了實現這個組件,頭發掉了一大把,專門把國標文檔看了好幾遍,逐行閱讀,針對需…

【滲透實戰】無下載器環境(curl/wget)下玩轉 Metasploit 自動利用

1. 背景與問題場景 在滲透測試或漏洞利用中,Metasploit(MSF)是業界最常用的框架之一。 其許多 RCE(遠程代碼執行)模塊在落地 payload(如 Meterpreter 或反彈 shell)時,采用了 CMD St…

jd-hotkey探測熱點key

對任意突發性的無法預先感知的熱點數據,包括并不限于熱點數據(如突發大量請求同一個商品)、熱用戶(如惡意爬蟲刷子)、熱接口(突發海量請求同一個接口)等,進行毫秒級精準探測到。然后…

C#WPF實戰出真汁07--【系統設置】--菜品類型設置

1、菜品設置介紹 菜品設置跟餐桌設置的功能目的是相同的,包括了新增,刪除,編輯,分頁,查詢,重置,全選,全消,列表功能,實現流程也是布局設計,后臺邏…

aave v3 存款與借款利息的計算方式

本文只涉及到利率計算的數學原理,不作源碼解析:存款首先我們假設小明在aave里面存了10000usdt,存的時候年化收益率是5%,那么半年后其存款的利息是多少呢?常規的計算方式如下:利息10000*5%*(存款的時長/一年的時長)這么做有什么問題呢?假設現…

Windows MCP.Net:基于.NET的Windows桌面自動化MCP服務器深度解析

📋 目錄 項目概述 技術架構深度解析 核心功能模塊詳解 代碼實現分析 使用場景與實戰案例 性能優化與最佳實踐 擴展開發指南 總結與展望 項目概述 什么是Windows-MCP.Net? Windows MCP.Net是一個基于.NET 10.0開發的Windows桌面自動化MCP&…

Boost.Asio學習(7):Boost.Beast實現簡易http服務器

namespace beast boost::beast;beast::flat_buffer是一個用于 Boost.Asio 和 Boost.Beast 網絡讀寫的緩沖區實現。專為 一次性順序讀取 / 消費 場景設計,比 std::string 或 std::vector 高效,因為它是扁平內存結構(contiguous memory&#x…

深入解析JVM內存區域劃分:從理論到實踐

Java虛擬機(JVM)是Java程序運行的核心環境,它負責管理內存分配、垃圾回收、字節碼執行等關鍵任務。理解JVM的內存區域劃分,對于優化Java應用性能、排查內存問題(如OutOfMemoryError、StackOverflowError)至…

滑窗|貪心|?滾動數組

lc17.08pair按身高升序、相同時體重降序排序結果是找體重序列的最長遞增子序列長度核心&#xff1a;轉化為二維最長遞增子序列問題求解vector<int> dp;for (auto& p : hw) {int w p.second;auto it lower_bound(dp.begin(), dp.end(), w);if (it dp.end()) {dp.pu…

深入理解數據庫架構:從原理到實踐的完整指南

一、數據庫存儲架構的多維度分類體系 1.1 基于數據組織方式的存儲架構分類 數據庫的存儲架構從根本上決定了其性能特征、適用場景和擴展能力。理解不同的數據組織方式是選擇合適數據庫技術的基礎&#xff0c;這種分類不僅反映了技術實現的差異&#xff0c;更體現了對不同業務需…

體彩排列三第2025218期號碼分析

大家好&#xff0c;本人蔡楚門來此平臺分享一下本期得經驗和思路&#xff0c;希望能夠給大家帶來好的運氣和靈感&#xff01;體彩排列三第2025218期號碼分析&#xff0c;大小號碼數字分析&#xff0c;上期開出全小號碼最多&#xff0c;最近兩期的開獎號碼全部都是全小號碼最多&…