2021-05-12 14:32:11
Ubuntu 上建立常用磁碟陣列
RAID(Redundant Array of Independent Disk 獨立冗餘磁碟陣列)技術是加州大學伯克利分校1987年提出,最初是為了組合小的廉價磁碟來代替大的昂貴磁碟,同時希望磁碟失效時不會使對資料的存取受損 失而開發出一定水平的資料保護技術。RAID就是一種由多塊廉價磁碟構成的冗餘陣列,在作業系統下是作為一個獨立的大型儲存裝置出現。RAID可以充分發 揮出多塊硬碟的優勢,可以提升硬碟速度,增大容量,提供容錯功能夠確保資料安全性,易於管理的優點,在任何一塊硬碟出現問題的情況下都可以繼續工作,不會 受到損壞硬碟的影響。
RAID 為 Redundant Array of Indepent Disks (獨立磁碟冗餘陣列) 的縮寫,其基本思想就是把多個相對便宜的硬碟組合起來,成為一個硬碟陣列組,使效能達到甚至超過一個價格昂貴、容量巨大的硬碟。根據選擇的版本不同,RAID比單顆硬碟有以下一個或多個方面的好處:增強資料整合度,增強容錯功能,增加處理量或容量。另外,磁碟陣列對於電腦來說,看起來就像一個單獨的硬碟或邏輯儲存單元。最常用的四種RAID為 RAID 0、RAID 1、RAID 5、RAID 10。
我們將會使用 mdadm
這個Ubuntu上的工具建立和管理磁碟陣列。
必要的準備
如果要檢視當前機器上是否具有磁碟陣列的設定(在 /proc/mdstat
檔案內),我們可以打以下的指令:
$ cat /proc/mdstat
> Output
> Personalities : [raid0] [linear] [multipath] [raid1] [raid6] [raid5] [raid4] [raid10]
> md0 : active raid0 sdc[1] sdd[0]
> 209584128 blocks super 1.2 512k chunks
>
> unused devices: <none>
從檔案系統中解除安裝磁碟陣列:
$ sudo umount /dev/md0
然後,暫停並移除此磁碟陣列:
$ sudo mdadm --stop /dev/md0
$ sudo mdadm --remove /dev/md0
查出磁碟的結構的指令:
$ lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT
輸出
NAME SIZE FSTYPE TYPE MOUNTPOINT
sda 00G disk
sdb 00G disk
sdc 00G linux_raid_member disk
sdd 00G linux_raid_member disk
vda 0G disk
├─vda1 0G ext4 part /
└─vda15 M part
如果發現我們的磁碟已經做過陣列,我們需要重置它們的超級塊(Superblock),使其正常化:
$ sudo mdadm --zero-superblock /dev/sdc
$ sudo mdadm --zero-superblock /dev/sdd
你應該刪除所有的陣列相關的參照設定,例如在 /etc/fstab
檔案內自動掛載設定
$ sudo nano /etc/fstab
# /etc/fstab
. . .
# 將這行註釋,否則會引至啟動失敗
# /dev/md0 /mnt/md0 ext4 defaults,nofail,discard 0 0
當然,你還需要在陣列定義檔案 /etc/mdadm/mdadm.conf
內移除原有的陣列設定
sudo nano /etc/mdadm/mdadm.conf
# /etc/mdadm/mdadm.conf
. . .
# 注釋陣列設定
# ARRAY /dev/md0 metadata=1.2 name=mdadmwrite:0 UUID=7261fb9c:976d0d97:30bc63ce:85e76e91
最後更新 initramfs 系統:
sudo update-initramfs -u
OK,此時一切回到沒有陣列的普通磁碟狀態了,我們就可以開始以下的嘗試了。
Initramfs 初始 ram 檔案系統基於 'tmpfs ' (大小靈活、 記憶體中的輕量級檔案系統),但是他並不是一個單獨的塊裝置 (所以沒有快取和所有額外的開銷)。就像 initrd,它包含的工具和指令碼在被稱為真正的根檔案系統上的二進位制檔案 init啟動之前被掛載 。這些工具可以解密抽象層 (用於加密的檔案系統),邏輯卷管理器,軟體 raid,藍牙驅動程式基於檔案系統的裝載機等。
格式化
在格式化過程中有一個點大家要注意的是,由於現在的硬碟容量越來越大,fdisk
只能硬式化2T以內的硬碟,如果你想用兩個3T的硬碟做陣列那麼還是用Parted GPT吧:
$ sudo parted /dev/sdb
這個指令按照嚮導來做就好了,過程極其簡單。將格式做成 ext4
就可以了。
RAID 0
RAID 0 即Data Stripping(資料分條技術)。整個邏輯盤的資料是被分條(stripped)分布在多個物理磁碟上,可以並行讀/寫,提供最快的速度,但沒有冗餘能力。要求至少兩個磁碟。我們通過RAID 0可以獲得更大的單個邏輯盤的容量,且通過對多個磁碟的同時讀取獲得更高的存取速度。RAID 0首先考慮的是磁碟的速度和容量,忽略了安全,只要其中一個磁碟出了問題,那麼整個陣列的資料都會不保了。
在開始之前我們還是先用 lsblk
檢視一下磁碟的狀態:
$ lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT
Output
NAME SIZE FSTYPE TYPE MOUNTPOINT
sda 00G disk
sdb 00G disk
vda 0G disk
├─vda1 0G ext4 part /
└─vda15 M part
建立陣列
$ sudo mdadm --create --verbose /dev/md0 --level=0 --raid-devices=2 /dev/sda /dev/sdb
檢查磁碟陣列的狀態:
$ cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid0 sdb[1] sda[0]
209584128 blocks super 1.2 512k chunks
unused devices: <none>
RAID 1
兩組以上的N個磁碟相互作映象,在一些多執行緒作業系統中能有很好的讀取速度,理論上讀取速度等於硬碟數量的倍數,另外寫入速度有微小的降低。只要一個磁碟正常即可維持運作,可靠性最高。其原理為在主硬碟上存放資料的同時也在映象硬碟上寫一樣的資料。當主硬碟(物理)損壞時,映象硬碟則代替主硬碟的工作。因為有映象硬碟做資料備份,所以RAID 1的資料安全性在所有的RAID級別上來說是最好的。但無論用多少磁碟做RAID 1,僅算一個磁碟的容量,是所有RAID中磁碟利用率最低的一個級別。
- 磁碟利用率為50%。也就是說,如果我們有兩個磁碟每個500GB,總共是1TB,但在映象中它只會顯示500GB。
- 在映象如果一個磁碟發生故障不會有資料丟失,因為兩個磁碟中的內容相同。
- 讀取效能會比寫入效能更好。
建立 RAID 1 至少要有兩個磁碟,你也可以新增更多的磁碟,磁碟數需為2,4,6,8等偶數。要新增更多的磁碟,你的系統必須有 RAID 物理介面卡(硬體卡)。
這裡,我們使用軟體 RAID 不是硬體 RAID,如果你的系統有一個內建的物理硬體 RAID 卡,你可以從它的功能介面或使用 Ctrl + I 鍵來存取它。
建立陣列
$ sudo mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/sda /dev/sdb
RAID 5
RAID Level 5是一種儲存效能、資料安全和儲存成本兼顧的儲存解決方案。它使用的是Disk Striping(硬碟分割區)技術。RAID 5至少需要三塊硬碟,RAID 5不是對儲存的資料進行備份,而是把資料和相對應的奇偶校驗資訊儲存到組成RAID5的各個磁碟上,並且奇偶校驗資訊和相對應的資料分別儲存於不同的磁碟上。當RAID5的一個磁碟資料發生損壞後,可以利用剩下的資料和相應的奇偶校驗資訊去恢復被損壞的資料。RAID 5可以理解為是RAID 0和RAID 1的折衷方案。RAID 5可以為系統提供資料安全保障,但保障程度要比映象低而磁碟空間利用率要比映象高。RAID 5具有和RAID 0相近似的資料讀取速度,只是因為多了一個奇偶校驗資訊,寫入資料的速度相對單獨寫入一塊硬碟的速度略慢,若使用“回寫快取”可以讓效能改善不少。同時由於多個資料對應一個奇偶校驗資訊,RAID 5的磁碟空間利用率要比RAID 1高,儲存成本相對較便宜。
$ lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT
NAME SIZE FSTYPE TYPE MOUNTPOINT
sda 00G disk
sdb 00G disk
sdc 00G disk
vda 0G disk
├─vda1 0G ext4 part /
└─vda15 M part
建立RAID 5陣列
$ sudo mdadm --create --verbose /dev/md0 --level=5 --raid-devices=3 /dev/sda /dev/sdb /dev/sdc
RAID 6
與RAID 5相比,RAID 6增加第二個獨立的奇偶校驗資訊塊。兩個獨立的奇偶系統使用不同的演算法,資料的可靠性非常高,任意兩塊磁碟同時失效時不會影響資料完整性。RAID 6需要分配給奇偶校驗資訊更大的磁碟空間和額外的校驗計算,相對於RAID 5有更大的IO操作量和計算量,其“寫效能”強烈取決於具體的實現方案,因此RAID6通常不會通過軟體方式來實現,而更可能通過硬體/韌體方式實現。
同一陣列中最多容許兩個磁碟損壞。更換新磁碟後,資料將會重新算出並寫入新的磁碟中。依照設計理論,RAID 6必須具備四個以上的磁碟才能生效。
$ lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT
NAME SIZE FSTYPE TYPE MOUNTPOINT
sda 00G disk
sdb 00G disk
sdc 00G disk
sdd 00G disk
vda 0G disk
├─vda1 0G ext4 part /
└─vda15 M part
建立陣列
$ sudo mdadm --create --verbose /dev/md0 --level=6 --raid-devices=4 /dev/sda /dev/sdb /dev/sdc /dev/sdd
RAID 10
RAID 10是先鏡射再分割區資料,再將所有硬碟分為兩組,視為是RAID 0的最低組合,然後將這兩組各自視為RAID 1運作。
RAID 10(又叫RAID 1+0)特點:
- 最少需要4塊磁碟
- 先按RAID 0分成兩組,再分別對兩組按RAID 1方式映象
- 兼顧冗餘(提供映象儲存)和效能(資料條帶形分布)
-
在實際應用中較為常用
$ lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT
NAME SIZE FSTYPE TYPE MOUNTPOINT
sda 00G disk
sdb 00G disk
sdc 00G disk
sdd 00G disk
vda 0G disk
├─vda1 0G ext4 part /
└─vda15 M part
建立陣列
sudo mdadm --create --verbose /dev/md0 --level=10 --raid-devices=4 /dev/sda /dev/sdb /dev/sdc /dev/sdd
掛載檔案系統
下一步,在陣列上建立檔案系統:
$ sudo mkfs.ext4 -F /dev/md0
在檔案系統上建立掛載點的資料夾
$ sudo mkdir -p /mnt/md0
掛載陣列至掛載點資料夾上
$ sudo mount /dev/md0 /mnt/md0
檢查是否已具有新的磁碟空間:
$ df -h -x devtmpfs -x tmpfs
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 20G 1.1G 18G 6% /
/dev/md0 197G 60M 187G 1% /mnt/md0
現在檔案系統已經成載掛載將可以存取了。
開機自動掛載
為了確保陣列開機時被載入,我們應該調整一下 /etc/mdadm/mdadm.conf
的組態檔,我可以加以下的指令使系統在啟動自檢時掃描磁碟陣列的詳細資訊:
$ sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf
另外,你可以更新 initfamfs 或者初始化RAM檔案系統,這樣一來陣列會在啟動前就可以生效:
$ sudo update-initramfs -u
最重要的一點是一定要在 /etc/fstab
組態檔內加入自動掛載的設定:
$ echo '/dev/md0 /mnt/md0 ext4 defaults,nofail,discard 0 0' | sudo tee -a /etc/fstab
這樣 ubuntu 啟動後就會自動將磁碟陣列掛入了。
另外,如果沒有設定自動掛載,在系統重新啟動後或磁碟名稱更改(插入其它硬碟會導致盤名變更的)例如 /dev/md0
變成了 /dev/md127
就可能會出現磁碟不能被掛載的問題,此時切記重新建立陣列,因這將會毀掉你的一切!重新手工掛載一下就OK了:
$ sudo mount /dev/md127 /mnt/md0
如何在Linux上構建 RAID 10陣列 http://www.linuxidc.com/Linux/2014-12/110318.htm
Debian軟RAID安裝筆記 - 使用mdadm安裝RAID1 http://www.linuxidc.com/Linux/2013-06/86487.htm
常用RAID技術介紹以及範例演示(多圖) http://www.linuxidc.com/Linux/2013-03/81481.htm
Linux實現最常用的磁碟陣列-- RAID5 http://www.linuxidc.com/Linux/2013-01/77880.htm
RAID0+1和RAID5的效能測試結果 http://www.linuxidc.com/Linux/2012-07/65567.htm
Linux入門教學:磁碟陣列(RAID) http://www.linuxidc.com/Linux/2014-07/104444.htm
本文永久更新連結地址:http://www.linuxidc.com/Linux/2016-10/136396.htm
相關文章