共用方式為


在 Linux 上設定軟體 RAID

在 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 mdadm
    
  • CentOS 和 Oracle Linux

    sudo yum install mdadm
    
  • SLES 和 openSUSE

    zypper install mdadm
    

建立磁碟分區

在此範例中,我們會在 /dev/sdc 上建立單一磁碟分區。 新的磁碟分區稱為 /dev/sdc1。

  1. 開始 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').
    
  2. 在提示中按 'n' 鍵以建立分割區:

    Command (m for help): n
    
  3. 接下來,按 'p' 建立 p邊緣分割區:

    Command action
            e   extended
            p   primary partition (1-4)
    
  4. 按 '1' 選取分割區編號 1:

    Partition number (1-4): 1
    
  5. 選取新磁碟分區的起點,或按 <enter> 接受預設值,將磁碟分區放在磁碟驅動器上可用空間的開頭:

    First cylinder (1-1305, default 1):
    Using default value 1
    
  6. 選取分割區的大小,例如輸入 『+10G』 以建立 10 GB 的數據分割。 或者,按 <enter> 建立橫跨整個磁碟驅動器的單一磁碟分區:

    Last cylinder, +cylinders or +size{K,M,G} (1-1305, default 1305): 
    Using default value 1305
    
  7. 接下來,將分區的識別碼和類型從預設識別碼 '83'(Linux)變更為識別碼 'fd'(Linux raid auto):

    Command (m for help): t
    Selected partition 1
    Hex code (type L to list codes): fd
    
  8. 最後,將分割表寫入磁碟,然後退出 fdisk。

    Command (m for help): w
    The partition table has been altered!
    

建立RAID陣列

  1. 下列範例將使用「條帶化」(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
    
  2. 在新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 檔案。

  1. 為新的檔案系統建立所需的裝入點,例如:

    sudo mkdir /data
    
  2. 編輯 /etc/fstab 時,應該使用 UUID 來參考文件系統,而不是裝置名稱。 使用 blkid 公用程式來判斷新檔案系統的 UUID:

    sudo /sbin/blkid
    ...........
    /dev/md127: UUID="aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee" TYPE="ext4"
    
  3. 在文本編輯器中開啟 /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。

  4. 測試 /etc/fstab 條目是否正確:

    sudo mount -a
    

    如果此命令產生錯誤訊息,請檢查 /etc/fstab 檔案中的語法。

    接下來執行 mount 命令,以確保檔案系統已掛接:

    mount
    .................
    /dev/md127 on /data type ext4 (rw)
    
  5. (選擇性)安全開機參數

    fstab 組態

    許多散佈包括 nobootwaitnofail 掛載參數,這些參數可加入至 /etc/fstab 檔案。 這些參數允許掛接特定文件系統時發生失敗,並允許 Linux 系統繼續開機,即使無法正確掛接 RAID 檔案系統也一樣。 如需這些參數的詳細資訊,請參閱您的發行版的文件。

    範例 (Ubuntu):

    UUID=aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee  /data  ext4  defaults,nobootwait  0  2
    

    Linux 開機參數

    除了上述參數之外,核心參數 「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 /data
    

    RHEL/CentOS

    # sudo yum install util-linux
    # sudo fstrim /data