在 Linux 上設定軟體 RAID
在 Azure 的 Linux 虛擬機器上使用軟體 RAID,以單一 RAID 裝置的形式顯示多個連接的資料磁碟,這種案例很常遇到。 相較於只使用單一磁碟,這通常可用來提高效能並允許增加輸送量。
連接資料磁碟
設定 RAID 裝置需要兩個以上的空白資料磁碟。 建立 RAID 裝置的主要原因是要提升磁碟 IO 效能。 根據 IO 需求,您可以選擇連接儲存在標準儲存體且一個磁碟最多具有 500 IO/ps 的磁碟,或進階儲存體且一個磁碟最多具有 5000 IO/ps 的磁碟。 本文不會詳細說明如何佈建資料磁碟以及將其連接至 Linux 虛擬機器。 請參閱 Microsoft Azure 文章連接磁碟,取得如何在 Azure 上將空白資料磁碟連接至 Linux 虛擬機器的詳細指示。
重要
請勿混合不同大小的磁碟,這樣做會導致 raidset 的效能限制為最慢的磁碟。
安裝 mdadm 公用程式
Ubuntu
sudo apt-get update sudo apt-get install mdadm
CentOS & Oracle Linux
sudo yum install mdadm
SLES 和 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' 以建立 主要磁碟分割:
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
接著,將磁碟分割的 ID 和類型 ( t) 從預設的 ID '83' (Linux) 變更為 ID '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 陣列的一部分,則您可能需要在
mdadm
命令中加上--force
參數: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/md127
SLES 11
sudo mkfs -t ext3 /dev/md127
SLES 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 2
Linux 開機參數
除了上述參數之外,即使 RAID 看起來已損壞或效能不佳,核心參數 "
bootdegraded=true
" 仍可讓系統開機,例如,將資料磁碟機從虛擬機器中不當移除。 依預設,這也會造成無法開機的系統。請參閱散發套件的文件,以取得如何正確編輯核心參數的相關資訊。 例如,在許多散發套件 (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 可能不會發出捨棄命令。 這是因為主機上的 unmap 細微度也是 512KB。 如果您透過 mdadm 的 --chunk=
參數修改陣列的區塊大小,則核心可能會忽略 TRIM/unmap 要求。
有兩種方式可在 Linux VM 中啟用 TRIM 支援。 像往常一樣,請參閱您的散發套件以了解建議的方法︰
在
/etc/fstab
中使用discard
掛接選項,例如:UUID=aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee /data ext4 defaults,discard 0 2
在某些情況下,
discard
選項可能會影響效能。 或者,您也可以從命令列手動執行fstrim
命令,或將它新增到 crontab 來定期執行︰Ubuntu
# sudo apt-get install util-linux # sudo fstrim /data
RHEL/CentOS
# sudo yum install util-linux # sudo fstrim /data