在 Azure 中的 Linux 虛擬機上使用軟體 RAID,將多個鏈接的數據磁碟呈現為單一 RAID 裝置,是常見的案例。 一般而言,這可以用來改善效能,而且相較於只使用單一磁碟,允許改善輸送量。
附加數據磁碟
需要兩個以上的空數據磁碟來設定RAID裝置。 建立 RAID 裝置的主要原因,是改善磁碟 IO 的效能。 根據您的 IO 需求,您可以選擇連結儲存在我們的標準記憶體中的磁碟,每個磁碟最多可有 500 個 IO/ps,或每個磁碟最多 5000 個 IO/ps 的進階記憶體。 本文不會詳細說明如何將數據磁碟布建和連結至Linux虛擬機。 如需如何將空白數據磁碟連結至 Azure 上 Linux 虛擬機的詳細指示,請參閱Microsoft Azure 一文 連結磁碟。
這很重要
請勿混合不同大小的磁碟,這麼做會導致 raidset 的效能受限於最慢的磁碟。
安裝 mdadm 公用程式
Ubuntu
sudo apt-get update sudo apt-get install mdadmCentOS 和 Oracle Linux
sudo yum install mdadmSLES 和 openSUSE
zypper install mdadm
建立磁碟分區
在此範例中,我們會在 /dev/sdc 上建立單一磁碟分區。 新的磁碟分區稱為 /dev/sdc1。
開始
fdisk建立分割區sudo fdisk /dev/sdc Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel Building a new DOS disklabel with disk identifier 0xa34cb70c. Changes will remain in memory only, until you decide to write them. After that, of course, the previous content won't be recoverable. WARNING: DOS-compatible mode is deprecated. It's strongly recommended to switch off the mode (command 'c') and change display units to sectors (command 'u').在提示中按 'n' 鍵以建立新分割區:
Command (m for help): n接下來,按 'p' 建立 p邊緣分割區:
Command action e extended p primary partition (1-4)按 '1' 選取分割區編號 1:
Partition number (1-4): 1選取新磁碟分區的起點,或按
<enter>接受預設值,將磁碟分區放在磁碟驅動器上可用空間的開頭:First cylinder (1-1305, default 1): Using default value 1選取分割區的大小,例如輸入 『+10G』 以建立 10 GB 的數據分割。 或者,按
<enter>建立橫跨整個磁碟驅動器的單一磁碟分區:Last cylinder, +cylinders or +size{K,M,G} (1-1305, default 1305): Using default value 1305接下來,將分區的識別碼和類型從預設識別碼 '83'(Linux)變更為識別碼 'fd'(Linux raid auto):
Command (m for help): t Selected partition 1 Hex code (type L to list codes): fd最後,將分割表寫入磁碟,然後退出 fdisk。
Command (m for help): w The partition table has been altered!
建立RAID陣列
下列範例將使用「條帶化」(RAID 層級 0)來處理分布在三個不同數據磁碟(sdc1、sdd1、sde1)上的三個分割區。 執行此命令之後,會建立名為 /dev/md127 的新 RAID 裝置。 另請注意,如果這些數據磁碟先前屬於另一個已解構的 RAID 陣列,可能需要將
--force參數新增至mdadm命令:sudo mdadm --create /dev/md127 --level 0 --raid-devices 3 \ /dev/sdc1 /dev/sdd1 /dev/sde1在新RAID裝置上建立文件系統
CentOS、Oracle Linux、SLES 12、openSUSE 和 Ubuntu
sudo mkfs -t ext4 /dev/md127SLES 11
sudo mkfs -t ext3 /dev/md127SLES 11 - 啟用 boot.md 並建立 mdadm.conf
sudo -i chkconfig --add boot.md sudo echo 'DEVICE /dev/sd*[0-9]' >> /etc/mdadm.conf備註
在 SUSE 系統上進行這些變更之後,可能需要重新啟動。 此步驟在 SLES 12 上不需要。
將新的文件系統新增至 /etc/fstab
這很重要
不當編輯 /etc/fstab 檔案可能會導致無法啟動的系統。 如果不確定,請參閱散發套件的文件,以取得如何適當編輯此檔案的相關資訊。 在編輯之前,也建議先備份 /etc/fstab 檔案。
為新的檔案系統建立所需的裝入點,例如:
sudo mkdir /data編輯 /etc/fstab 時,應該使用 UUID 來參考文件系統,而不是裝置名稱。 使用
blkid公用程式來判斷新檔案系統的 UUID:sudo /sbin/blkid ........... /dev/md127: UUID="aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee" TYPE="ext4"在文本編輯器中開啟 /etc/fstab,並新增新檔案系統的條目,例如:
UUID=aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee /data ext4 defaults 0 2或在 SLES 11上:
/dev/disk/by-uuid/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee /data ext3 defaults 0 2然後,儲存並關閉 /etc/fstab。
測試 /etc/fstab 條目是否正確:
sudo mount -a如果此命令產生錯誤訊息,請檢查 /etc/fstab 檔案中的語法。
接下來執行
mount命令,以確保檔案系統已掛接:mount ................. /dev/md127 on /data type ext4 (rw)(選擇性)安全開機參數
fstab 組態
許多散佈包括
nobootwait或nofail掛載參數,這些參數可加入至 /etc/fstab 檔案。 這些參數允許掛接特定文件系統時發生失敗,並允許 Linux 系統繼續開機,即使無法正確掛接 RAID 檔案系統也一樣。 如需這些參數的詳細資訊,請參閱您的發行版的文件。範例 (Ubuntu):
UUID=aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee /data ext4 defaults,nobootwait 0 2Linux 開機參數
除了上述參數之外,核心參數 「
bootdegraded=true」 也可以讓系統開機,即使 RAID 被視為損毀或降級,例如,如果數據磁碟驅動器無意中從虛擬機中移除。 根據預設,這可能會導致無法開機的系統。請參閱您的發行版文件,以瞭解如何正確編輯核心參數。 例如,在許多發行版中(CentOS、Oracle Linux、SLES 11)中,這些參數可能會手動新增至 “
/boot/grub/menu.lst” 檔案。 在Ubuntu上,此參數可以新增至 “/etc/default/grub” 上的GRUB_CMDLINE_LINUX_DEFAULT變數。
TRIM/UNMAP 支援
有些 Linux 核心會支援 TRIM/UNMAP 作業以捨棄磁碟上未使用的區塊。 這些作業主要適用於標準記憶體,以通知 Azure 已刪除的頁面不再有效且可捨棄。 如果您建立大型檔案,捨棄頁面可以節省成本,然後加以刪除。
備註
如果陣列的區塊大小設定為小於預設值 (512KB),RAID 可能不會發出捨棄命令。 這是因為主機上的解除映射粒度也為 512KB。 如果您透過 mdadm 的 --chunk= 參數修改了數位塊大小,核心可能會忽略 TRIM/unmap 要求。
有兩種方式可在 Linux VM 中啟用 TRIM 支援。 像往常一樣,請參考您所使用的發行版本以了解建議的方法︰
請在
discard中使用/etc/fstab掛載選項,例如:UUID=aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee /data ext4 defaults,discard 0 2在某些情況下,
discard選項可能會影響效能。 或者,您也可以從命令列手動執行fstrim命令,或將它新增到 crontab 來定期執行︰Ubuntu
# sudo apt-get install util-linux # sudo fstrim /dataRHEL/CentOS
# sudo yum install util-linux # sudo fstrim /data