Ubuntu 上建立經常使用磁盤陣列

RAID(Redundant Array of Independent Disk 獨立冗餘磁盤陣列)技術是加州大學伯克利分校1987年提出,最初是爲了組合小的廉價磁盤來代替大的昂貴磁盤,同時但願磁盤失效時不會使對數據的訪問受損 失而開發出必定水平的數據保護技術。RAID就是一種由多塊廉價磁盤構成的冗餘陣列,在操做系統下是做爲一個獨立的大型存儲設備出現。RAID能夠充分發 揮出多塊硬盤的優點,能夠提高硬盤速度,增大容量,提供容錯功可以確保數據安全性,易於管理的優勢,在任何一塊硬盤出現問題的狀況下均可以繼續工做,不會 受到損壞硬盤的影響。linux

RAID 爲 Redundant Array of Indepent Disks (獨立磁盤冗餘陣列) 的縮寫,其基本思想就是把多個相對便宜的硬盤組合起來,成爲一個硬盤陣列組,使性能達到甚至超過一個價格昂貴、容量巨大的硬盤。根據選擇的版本不一樣,RAID比單顆硬盤有如下一個或多個方面的好處:加強數據集成度,加強容錯功能,增長處理量或容量。另外,磁盤陣列對於電腦來講,看起來就像一個單獨的硬盤或邏輯存儲單元。最經常使用的四種RAID爲 RAID 0、RAID 一、RAID 五、RAID 10。算法

咱們將會使用 mdadm 這個ubuntu上的工具建立和管理磁盤陣列。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      100G                   disk 
sdb      100G                   disk 
sdc      100G linux_raid_member disk 
sdd      100G linux_raid_member disk 
vda       20G                   disk 
├─vda1    20G ext4              part /
└─vda15    1M                   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      100G        disk
sdb      100G        disk
vda       20G        disk 
├─vda1    20G ext4   part /
└─vda15    1M        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      100G        disk
sdb      100G        disk
sdc      100G        disk
vda       20G        disk 
├─vda1    20G ext4   part /
└─vda15    1M        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      100G        disk
sdb      100G        disk
sdc      100G        disk
sdd      100G        disk
vda       20G        disk 
├─vda1    20G ext4   part /
└─vda15    1M        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      100G        disk
sdb      100G        disk
sdc      100G        disk
sdd      100G        disk
vda       20G        disk 
├─vda1    20G ext4   part /
└─vda15    1M        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
相關文章
相關標籤/搜索