跳至內容
documentation.suse.com / 儲存管理指南
SUSE Linux Enterprise Server 15 SP2

儲存管理指南

提供關於如何管理 SUSE Linux Enterprise Server 上儲存裝置的資訊。

出版日期: 2023 年 12 月 11 日

版權所有 © 2006– 2023 SUSE LLC 和貢獻者。保留所有權利。

根據 GNU 自由文件授權 (GNU Free Documentation License) 1.2 版或 1.3 版 (自由選擇),使用者可以複製、散佈與/或修改本文件;「恆常章節」為此著作權聲明與授權。GNU 自由文件授權一節中包含 1.2 版授權的一份副本。

如需 SUSE 商標,請參閱 https://www.suse.com/company/legal/。所有其他協力廠商的商標所有權分屬其各自的公司。®、 等商標符號表示 SUSE 及其關係企業的商標。星號 (*) 表示協力廠商的商標。

本手冊中所有資訊在編輯時,都已全力注意各項細節。但這不保證百分之百的正確性。因此,SUSE LLC 及其關係企業、作者或譯者都不需對任何錯誤或造成的結果負責。

關於本指南

本指南提供關於如何管理 SUSE Linux Enterprise Server 15 SP2 上儲存裝置的資訊。如需分割和管理裝置的資訊,請參閱Book “部署指南 ”, Chapter 10 “專家分割程式”。本指南的適用對象為系統管理員。

1 可用文件

注意
注意:線上文件和最新更新

我們的產品文件可從 https://documentation.suse.com/ 獲取,您也可以在此處找到最新更新,以及瀏覽或下載各種格式的文件。文件的英文版通常會提供最新的文件更新。

針對本產品提供的文件如下:

Article “安裝快速入門

此《快速入門》引導您逐步完成安裝 SUSE® Linux Enterprise Server 15 SP2 的過程。

Book “部署指南

此指南詳細介紹如何安裝單個或多個系統,以及如何利用產品繼承功能部署基礎結構。從以下多種方法中進行選擇:從實體安裝媒體進行本地安裝;自訂標準安裝影像;網路安裝伺服器;使用遠端控制的高度自訂自動化安裝程序進行大規模部署;及初始系統組態。

Book “管理指南

描述系統管理任務,如維護、監控及自訂初始安裝的系統。

Book “Virtualization Guide”

概述虛擬化技術,並介紹虛擬化的整合式介面 libvirt,以及關於特定監管程式的詳細資訊。

Book “儲存管理指南

提供關於如何管理 SUSE Linux Enterprise Server 上儲存裝置的資訊。

Book “AutoYaST Guide”

AutoYaST 系統會使用包含安裝和組態資料的 AutoYaST 設定檔,讓您以無人管理的方式大量部署 SUSE Linux Enterprise Server 系統。該手冊會指引您完成自動安裝的基本步驟:準備、安裝及設定。

Book “Security and Hardening Guide”

介紹系統安全性的基本概念,涵蓋了本地安全性與網路安全性方面。說明如何使用產品固有的安全軟體 (例如 AppArmor),或者能夠可靠收集關於任何安全相關事件之資訊的稽核系統。

Book “System Analysis and Tuning Guide”

用於偵測、解決及最佳化問題的管理員指南。其中描述了如何透過監控工具檢查並最佳化系統,以及如何有效管理資源。該指南還概述了常見問題與解決方案,以及其他說明與文件資源。

Book “Repository Mirroring Tool Guide”

訂閱管理工具的管理員指南 - SUSE Customer Center 的代理系統,其中包含儲存庫與註冊目標。瞭解如何安裝與設定本地 SMT 伺服器、鏡像複製與管理儲存庫、管理用戶端機器,以及設定用戶端以使用 SMT。

Book “GNOME 使用者指南

介紹 SUSE Linux Enterprise Server 的 GNOME 桌面。本指南將引導您使用與設定桌面,並協助您執行主要任務。主要適用對象為希望將 GNOME 做為預設桌面有效利用的終端使用者。

https://www.suse.com/releasenotes/ 上提供了本產品的版本說明。

2 提供回饋

歡迎為本文件提供回饋及協助我們改進文件!我們提供了多種回饋管道:

服務要求和支援

有關適用於產品的服務與支援選項,請參閱 https://www.suse.com/support/

若要開啟服務要求,需要在 SUSE Customer Center 中擁有一個訂閱。請移至 https://scc.suse.com/support/requests 並登入,然後按一下新建立的

錯誤報告

https://bugzilla.suse.com/ 中報告文件問題。若要簡化此程序,可以使用本文件 HTML 版本中的標題旁邊的報告文件錯誤連結。如此會在 Bugzilla 中預先選取正確的產品和類別,並新增目前章節的連結。然後,您便可以立即開始輸入錯誤報告。需要一個 Bugzilla 帳戶。

協助改進

若要協助我們改進本文件,請使用本文件 HTML 版本中的標題旁邊的編輯原始碼連結。這些連結會將您移至 GitHub 上的原始碼,在其中您可以開啟提取要求。需要一個 GitHub 帳戶。

如需本文件使用的文件環境的詳細資訊,請參閱儲存庫的讀我檔案

郵件

或者,您也可以向以下電子郵件地址報告錯誤以及傳送有關本文件的回饋: <>。請務必包含文件標題、產品版本以及文件發行日期。請參考相關的章節編號和標題 (或包含 URL),並提供問題的簡要說明。

3 文件慣例

本文件中使用以下注意事項與排版慣例:

  • /etc/passwd:目錄名稱與檔案名稱

  • 保留字元:以實際的值來取代保留字元

  • PATH:環境變數 PATH

  • ls--help:指令、選項和參數

  • user:使用者或群組

  • 套件名稱:套件的名稱

  • AltAltF1:供人按下的按鍵或案件組合;顯示的按鍵與鍵盤上一樣為大寫

  • 檔案 檔案 ›  另存新檔:功能表項目、按鈕

  • AMD/Intel 本段內容僅與 AMD64/Intel 64 架構相關。箭頭標示了文字區塊的開頭與結尾。

    IBM Z, POWER 本段內容僅與 IBM ZPOWER 架構相關。箭頭標示了文字區塊的開頭與結尾。

  • Dancing Penguins (「Penguins」一章,↑另一本手冊):這是對另一本手冊中某一章的參考。

  • 必須具有 root 權限才能執行的指令。通常,您也可以在這些指令前加上 sudo 指令,以非特權使用者身分來執行它們。

    root # command
    tux > sudo command
  • 沒有權限的使用者也可以執行的指令。

    tux > command
  • 注意事項

    警告
    警告:警告

    繼續操作之前必須瞭解的重要資訊。提醒您注意安全問題、可能的資料遺失、硬體損毀或者實際危險。

    重要
    重要:重要說明

    繼續操作之前應該瞭解的重要資訊。

    注意
    注意:備註

    其他資訊,例如各軟體版本之間的區別。

    提示
    提示:提示

    有用的資訊,例如一條準則或實用的建議。

4 產品生命週期和支援

SUSE 產品的支援週期長達 13 年。若要查看產品的生命週期日期,請參閱 https://www.suse.com/lifecycle/

SUSE Linux Enterprise 適用以下生命週期和發行週期:

  • SUSE Linux Enterprise Server 的生命週期為 13 年:10 年的一般支援,以及 3 年的延伸支援。

  • SUSE Linux Enterprise Desktop 的生命週期為 10 年:7 年的一般支援,以及 3 年的延伸支援。

  • 主要版本每 4 年發行一次。Service Pack 每 12-14 個月發行一次。

  • 當新的 SUSE Linux Enterprise Service Pack 發行後,SUSE 會在 6 個月後停止對上一個 Service Pack 的支援。

某些產品提供長期 Service Pack 支援 (LTSS)。如需我們的支援規則和選項的資訊,請參閱 https://www.suse.com/support/policy.htmlhttps://www.suse.com/support/programs/long-term-service-pack-support.html

模組的生命週期、更新規則和更新時間軸與其基本產品不同。模組包含軟體套件,是完全受到支援的 SUSE Linux Enterprise Server 元件。如需詳細資訊,請參閱Article “Modules and Extensions Quick Start”

4.1 SUSE Linux Enterprise Server 支援聲明

若要獲得支援,您需要一個適當的 SUSE 訂閱。若要檢視為您提供的特定支援服務,請移至 https://www.suse.com/support/ 並選取您的產品。

支援層級的定義如下:

L1

問題判斷,該技術支援層級旨在提供相容性資訊、使用支援、持續維護、資訊收集,以及使用可用文件進行基本疑難排解。

L2

問題隔離,該技術支援層級旨在分析資料、重現客戶問題、隔離問題區域,並針對層級 1 不能解決的問題提供解決方法,或做為層級 3 的準備層級。

L3

問題解決,該技術支援層級旨在借助工程方法解決層級 2 支援所確認的產品缺陷。

對於簽約的客戶與合作夥伴,SUSE Linux Enterprise Server 將為除以下套件外的其他所有套件提供 L3 支援:

  • 技術預覽

  • 音效、圖形、字型和作品。

  • 需要額外客戶合約的套件。

  • 模組 Workstation Extension 隨附的某些套件僅可享受 L2 支援。

  • 名稱以 -devel 結尾的套件 (包含標題檔案和類似的開發人員資源) 只能與其主套件一起接受支援。

SUSE 僅支援使用原始套件,即,未發生變更且未重新編譯的套件。

4.2 技術預覽

技術預覽是 SUSE 提供的旨在讓使用者大略體驗未來創新的各種套件、堆疊或功能。隨附這些預覽只是為了提供方便,讓您有機會在自己的環境中測試新的技術。非常希望您能提供回饋!如果您測試了技術預覽,請聯絡 SUSE 代表,將您的體驗和使用案例告知他們。您的回饋對於我們的未來開發非常有幫助。

但是,技術預覽存在以下限制:

  • 技術預覽仍處於開發階段。因此,它們的功能可能不完整、不穩定,或者在其他方面適合實際生產用途。

  • 技術預覽受支援。

  • 技術預覽可能僅適用於特定的硬體架構。

  • 技術預覽的詳細資料和功能可能隨時會發生變化。因此,可能無法升級至技術預覽的後續版本,而需要進行全新安裝。

  • 我們隨時可能會捨棄技術預覽。例如,如果 SUSE 探查到某個預覽不符合客戶或市場需求,或者不能證明它符合企業標準,則可能會捨棄該預覽。SUSE 不承諾未來將提供此類技術的受支援版本。

如需產品隨附的技術預覽綜覽,請參閱 https://www.suse.com/releasenotes/ 上的版本說明。

第 I 部分 檔案系統與掛接

  • 1 Linux 中檔案系統的綜覽
  • SUSE Linux Enterprise Server 隨附了不同的檔案系統供您選擇,包括 Btrfs、Ext4、Ext3、Ext2 和 XFS。每個檔案系統都有其各自的優點和缺點。如需 SUSE Linux Enterprise Server 中主要檔案系統的並排功能比較,請參閱 https://www.suse.com/releasenotes/x86_64/SUSE-SLES/15-SP2/#allArch-filesystems (檔案系統支援和大小)。本章包含有關這些檔案系統的工作方式及其優點的綜覽。

  • 2 調整檔案系統大小
  • 調整檔案系統大小 (不要與調整分割區或磁碟區大小混淆) 可用於將實體磁碟區上的空間變為可用狀態,或使用實體磁碟區上其他可用的空間。

  • 3 使用 UUID 掛接裝置
  • 本章說明如何使用 UUID (全域唯一識別碼) 而不是裝置名稱 (例如 /dev/sda1) 來識別檔案系統裝置。從 SUSE Linux Enterprise Server 12 開始,在開機載入程式檔案和 /etc/fstab 檔案中預設使用的是 UUID。

  • 4 用於區塊裝置操作的多層快取
  • 多層快取是一種複製式/分散式快取,它至少包括兩層:一層由速度較慢、較為廉價的旋轉區塊裝置 (硬碟) 代表,另一層成本較高,但執行資料操作時速度更快 (例如,SSD 隨身碟)。

1 Linux 中檔案系統的綜覽

SUSE Linux Enterprise Server 隨附了不同的檔案系統供您選擇,包括 Btrfs、Ext4、Ext3、Ext2 和 XFS。每個檔案系統都有其各自的優點和缺點。如需 SUSE Linux Enterprise Server 中主要檔案系統的並排功能比較,請參閱 https://www.suse.com/releasenotes/x86_64/SUSE-SLES/15-SP2/#allArch-filesystems (檔案系統支援和大小)。本章包含有關這些檔案系統的工作方式及其優點的綜覽。

在 SUSE Linux Enterprise 12 中,Btrfs 是作業系統的預設檔案系統,XFS 是所有其他使用案例的預設檔案系統。此外,SUSE 仍繼續支援 Ext 系列的檔案系統和 OCFS2。依預設,Btrfs 檔案系統將設定為使用子磁碟區。對於使用 snapper 基礎架構的根檔案系統,將會自動啟用快照。如需 snapper 的詳細資訊,請參閱Book “管理指南”, Chapter 7 “使用 Snapper 進行系統復原和快照管理”

專業的高效能設定可能需要高可用儲存系統。為符合高效能叢集案例的要求,SUSE Linux Enterprise Server 在 High Availability Extension 附加產品中加入了 OCFS2 (Oracle Cluster File System 2) 與 Distributed Replicated Block Device (DRBD)。本指南中將不會介紹這些先進的儲存系統。如需資訊,請參閱 《SUSE Linux Enterprise High Availability Extension 管理指南》

請記住,沒有一種檔案系統能夠完美適合所有類型的應用程式,這點非常重要。每一種檔案系統都有自己特殊的優、缺點,必須考慮在內。此外,即使是最頂級的檔案系統,也無法取代合理的備份策略。

本節中使用的資料完整性資料一致性這兩個詞彙,並不表示使用者空間資料 (應用程式寫入其檔案中的資料) 的一致性。這項資料是否一致必須由應用程式本身控制。

除非在本節中特別指明,否則設定或變更分割區以及檔案系統所需進行的一切步驟,都可以使用 YaST 磁碟分割程式 (也強烈建議使用它) 來執行。如需更多資訊,請參閱Book “部署指南 ”, Chapter 10 “專家分割程式”

1.1 術語

中繼資料

資料結構屬於檔案系統的內部結構。它可確保磁碟上的所有資料都組織有序並可進行存取。。幾乎每一種檔案系統都有自己的中繼資料結構,這也是檔案系統展現出不同效能特性的原因所在。它對於維護中繼資料的完整極為重要,因為要不是如此,檔案系統上所有資料便無法存取。

inode

檔案系統的資料結構包含檔案的各種資訊,包括大小、連結數量、實際儲存檔案內容之磁碟區塊的指標、建立、修改和存取的日期與時間。

記錄

在檔案系統的內容中,記錄是一種磁碟上的結構,包含了檔案系統用於儲存有關檔案系統之中繼資料變更資訊的一種記錄。記錄可大大降低檔案系統的復原時間,因為有了它就不需要在系統啟動時執行檢查整個檔案系統這一冗長的搜尋程序。而是只重複檢查記錄。

1.2 Btrfs

Btrfs 是 Chris Mason 開發的「寫時複製」(copy-on-write,COW) 檔案系統。它以 Ohad Rodeh 開發的支援 COW 的 B 樹為基礎。Btrfs 是記錄樣式的檔案系統。它不會記錄區塊變更,而是將它們寫入新位置,然後將變更連結起來。直到最後一次寫入時才會提交新變更。

1.2.1 主要功能

Btrfs 提供容錯、修復與簡易管理功能,例如:

  • 可寫入快照,可讓您在套用更新之後有需要時輕鬆地復原系統,或者可讓您備份檔案。

  • 子磁碟區支援:Btrfs 會在為其指定的空間池中建立預設子磁碟區。它可讓您建立其他子磁碟區,做為同一個空間池內的不同檔案系統。子磁碟區的數量僅受為池配置的空間限制。

  • Btrfs 指令行工具中提供了線上檢查和修復功能 scrub。它會在假設樹狀結構沒有問題的前提下,驗證資料和中繼資料的完整性。您可以在掛接的檔案系統上定期執行 scrub;在一般操作過程中,該指令會做為背景程序執行。

  • 中繼資料和使用者資料分別使用不同的 RAID 層級。

  • 中繼資料和使用者資料分別使用不同的檢查總數,可提高錯誤偵測效率。

  • 與 Linux 邏輯磁碟區管理員 (LVM) 儲存物件整合。

  • SUSE Linux Enterprise Server 上的 YaST 磁碟分割程式及 AutoYaST 整合。這也包括在多個裝置 (MD) 和裝置對應程式 (DM) 儲存組態上建立 Btrfs 檔案系統。

  • 從現有的 Ext2、Ext3 和 Ext4 檔案系統進行離線移轉。

  • /boot 的開機載入程式支援,如此即允許從 Btrfs 分割區開機。

  • SUSE Linux Enterprise Server 15 SP2 中的 RAID0、RAID1 和 RAID10 組態檔案支援多磁碟區 Btrfs。尚不支援更高的 RAID 層級,但安裝未來發佈的 Service Pack 後可能會支援。

  • 使用 Btrfs 指令設定透明壓縮。

1.2.2 SUSE Linux Enterprise Server 上的根檔案系統設定

依預設,SUSE Linux Enterprise Server 設定為對根分割區使用 Btrfs 和快照。快照可讓您在套用更新之後有需要時輕鬆地復原系統,或者可讓您備份檔案。快照可透過 SUSE Snapper 基礎架構輕鬆管理,如Book “管理指南”, Chapter 7 “使用 Snapper 進行系統復原和快照管理”中所述。如需 SUSE Snapper 專案的一般資訊,請參閱 OpenSUSE.org (http://snapper.io) 上的 Snapper 入口網站 Wiki。

使用快照復原系統時,必須確保在復原期間,資料 (例如使用者的主目錄、Web 和 FTP 伺服器內容或記錄檔案) 不會遺失或被覆寫。這一點透過使用根檔案系統上的 Btrfs 子磁碟區來實現。子磁碟區可從快照中排除。安裝期間,根據 YaST 建議,SUSE Linux Enterprise Server 上的預設根檔案系統設定包含下列子磁碟區。由於下述原因,它們會從快照中排除。

/boot/grub2/i386-pc/boot/grub2/x86_64-efi/boot/grub2/powerpc-ieee1275/boot/grub2/s390x-emu

不支援對開機載入程式組態進行復原。上面列出的目錄是架構專屬目錄。前兩個目錄位於 AMD64/Intel 64 機器上,後兩個目錄分別位於 IBM POWER 和 IBM Z 上。

/home

如果 /home 不在獨立的分割區上,系統會將其排除以避免在復原時發生資料遺失。

/opt

協力廠商產品通常會安裝到 /opt。系統會將該目錄排除以避免在復原時解除安裝這些應用程式。

/srv

包含 Web 和 FTP 伺服器的資料。系統會將該目錄排除以避免在復原時發生資料遺失。

/tmp

包含暫存檔案和快取的所有目錄均會從快照中排除。

/usr/local

在手動安裝軟體時會用到此目錄。系統會將該目錄排除,以免在復原時解除安裝這些安裝的軟體。

/var

此目錄包含許多變數檔案 (包括記錄、暫時快取、/var/opt 中的協力廠商產品),是虛擬機器影像和資料庫的預設位置。因此,建立此子磁碟區是為了從快照中排除所有這些變數資料,且已停用「寫入時複製」。

警告
警告:復原支援

僅當您未移除任何預先設定的子磁碟區時,SUSE 才支援復原。不過,您可以使用 YaST 磁碟分割程式新增子磁碟區。

1.2.2.1 掛接壓縮的 Btrfs 檔案系統

注意
注意:GRUB 2 和 LZO 壓縮根

GRUB 2 無法讀取 lzo 壓縮根。如果要使用壓縮,則需要建立獨立的 /boot 分割區。

從 SLE12 SP1 開始,支援壓縮 Btrfs 檔案系統。使用 compresscompress-force 選項,並選取壓縮演算法 lzozlib (預設)。zlib 壓縮的壓縮率更高,而 lzo 的壓縮速度更快,並且佔用的 CPU 負載更小。

例如:

root # mount -o compress /dev/sdx /mnt

如果您建立了一個檔案並在其中寫入資料,而壓縮後的結果大於或等於未壓縮時的大小,則將來針對此檔案執行寫入操作後,Btrfs 會一直跳過壓縮。如果您不希望有這種行為,請使用 compress-force 選項。對於包含一些初始未壓縮資料的檔案而言,此選項可能很有用。

請注意,壓縮只會作用於新檔案。如果使用 compresscompress-force 選項掛接檔案系統,則在未壓縮情況下寫入的檔案將不會壓縮。此外,永遠不會壓縮包含 nodatacow 屬性之檔案的內容:

root # chattr +C FILE
root # mount -o nodatacow  /dev/sdx /mnt

加密與任何壓縮操作無關。在此分割區中寫入一些資料後,請列印詳細資料:

root # btrfs filesystem show /mnt
btrfs filesystem show /mnt
Label: 'Test-Btrfs'  uuid: 62f0c378-e93e-4aa1-9532-93c6b780749d
        Total devices 1 FS bytes used 3.22MiB
      devid    1 size 2.00GiB used 240.62MiB path /dev/sdb1

如果您希望此設定是永久性的,請在 /etc/fstab 組態檔案中新增 compresscompress-force 選項。例如:

UUID=1a2b3c4d /home btrfs subvol=@/home,compress 0 0

1.2.2.2 掛接子磁碟區

SUSE Linux Enterprise Server 上,從快照進行系統復原的程序透過先從快照開機來執行。如此,您便可在執行復原之前,在系統執行時檢查快照。透過掛接子磁碟區,可實現從快照開機的目的 (一般不需要如此)。

除了第 1.2.2 節 「SUSE Linux Enterprise Server 上的根檔案系統設定」中列出的子磁碟區之外,系統中還存在一個名為 @ 的磁碟區。這是預設子磁碟區,將掛接為根分割區 (/)。其他子磁碟區將掛接到此磁碟區中。

從快照開機時,使用的不是 @ 子磁碟區,而是快照。快照中包括的檔案系統部分將以唯讀方式掛接為 /。其他子磁碟區將以可寫入方式掛接到快照中。依預設,此狀態為臨時狀態,下次重新開機時將還原先前的組態。若要使它成為永久狀態,請執行 snapper rollback 指令。這將使目前開機的快照成為新的預設子磁碟區,在重新開機之後將會使用它。

1.2.2.3 檢查可用空間

通常可以執行 df 指令來檢查檔案系統的使用量。在 Btrfs 檔案系統上,df 的輸出可能有誤導性,因為除了原始資料配置的空間以外,Btrfs 檔案系統也會配置並使用中繼資料的空間。

因此,即使看上去仍有大量的可用空間,Btrfs 檔案系統也可能會報告空間不足。在這種情況下,為中繼資料配置的所有空間均會用盡。使用以下指令來檢查 Btrfs 檔案系統上已用和可用的空間:

btrfs filesystem show
tux > sudo btrfs filesystem show /
Label: 'ROOT'  uuid: 52011c5e-5711-42d8-8c50-718a005ec4b3
        Total devices 1 FS bytes used 10.02GiB
        devid    1 size 20.02GiB used 13.78GiB path /dev/sda3

顯示檔案系統的總大小及其使用量。如果最後一行中的這兩個值相符,則表示檔案系統上的全部空間都已分配出去。

btrfs filesystem df
tux > sudo btrfs filesystem df /
Data, single: total=13.00GiB, used=9.61GiB
System, single: total=32.00MiB, used=16.00KiB
Metadata, single: total=768.00MiB, used=421.36MiB
GlobalReserve, single: total=144.00MiB, used=0.00B

顯示檔案系統的已配置 (總計) 空間和已用空間值。如果中繼資料的總計已用空間值大致相等,則表示中繼資料的所有空間均已配置。

btrfs filesystem usage
tux > sudo btrfs filesystem usage /
Overall:
    Device size:                  20.02GiB
    Device allocated:             13.78GiB
    Device unallocated:            6.24GiB
    Device missing:                  0.00B
    Used:                         10.02GiB
    Free (estimated):              9.63GiB      (min: 9.63GiB)
    Data ratio:                       1.00
    Metadata ratio:                   1.00
    Global reserve:              144.00MiB      (used: 0.00B)

             Data     Metadata  System
Id Path      single   single    single   Unallocated
-- --------- -------- --------- -------- -----------
 1 /dev/sda3 13.00GiB 768.00MiB 32.00MiB     6.24GiB
-- --------- -------- --------- -------- -----------
   Total     13.00GiB 768.00MiB 32.00MiB     6.24GiB
   Used       9.61GiB 421.36MiB 16.00KiB

顯示類似前兩個指令合併輸出結果的資料。

如需詳細資訊,請參閱 man 8 btrfs-filesystemhttps://btrfs.wiki.kernel.org/index.php/FAQ

1.2.3 從 ReiserFS 和 Ext 檔案系統移轉至 Btrfs

您可以使用 btrfs-convert 工具,將資料磁碟區從現有 ReiserFS 或 Ext (Ext2、Ext3 或 Ext4) 移轉至 Btrfs 檔案系統。該過程允許您對未掛接的 (離線) 檔案系統執行就地轉換,執行此操作可能需要包含 btrfs-convert 工具的可開機安裝媒體。該工具會在原始檔案系統的可用空間內建構 Btrfs 檔案系統,並直接連結至其中包含的資料。裝置上必須有足夠用於建立中繼資料的可用空間,否則轉換將失敗。原始檔案系統將保持不變,Btrfs 檔案系統不會佔用任何可用空間。所需的空間大小取決於檔案系統的內容,可能會因其中包含的檔案系統物件 (例如檔案、目錄、延伸屬性) 數量而異。由於系統會直接參考資料,檔案系統上的資料數量不會影響轉換所需的空間,但使用檔尾壓縮且大小超過 2 KiB 的檔案除外。

若要將原始檔案系統轉換為 Btrfs 檔案系統,請執行:

root # btrfs-convert /path/to/device
重要
重要:檢查 /etc/fstab

轉換後,需確定 /etc/fstab 中對原始檔案系統的所有參考已進行調整,現指示裝置包含 Btrfs 檔案系統。

轉換後,Btrfs 檔案系統的內容將反映來源檔案系統的內容。來源檔案系統將一直保留,直到您移除了在 fs_root/reiserfs_saved/image 中建立的相關唯讀影像為止。該影像檔案實際上是轉換前 ReiserFS 檔案系統的一個「快照」,修改 Btrfs 檔案系統時不會對其進行修改。若要移除該影像檔案,請移除 reiserfs_saved 子磁碟區:

root # btrfs subvolume delete fs_root/reiserfs_saved

若要將檔案系統回復到原始檔案系統,請使用以下指令:

root # btrfs-convert -r /path/to/device
警告
警告:變更遺失

您在檔案系統掛接為 Btrfs 檔案系統時所做的任何變更都將遺失。切勿在此期間執行任何平衡操作,否則將無法正常還原檔案系統。

1.2.4 Btrfs 管理

Btrfs 已整合到 YaST 磁碟分割程式和 AutoYaST 中。安裝期間可以使用它來設定根檔案系統的解決方案。安裝之後,您可以使用 YaST 磁碟分割程式來檢視和管理 Btrfs 磁碟區。

Btrfs 管理工具提供於 btrfsprogs 套件中。如需使用 Btrfs 指令的資訊,請參閱 man 8 btrfsman 8 btrfsckman 8 mkfs.btrfs 指令。如需 Btrfs 功能的資訊,請參閱 http://btrfs.wiki.kernel.org 上的 Btrfs Wiki

1.2.5 Btrfs 子磁碟區配額支援

Btrfs 根檔案系統子磁碟區 /var/log/var/crash/var/cache 可在執行一般操作過程中使用所有可用的磁碟空間,但會導致系統功能出現問題。為避免出現此狀況,SUSE Linux Enterprise Server 現在提供了 Btrfs 子磁碟區配額支援。如果您使用相應的 YaST 建議設定根檔案系統,系統會為根檔案系統進行相應的準備:所有子磁碟區的配額群組 (qgroup) 均已設定。若要設定根檔案系統中子磁碟區的配額,請執行下列步驟:

  1. 啟用配額支援:

    tux > sudo btrfs quota enable /
  2. 取得子磁碟區清單:

    tux > sudo btrfs subvolume list /

    只能為現有子磁碟區設定配額。

  3. 為上一步中所列的其中一個子磁碟區設定配額。子磁碟區可以透過路徑識別 (例如 /var/tmp),也可以透過 0/子磁碟區 ID 識別 (例如 0/272)。下面的範例為 /var/tmp 設定 5 GB 的定額。

    tux > sudo btrfs qgroup limit 5G /var/tmp

    大小單位可以是位元組 (5000000000)、KB (5000000K)、MB (5000M) 或 GB (5G)。以位元組為單位產生的值略有不同,因為 1024 位元組 = 1 KB,1024 KB = 1 MB,等等。

  4. 若要列出現有配額,請使用以下指令。max_rfer 欄以位元組為單位顯示配額。

    tux > sudo btrfs qgroup show -r /
提示
提示:取消配額

如果您要取消現有配額,請將配額大小設定為 none

tux > sudo btrfs qgroup limit none /var/tmp

若要停用某個分割區及其所有子磁碟區的配額支援,請使用 btrfs quota disable

tux > sudo btrfs quota disable /

如需詳細資料,請參閱 man 8 btrfs-qgroupman 8 btrfs-quota。Btrfs Wiki (https://btrfs.wiki.kernel.org/index.php/UseCases) 上的 UseCases 頁面也提供了更多資訊。

1.2.6 Btrfs 傳送/接收

Btrfs 允許產生快照來擷取檔案系統的狀態。例如,在系統變更之前和之後,Snapper 可以使用此功能來建立快照,以便進行復原。但是,將快照與傳送/接收功能結合使用,可以在遠端位置建立和維護檔案系統的副本。例如,此功能可用於執行增量備份。

btrfs 傳送操作可計算同一個子磁碟區中兩個唯讀快照之間的差異,並將這種差異傳送到某個檔案或 STDOUT。btrfs receive 操作會接收 send 指令的結果,並將其套用至快照。

1.2.6.1 先決條件

若要使用傳送/接收功能,需要滿足以下要求:

  • 來源端 (傳送) 和目標端 (接收) 各有一個 trfs 檔案系統。

  • Btrfs 傳送/接收將對快照執行,因此,相應的資料需要位於 Btrfs 子磁碟區中。

  • 來源端中的快照需是唯讀的。

  • SUSE Linux Enterprise 12 SP2 或更高版本。早期版本的 SUSE Linux Enterprise 不支援傳送/接收。

1.2.6.2 增量備份

以下程序說明 Btrfs 傳送/接收操作的用法,其中示範了如何在 /backup/data (目標端) 建立 /data (來源端) 的增量備份。/data 需為子磁碟區。

程序 1.1︰ 啟始設定
  1. 在來源端建立啟始快照 (在本範例中名為 snapshot_0),並確定將其寫入磁碟:

    tux > sudo btrfs subvolume snapshot -r /data /data/bkp_data
    sync

    新的子磁碟區 /data/bkp_data 隨即建立。該子磁碟區將用做後續增量備份的基礎,應將其保留以供參考。

  2. 將啟始快照傳送至目標端。由於這是啟始的傳送/接收操作,因此需要傳送整個快照:

    tux > sudo bash -c 'btrfs send /data/bkp_data | btrfs receive /backup'

    在目標端建立新子磁碟區 /backup/bkp_data

完成啟始設定後,可以建立增量備份,並將目前快照與先前快照之間的差異傳送至目標端。程序永遠是相同的:

  1. 在來源端建立新快照。

  2. 將差異傳送至目標端。

  3. 選擇性:重新命名和/或清理兩端中的快照。

程序 1.2︰ 執行遞增備份
  1. 在來源端建立新快照,並確定將其寫入磁碟。在以下範例中,快照名為 bkp_data_目前日期

    tux > sudo btrfs subvolume snapshot -r /data /data/bkp_data_$(date +%F)
    sync

    建立新子磁碟區,例如 /data/bkp_data_2016-07-07

  2. 將先前快照與您建立的快照之間的差異傳送至目標端。為此,可以使用選項 -p SNAPSHOT 指定先前的快照。

    tux > sudo bash -c 'btrfs send -p /data/bkp_data /data/bkp_data_2016-07-07 \
    | btrfs receive /backup'

    建立新子磁碟區 /backup/bkp_data_2016-07-07

  3. 因此存在四個快照,每端各有兩個:

    /data/bkp_data
    /data/bkp_data_2016-07-07
    /backup/bkp_data
    /backup/bkp_data_2016-07-07

    現在,您可以使用三個選項繼續操作:

    • 保留兩端中的所有快照。如果使用此選項,您可以復原到兩端中的任意快照,同時可以複製所有資料。不需採取任何動作。執行後續增量備份時,請記得使用倒數第二個快照做為傳送操作的父代。

    • 僅保留來源端中的最後一個快照,並保留目標端中的所有快照。此外,允許復原到兩端中的任意快照 - 若要復原到來源端中的特定快照,請針對整個快照,執行從目標端到來源端的傳送/接收操作。在來源端執行刪除/移動操作。

    • 僅保留兩端中的最後一個快照。如此即可在目標端建立一個備份,該備份代表來源端中產生之最後一個快照的狀態。無法復原到其他快照。在來源端和目標端執行刪除/移動操作。

    1. 如果只想保留來源端中的最後一個快照,請執行以下指令:

      tux > sudo btrfs subvolume delete /data/bkp_data
      tux > sudo mv /data/bkp_data_2016-07-07 /data/bkp_data

      第一條指令刪除先前快照,第二條指令將目前快照重新命名為 /data/bkp_data。如此可確定備份的最後一個快照永遠命名為 /data/bkp_data。因此,您也可以永遠使用此子磁碟區名稱做為增量傳送操作的父代。

    2. 如果只想保留目標端中的最後一個快照,請執行以下指令:

      tux > sudo btrfs subvolume delete /backup/bkp_data
      tux > sudo mv /backup/bkp_data_2016-07-07 /backup/bkp_data

      第一條指令刪除先前備份快照,第二條指令將目前備份快照重新命名為 /backup/bkp_data。如此可確定最新的備份快照永遠命名為 /backup/bkp_data

提示
提示:傳送至遠端目標端

若要將快照傳送至遠端機器,請使用 SSH:

tux > btrfs send /data/bkp_data | ssh root@jupiter.example.com 'btrfs receive /backup'

1.2.7 重複資料刪除支援

Btrfs 支援重複資料刪除功能,具體方式為以指向公用儲存位置中之區塊單一副本的邏輯連結取代檔案系統中完全相同的區塊。SUSE Linux Enterprise Server 提供了 duperemove 工具,可掃描檔案系統中有無完全相同的區塊。在 Btrfs 檔案系統上使用時,也可以用來刪除這些重複的區塊,從而節省檔案系統上的空間。系統上預設不會安裝 duperemove。若要使此功能可用,請安裝套件 duperemove

注意
注意:刪除重複的大型資料集

如果您要刪除重複的大量檔案,請使用 --hashfile 選項:

tux > sudo duperemove --hashfile HASH_FILE file1 file2 file3

--hashfile 選項會將所有指定檔案的雜湊儲存到 HASH_FILE (而不是 RAM 中),防止耗盡 RAM。HASH_FILE 可重複使用 - 完成產生基線雜湊檔案的初始執行後,可立即刪除對大型資料集的重複變更。

duperemove 可以針對一系列檔案操作,也可以以遞迴方式掃描某個目錄:

tux > sudo duperemove OPTIONS file1 file2 file3
tux > sudo duperemove -r OPTIONS directory

它有兩種運作模式:唯讀和重複資料刪除。以唯讀模式執行時 (即不使用 -d 參數),它會掃描給定檔案或目錄中的重複區塊,並將其列印出來。此模式適用於所有檔案系統。

以重複資料刪除模式執行 duperemove 僅在 Btrfs 檔案系統上受支援。掃描給定檔案或目錄之後,它會提交重複的區塊以進行重複資料刪除。

如需詳細資訊,請參閱 man 8 duperemove

1.2.8 從根檔案系統中刪除子磁碟區

出於特定目的,您可能需要從根檔案系統中刪除某個預設的 Btrfs 子磁碟區。目的之一是將某個子磁碟區 (例如 @/home@/srv) 轉換成獨立裝置上的檔案系統。以下程序說明如何刪除 Btrfs 子磁碟區:

  1. 確定需要刪除的子磁碟區 (例如 @/opt)。請注意,根路徑永遠使用子磁碟區 ID「5」。

    tux > sudo btrfs subvolume list /
    ID 256 gen 30 top level 5 path @
    ID 258 gen 887 top level 256 path @/var
    ID 259 gen 872 top level 256 path @/usr/local
    ID 260 gen 886 top level 256 path @/tmp
    ID 261 gen 60 top level 256 path @/srv
    ID 262 gen 886 top level 256 path @/root
    ID 263 gen 39 top level 256 path @/opt
    [...]
  2. 尋找代管根分割區的裝置名稱:

    tux > sudo btrfs device usage /
    /dev/sda1, ID: 1
      Device size:            23.00GiB
      Device slack:              0.00B
      Data,single:             7.01GiB
      Metadata,DUP:            1.00GiB
      System,DUP:             16.00MiB
      Unallocated:            14.98GiB
  3. 在獨立的掛接點 (例如 /mnt) 上掛接根檔案系統(ID 為 5 的子磁碟區):

    tux > sudo mount -o subvolid=5 /dev/sda1 /mnt
  4. 從掛接的根檔案系統中刪除 @/opt 分割區:

    tux > sudo btrfs subvolume delete /mnt/@/opt
  5. 卸載之前掛接的根檔案系統:

    tux > sudo umount /mnt

1.3 XFS

1990 年代早期,SGI 開始對原先要當成 IRIX OS 的檔案系統 XFS 進行研發。XFS 隱含的目標是建立高效能 64 位元記錄檔案系統,以滿足嚴格的計算挑戰。XFS 對於操控大型檔案以及執行高階硬體,具備良好功能。XFS 是 SUSE Linux Enterprise Server 中資料分割區的預設檔案系統。

以下是 XFS 主要功能的快速回顧,這些正是為什麼它在高階計算中比其他記錄檔案系統更具競爭力的證明。

1.3.1 使用配置群組取得高延展性

建立 XFS 檔案系統時,檔案系統所屬的區塊裝置,會分割成 8 或更多等同大小的線性區域。這些區域稱為配置群組。每一個配置群組管理自己的 inode 以及可用的磁碟空間。事實上,配置群組可以看成是檔案系統中的檔案系統。因為配置群組彼此各自獨立,所以核心可以同時處理一個以上的配置群組。此功能是 XFS 具備優良延展性的關鍵。當然,獨立配置群組的概念也符合多處理器系統的需求。

1.3.2 透過有效磁碟空間管理取得高效能

可用空間和 inode 是由配置群組裡面的 B+ 樹處理。使用 B+ 樹可大大增強 XFS 的效能和延展性。XFS 使用延遲配置,透過將程序分為兩個部分來處理配置。待處理的交易會儲存在 RAM 並保留適當的空間。XFS 仍然沒有決定資料儲存的確切位置 (在檔案系統區塊中)。此決策會盡量延緩至最後時刻。部分暫時資料永遠不會儲存至磁碟,因為當 XFS 決定了其實際儲存位置時,它早已過時了。採用這種方式,XFS 將增加寫入效能並減少檔案系統片段。因為比起其他檔案系統,延遲配置會導致較少的寫入事件,這樣在寫入過程中若是發生當機就會導致較嚴重的資料遺失。

1.3.3 預先配置來避免檔案系統零散化

寫入資料至檔案系統前,XFS 會保留 (預先配置) 檔案需要的可用空間。因此,可大幅降低檔案系統零散化。因為檔案的內容是分佈在檔案系統中,所以效能就會提高。

注意
注意:新的 XFS 磁碟上格式

從 12 版開始,SUSE Linux Enterprise Server 支援 XFS 檔案系統的新磁碟上格式(v5)。由 YaST 建立的 XFS 檔案系統將使用這種新格式。這種格式的主要優點包括,自動獲取所有 XFS 中繼資料的檢查總數、檔案類型支援以及支援檔案更多數量的存取控制清單。

請注意,下列元件支援這種格式:低於 3.12 版的 SUSE Linux Enterprise 核心、低於 3.2.0 版的 xfsprogs,以及在 SUSE Linux Enterprise 12 之前發佈的 GRUB 2 版本。如果還需要從不符合上述先決條件的系統中使用該檔案系統,就會出現問題。

如果您需要在較舊 SUSE 系統或其他 Linux 套裝作業系統與 XFS 檔案系統之間實現互通性,請使用 mkfs.xfs 指令手動設定檔案系統的格式。這將建立一個採用舊格式的 XFS檔案系統 (除非您使用 -m crc=1 選項)。

1.4 Ext2

Ext2 的起源要回到 Linux 歷史的古早年代。它的前輩 - 延伸檔案系統,是在 1992 年 4 月落實並整合至 Linux 0.96c。延伸檔案系統已經過多次修改,而到了 Ext2,成為多年來最受歡迎的 Linux 檔案系統。若建立了檔案系統的記錄,因其復原快速,Ext2 就顯得不再那麼重要了。

簡短的 Ext2 功能摘要可以協助瞭解它曾是 (在某些領域依然是) 很多 Linux 使用者最喜愛的 Linux 檔案系統的原因所在。

穩固性和速度

Ext2 經過多次改良和密集測試,已經算是老前輩了。這可能是為什麼人們通常稱它堅如磐石的原因所在。在檔案系統無法完全取消掛接而導致系統中斷後,e2fsck 會開始分析檔案系統資料。中繼資料會進入一致性狀態,而待處理的檔案或資料區塊會寫入指定的目錄 (稱為 lost+found)。與記錄檔案系統相比,e2fsck 會分析整個檔案系統,而不僅僅是中繼資料中最近修改的位元。這比檢查記錄檔案系統的記錄資料,要花費更多時間。按照檔案系統大小,此程序會花半小時或更長的時間。因此,不要為任何需要高可用性的伺服器選擇 Ext2。不過,因為 Ext2 不會維護記錄,而且使用的記憶體更少,因此有時候比其他檔案系統較快速一些。

升級容易

因為 Ext3 是以 Ext2 程式碼為基礎,而且共用它的磁碟上格式和中繼資料格式,所以從 Ext2 升級至 Ext3 十分容易。

1.5 Ext3

Ext3 是由 Stephen Tweedie 設計。不像其他所有下一代檔案系統,Ext3 不依循全新的設計原則。它是以 Ext2 為基礎。這兩個檔案系統彼此關係十分密切。Ext3 檔案系統可以輕易地建立在 Ext2 檔案系統的最上層。Ext2 和 Ext3 最重要的差別是 Ext3 支援記錄處理。簡而言之,Ext3 提供三個主要優點:

1.5.1 可輕易從 Ext2 升級,並具有很高的可靠性

Ext2 的程式碼為 Ext3 奠定了堅實的基礎,使後者成為受到高度評價的下一代檔案系統。在 Ext3 中完美融合了 Ext2 的可靠性和穩固性特點,同時具備記錄檔案系統的優點。不像轉換至其他記錄檔案系統 (例如 XFS) 那麼費時 (備份整個檔案系統,然後從頭開始重新建立),轉換至 Ext3 僅需數分鐘。它還非常安全,因為從頭開始重新建立整個檔案系統,並不能確保萬無一失。考慮一下等候升級至記錄檔案系統的現有 Ext2 系統數量,您可以輕易瞭解為什麼 Ext3 對很多系統管理員都具有一定重要性。從 Ext3 降級至 Ext2 就和升級一樣容易。將 Ext3 檔案系統乾淨地取消掛接,然後重新掛接成 Ext2 檔案系統即可。

1.5.2 可靠性和效能

其他記錄檔案系統,有些會依照僅中繼資料記錄方法。這表示您的中繼資料會始終維持一致的狀態,但這並不能自動保證檔案系統資料本身的一致性。Ext3 的設計是妥善管理中繼資料和資料二者。管理的程度可以自訂。在 data=journal 模式啟用 Ext3,可提供最大的安全性 (資料整合性),不過因為中繼資料和資料都會記錄下來,所以系統速度會減慢。較新的方法是使用 data=ordered 模式,這樣可以確定資料和中繼資料整合性,不過僅限中繼資料使用記錄。檔案系統驅動程式會收集所有對應至某一中繼資料更新的所有資料區塊。更新中繼資料前,這些資料區塊會寫入硬碟。如此一來便可以達到中繼資料和資料的一致性,不會犧牲效能。第三個要使用的選項是 data=writeback,它允許資料在其中繼資料已經提交至記錄後再寫入主要檔案系統。一般認為此選項的效能最好。不過,它可以允許在損毀和復原舊資料後,重新顯示舊資料,同時又維護內部檔案系統整合性。Ext3 使用 data=ordered 選項做為預設值。

1.5.3 將 Ext2 檔案系統轉換成 Ext3

若要將 Ext2 檔案系統轉換為 Ext3,請執行下列步驟:

  1. root 使用者身分執行 tune2fs -j 來建立 Ext3 記錄。

    這樣會以預設參數建立 Ext3 記錄。

    若要指定記錄的大小以及存放它的裝置,請執行 tune2fs -J,不要同時使用需要的記錄選項 size=device=。如需 tune2fs 程式的詳細資訊,請參閱 tune2fs 線上文件。

  2. root 使用者身分編輯檔案 /etc/fstab,將為對應分割區指定的檔案系統類型從 ext2 變更為 ext3,然後儲存變更。

    這可確保 Ext3 檔案系統會被識別為 Ext3 檔案系統。完成的變更會在下次啟動時生效。

  3. 若要將設定為 Ext3 分割區的根檔案系統開機,請在 initrd 中新增模組 ext3jbd。操作步驟如下:

    1. 開啟或建立 /etc/dracut.conf.d/10-filesystem.conf 並新增以下行 (請注意前置空格):

      force_drivers+=" ext3 jbd"
    2. 然後執行 dracut -f 指令。

  4. 重新啟動系統。

1.5.4 Ext3 檔案系統 Inode 大小和 Inode 數量

Inode 會儲存檔案及其在檔案系統中之區塊位置的相關資訊。為了在 Inode 中留出空間用於延伸的屬性和 ACL,Ext3 的預設 Inode 大小已從 SLES 10 上的 128 位元組增大到 SLES 11 上的 256 位元組。與 SLES 10 相比,當您在 SLES 11 上建立新的 Ext3 檔案系統時,為相同數量的 Inode 預先配置的預設空間容量會增加一倍,檔案系統中檔案的可用空間則會減少相應的容量。因此,您必須使用較大的分割區才能容納 SLES 10 上 Ext3 檔案系統可能容納的相同 Inode 數和檔案數。

當您建立新的 Ext3 檔案系統時,系統將根據可建立的 Inode 總數預先配置 Inode 表格中的空間。每 Inode 的位元組數比率和檔案系統的大小決定了可以建立的 Inode 數。檔案系統建立後,將會為每一個每 Inode 的位元組數位元組空間建立一個 Inode:

number of inodes = total size of the file system divided by the number of bytes per inode

Inode 數控制了檔案系統中可容納的檔案數:一個檔案對應一個 Inode。為了解決 Inode 大小日益增大而可用空間日益減少的問題,每 Inode 的位元組數比率的預設值已從 SLES 10 上的 8192 位元組增大到 SLES 11 上的 16384 位元組。比率增加了一倍,表示可建立的檔案數是 SLES 10 上 Ext3 檔案系統所允許檔案數的一半。

重要
重要:變更現有 Ext3 檔案系統的 Inode 大小。

配置 Inode 之後,您無法變更 Inode 大小或每 Inode 的位元組數比率的設定。如果不使用其他設定重新建立檔案系統,或不延伸檔案系統,則無法新增 Inode。當超出最大 Inode 數時,除非刪除某些檔案,否則無法在檔案系統上建立新的檔案。

建立新的 Ext3 檔案系統時,您可以指定 Inode 大小和每 Inode 的位元組數比率來控制 Inode 空間使用量以及檔案系統上所允許的檔案數。如果不指定區塊大小、Inode 大小和每 Inode 的位元組數比率值,則會套用 /etc/mked2fs.conf 檔案中的預設值。如需詳細資訊,請參閱 mke2fs.conf(5) man 頁面。

使用下列準則:

  • Inode 大小:: 預設 Inode 大小為 256 位元組。以位元組為單位指定一個值,該值是 2 的冪且大於或等於 128 位元組 (最大為區塊大小),例如 128、256、512 等。僅當不在 Ext3 檔案系統上使用延伸的屬性或 ACL 時,方可使用 128 位元組。

  • 每 Inode 的位元組數比率:: 每 Inode 的位元組數比率預設值為 16384 位元組。有效的每 Inode 的位元組數比率值必須是 2 的幂且大於或等於 1024 位元組,例如 1024、2048、4096、8192、16384、32768 等。此值不應小於檔案系統的區塊大小,因為區塊大小是用於儲存資料的最小空間區塊。Ext3 檔案系統的預設區塊大小為 4 KB。

    此外,請考量需要儲存的檔案數和檔案大小。例如,如果檔案系統將儲存許多小型檔案,您可以指定一個較小的每 Inode 的位元組數比率,這樣可增加 Inode 數。如果檔案系統將儲存超大型檔案,您可以指定一個較大的每 Inode 的位元組數比率,這樣可減少可能的 Inode 數量。

    一般而言,最好準備充足的 Inode,而不是將其耗盡。如果 Inode 太少且檔案也很小,則在實際上為空的磁碟上,您可能已經達到最大檔案數。如果 Inode 太多且檔案也很大,則您可能會被告知存在可用空間但卻無法使用,因為您無法在為 Inode 保留的空間中建立新檔案。

如果不在 Ext3 檔案系統上使用延伸的屬性或 ACL,則可以在建立檔案系統時,分別指定 128 位元組和 8192 位元組做為 Inode 大小和每 Inode 的位元組數比率,藉以還原 SLES 10 的行為。使用下列任一種方法來設定 Inode 大小和每 Inode 的位元組數比率:

  • 修改所有新 Ext3 檔案的預設設定:: 在文字編輯器中,修改 /etc/mke2fs.conf 檔案的 defaults 區段,以將 inode_sizeinode_ratio 設為所需的預設值。這些值會套用至所有新的 Ext3 檔案系統。例如:

    blocksize = 4096
    inode_size = 128
    inode_ratio = 8192
  • 在指令行中:: 當建立新的 Ext3 檔案系統時,將 Inode 大小 (-I 128) 和每 Inode 的位元組數比率 (-i 8192) 傳遞至 mkfs.ext3(8) 指令或 mke2fs(8) 指令。例如,使用下列任一個指令:

    tux > sudo mkfs.ext3 -b 4096 -i 8092 -I 128 /dev/sda2
    tux > sudo mke2fs -t ext3 -b 4096 -i 8192 -I 128 /dev/sda2
  • 在使用 YaST 進行安裝期間:: 在安裝期間建立新的 Ext3 檔案系統時,傳遞 Inode 大小和每 Inode 的位元組數比率值。在 YaST 磁碟分割程式之編輯分割區頁面的格式化選項下,選取格式化分割區Ext3,然後按一下選項。在檔案系統選項對話方塊中,從區塊大小 (位元組)每 Inode 的位元組數Inode 大小下拉式方塊中選取所需的值。

    例如,從區塊大小 (位元組) 下拉式方塊中選取 4096,從每 Inode 的位元組數下拉式方塊中選取 8192,從 Inode 大小下拉式方塊中選取 128,然後按一下確定

    Image
  • 在使用 AutoYaST 進行安裝期間:: 在 AutoYaST 設定檔中,可以使用 fs_options 標記將 -i 的 opt_bytes_per_inode 比率值設為 8192,並將 -I 的 opt_inode_density 值設為 128:

    <partitioning config:type="list">
      <drive>
        <device>/dev/sda</device>
        <initialize config:type="boolean">true</initialize>
        <partitions config:type="list">
          <partition>
            <filesystem config:type="symbol">ext3</filesystem>
            <format config:type="boolean">true</format>
            <fs_options>
              <opt_bytes_per_inode>
                <option_str>-i</option_str>
                <option_value>8192</option_value>
              </opt_bytes_per_inode>
              <opt_inode_density>
                <option_str>-I</option_str>
                <option_value>128</option_value>
              </opt_inode_density>
            </fs_options>
            <mount>/</mount>
            <partition_id config:type="integer">131</partition_id>
            <partition_type>primary</partition_type>
            <size>25G</size>
          </partition>
        </partitions>
      </drive>
    <partitioning>

如需相關資訊,請參閱 https://www.suse.com/support/kb/doc.php?id=7009075 (SLES11 ext3 分割區只能儲存 SLES10 上可儲存之檔案數的 50% [技術資訊文件 7009075])。

1.6 Ext4

2006 年,Ext4 做為 Ext3 的衍生部份面市。它支援最大大小為 1 EiB 的磁碟區、最大大小為 16 TiB 的檔案和數量不受限制的子目錄,消除了 Ext3 的一些儲存局限性。它還引入了許多效能加強功能,例如延遲區塊配置和速度大幅加快的檔案系統檢查例行工作。Ext4 還支援記錄檢查總數,並可提供以奈秒為單位測量的時間戳記,因而更加可靠。Ext4 完全反向相容於 Ext2 和 Ext3,後兩個檔案系統都可以做為 Ext4 掛接。

1.7 ReiserFS

SUSE Linux Enterprise Server 15 中完全移除了 ReiserFS 支援。若要將現有分割區移轉至 Btrfs,請參閱第 1.2.3 節 「從 ReiserFS 和 Ext 檔案系統移轉至 Btrfs」

1.8 其他受支援的檔案系統

表格 1.1 「Linux 的檔案系統類型」 彙整 Linux 支援的其他檔案系統。提供其他系統支援主要是確定不同媒體或外來作業系統中,資料交換的相容性。

表 1.1︰ Linux 的檔案系統類型

檔案系統類型

描述

cramfs

壓縮的 ROM 檔案系統:ROM 的一種壓縮唯讀檔案系統。

hpfs

高效能檔案系統:IBM OS/2 標準檔案系統。僅在唯讀模式下受支援。

iso9660

CD-ROM 的標準檔案系統。

minix

源自作業系統學術研究專案的檔案系統,是 Linux 使用的第一個檔案系統。現在,它可作為磁片檔案系統來使用。

msdos

fat 最早源自 DOS 的檔案系統,現在各種作業系統均使用之。

nfs

網路檔案系統:使用這種檔案系統,資料可以儲存在網路中的任何機器上,而且可以經由授權從網路存取。

ntfs

Windows NT 檔案系統;唯讀。

smbfs

有些產品 (例如 Windows) 會使用伺服器訊息區塊,透過網路來存取檔案。

sysv

用於 SCO Unix、Xenix 和 Coherent (個人電腦的商用 Unix 系統)。

ufs

由 BSD、SunOS 和 NextStep 使用。僅支援唯讀模式。

umsdos

MS-DOS 上的 Unix:套用於標準 fat 檔案系統的最上層,透過建立特殊檔案來實現 Unix 功能 (許可權、連結、長檔案名稱)。

vfat

虛擬 FAT:fat 檔案系統的副檔名 (支援長檔名)。

1.9 Linux 的大型檔案支援

一開始,Linux 支援的檔案大小最大為 2 GiB (231 位元組)。除非檔案系統隨附大型檔案支援,否則 32 位元系統上的最大檔案大小為 2 GiB。

目前,我們所有的標準檔案系統都具有 LFS (大型檔案支援),理論上可以支援最大為 263 位元組的檔案大小。表格 1.2 「檔案和檔案系統的最大大小 (磁碟格式,4 KiB 區塊大小)」 概述了 Linux 檔案和檔案系統的目前磁碟格式限制。表格中的數字假設檔案系統使用 4 KiB 區塊大小 (此為常用標準)。使用不同的區塊大小時,結果將會不同。使用疏鬆區塊時,表格 1.2 「檔案和檔案系統的最大大小 (磁碟格式,4 KiB 區塊大小)」 中的最大檔案大小可以大於檔案系統的實際大小。

注意
注意:二進位倍數

在本文件中:1024 位元組 = 1 KiB;1024 KiB = 1 MiB;1024 MiB = 1 GiB;1024 GiB = 1 TiB;1024 TiB = 1 PiB;1024 PiB = 1 EiB (另請參閱《NIST: Prefixes for Binary Multiples》(NIST:二倍數的字首)

表 1.2︰ 檔案和檔案系統的最大大小 (磁碟格式,4 KiB 區塊大小)

檔案系統 (4 KiB 區塊大小)

檔案系統的最大大小

最大檔案大小

Btrfs

16 EiB

16 EiB

Ext3

16 TiB

2 TiB

Ext4

1 EiB

16 TiB

OCFS2 (High Availability Extension 中可使用之支援叢集的檔案系統)

16 TiB

1 EiB

XFS

8 EiB

8 EiB

NFSv2 (用戶端)

8 EiB

2 GiB

NFSv3/NFSv4 (用戶端)

8 EiB

8 EiB

重要
重要:限制

表格 1.2 「檔案和檔案系統的最大大小 (磁碟格式,4 KiB 區塊大小)」會說明磁碟上 (On-Disk) 格式的限制。 Linux 核心會強制其處理的檔案和檔案系統依循自身大小限制。限制如下:

檔案大小

在 32 位元系統上,檔案不能超過 2 TiB (241 位元組)。

檔案系統大小

檔案系統大小最大可達 273 位元組。不過,此限制仍然跟不上目前可用的硬體。

1.10 Linux 核心儲存限制

表格 1.3 「儲存限制」 總結了與 SUSE Linux Enterprise Server 相關聯之儲存的核心限制。

表 1.3︰ 儲存限制

儲存功能

限制

支援的最大 LUN 數

每個目標 16384 個 LUN。

每個 LUN 的最大路徑數

預設無限制。每個路徑都視為一個一般 LUN。

實際限制由每個目標的 LUN 數和每個 HBA 的目標數 (對於光纖通道 HBA 為 16777215) 指定。

最大 HBA 數

未設限. 實際限制由系統的 PCI 插槽數決定。

每個作業系統使用 device-mapper-multipath 的最大路徑數 (總計)

大約為 1024。實際數量取決於每個多重路徑裝置的裝置號碼字串長度。它是 multipath-tools 中的一個編譯時間變數,如果此限制會導致問題,可以提高其值。

每一區塊裝置的最大大小

最大 8 EiB。

1.11 檔案系統疑難排解

本節說明檔案系統的一些已知問題和可能的解決方案。

1.11.1 Btrfs 錯誤:裝置上已無空間

使用 Btrfs 檔案系統的根 (/) 分割區停止接受資料。您收到錯誤裝置上已無空間

請參閱下列各節,瞭解有關此問題的可能原因和預防措施的資訊。

1.11.1.1 Snapper 快照使用的磁碟空間

如果 Snapper 是針對 Btrfs 檔案系統執行的,則裝置上已無空間問題通常是由於系統上做為快照儲存的資料過多所致。

您可以從 Snapper 中移除一些快照,不過,快照不會立即刪除,可能不能釋放您需要的空間容量。

若要從 Snapper 中刪除檔案:

  1. 開啟終端機主控台。

  2. 在指令提示符處,輸入 btrfs filesystem show,例如:

    tux > sudo btrfs filesystem show
    Label: none uuid: 40123456-cb2c-4678-8b3d-d014d1c78c78
     Total devices 1 FS bytes used 20.00GB
     devid 1 size 20.00GB used 20.00GB path /dev/sda3
  3. 輸入

    tux > sudo btrfs fi balance start MOUNTPOINT -dusage=5

    此指令會嘗試將資料重新放置在空的或接近空的資料區塊中,從而允許收回空間並將空間重新指定給中繼資料。此操作可能需要一些時間 (1 TB 資料可能需要很多小時),不過,在此期間系統仍可以使用。

  4. 列出 Snapper 中的快照。輸入

    tux > sudo snapper -c root list
  5. 從 Snapper 中刪除一或多個快照。輸入

    tux > sudo snapper -c root delete SNAPSHOT_NUMBER(S)

    務必先刪除最舊的快照。快照越舊,它佔用的磁碟空間就越多。

為了避免此問題發生,您可以變更 Snapper 清理演算法。如需詳細資料,請參閱Book “管理指南”, Chapter 7 “使用 Snapper 進行系統復原和快照管理”, Section 7.6.1.2 “清理演算法”。控制快照清理的組態值為 EMPTY_*NUMBER_*TIMELINE_*

如果在檔案系統磁碟上將 Snapper 與 Btrfs 結合使用,建議您保留兩倍於標準儲存建議的磁碟空間容量。YaST 磁碟分割程式會自動在 Btrfs 儲存建議中為根檔案系統建議標準磁碟空間的兩倍容量。

1.11.1.2 記錄、當機和快取檔案使用的磁碟空間

如果系統磁碟中填滿了資料,您可以嘗試從 /var/log/var/crash/var/lib/systemd/coredump/var/cache 中刪除檔案。

Btrfs 檔案系統子磁碟區 /var/log/var/crash/var/cache 可在執行一般操作過程中使用所有可用的磁碟空間,但會導致系統功能出現問題。為避免出現此狀況,SUSE Linux Enterprise Server 提供了 Btrfs 子磁碟區配額支援。如需詳細資料,請參閱第 1.2.5 節 「Btrfs 子磁碟區配額支援」

在測試和開發機器上,尤其是當應用程式頻繁當機時,您也可能想查看 /var/lib/systemd/coredump,磁心傾印就儲存在其中。

1.11.2 釋放未使用的檔案系統區塊

在固態硬碟 (SSD) 和簡易佈建的磁碟區中,釋放檔案系統未使用的區塊會很有幫助。對於支援 unmaptrim 操作的所有檔案系統,SUSE Linux Enterprise Server 完全支援在其上使用這些方法。

建議透過執行 /sbin/wiper.sh,來釋放 SUSE Linux Enterprise Server 上支援的檔案系統 (Btrfs 除外)。在執行此程序檔之前,請確定讀取 /usr/share/doc/packages/hdparm/README.wiper。對於大部分桌上型電腦和伺服器系統,每週釋放一次便已足夠。使用 -o discard 掛接檔案系統會降低效能,並可能對 SSD 的壽命造成負面影響,因此不建議使用此選項。

警告
警告:不要在 Btrfs 上使用 wiper.sh

wiper.sh 程序檔會釋放掛接的讀寫 Ext4 或 XFS 檔案系統,以及掛接/未掛接的唯讀 Ext2、Ext3、Ext4 或 XFS 檔案系統。請在 Btrfs 檔案系統上使用 wiper.sh,否則可能會損毀資料。應該使用 btrfsmaintenance 套件中的 /usr/share/btrfsmaintenance/btrfs-trim.sh

1.11.3 不要在 SSD 中進行磁碟重組

Linux 檔案系統包含相應的機制用於避免資料分散,因此通常沒有必要執行磁碟重組。但在某些使用場合下,資料分散不可避免,而對硬碟進行磁碟重組可以顯著提高效能。

這種做法僅適用於常設硬碟。在使用快閃記憶體儲存資料的固態硬碟 (SSD) 中,韌體提供的演算法可以確定要將資料寫入哪些晶片。資料通常散佈在裝置的各個位置。因此,對 SSD 進行磁碟重組並不能取得所需的效果,反而會因為寫入不必要的資料而縮短 SSD 的壽命。

出於上述原因,SUSE 明確建議不要對 SSD 進行磁碟重組。某些廠商還會警告對其固態硬碟進行磁碟重組所產生的後果。這些品牌包括但不限於:

  • HPE 3PAR StoreServ All-Flash

  • HPE 3PAR StoreServ Converged Flash

1.12 其他資訊

請造訪上述每種檔案系統專案維護的專屬首頁,找出的郵件清單資訊、詳盡文件以及常見問題:

Wikipedia 專案上的「Comparison of File Systems」(檔案系統比較,網址為 http://en.wikipedia.org/wiki/Comparison_of_file_systems#Comparison) 中提供了對各種檔案系統 (不僅僅是 Linux 檔案系統) 更深入的比較。

2 調整檔案系統大小

調整檔案系統大小 (不要與調整分割區或磁碟區大小混淆) 可用於將實體磁碟區上的空間變為可用狀態,或使用實體磁碟區上其他可用的空間。

2.1 使用案例

強烈建議您使用 YaST 磁碟分割程式來調整分割區或邏輯磁碟區的大小。如此,檔案系統將自動調整為分割區或磁碟區的新大小。不過,在某些情況下,您需要手動調整檔案系統的大小,因為 YaST 不支援它們:

  • 調整虛擬機器客體的虛擬磁碟大小之後。

  • 調整網路附加儲存中的磁碟區大小之後。

  • 手動調整分割區 (例如透過使用 fdiskparted) 或邏輯磁碟區 (例如透過使用 lvresize) 的大小之後。

  • 要縮小 Btrfs 檔案系統的大小時 (從 SUSE Linux Enterprise Server 12 開始,YaST 僅支援增大 Btrfs 檔案系統)。

2.2 調整大小準則

調整任何檔案系統的大小都存在一定的風險,可能會造成資料遺失。

警告
警告:備份資料

若要避免資料遺失,在開始執行調整大小任務之前,請務必備份資料。

計劃調整檔案系統大小時,請考慮以下準則。

2.2.1 支援調整大小的檔案系統

檔案系統必須支援調整大小才能利用為磁碟區增加的可用空間。SUSE Linux Enterprise Server 中提供了可用於檔案系統 Ext2、Ext3 和 Ext4 的檔案系統調整大小公用程式。該公用程式支援增加和減少大小,如下所述:

表 2.1︰ 檔案系統支援調整大小

檔案系統

公用程式

增加大小 (增大)

減少大小 (縮減)

Btrfs

btrfs filesystem resize

線上

線上

XFS

xfs_growfs

線上

不支援

Ext2

resize2fs

線上或離線

僅限離線

Ext3

resize2fs

線上或離線

僅限離線

Ext4

resize2fs

線上或離線

僅限離線

2.2.2 增加檔案系統的大小

您可以將檔案系統增大到裝置的最大可用空間,或指定一個精確值。請務必先增大裝置或邏輯磁碟區的大小,然後再嘗試增大檔案系統大小。

為檔案系統指定精確大小時,請確保新大小符合以下條件:

  • 新大小必須大於現有資料的大小;否則資料會遺失。

  • 新的大小不得超過目前裝置的大小,因為檔案系統大小不能超過可用空間大小。

2.2.3 減少檔案系統的大小

當要減少裝置上檔案系統的大小時,請確定新大小滿足下列條件:

  • 新大小必須大於現有資料的大小;否則資料會遺失。

  • 新的大小不得超過目前裝置的大小,因為檔案系統大小不能超過可用空間大小。

如果另外還想減少代管檔案系統之邏輯磁碟區的大小,請先減少檔案系統的大小,然後再嘗試減少裝置或邏輯磁碟區的大小。

重要
重要:XFS

XFS 格式檔案系統的大小無法減少,因為 XFS 不支援此功能。

2.3 變更 Btrfs 檔案系統的大小

掛接 Btrfs 檔案系統後,您可以使用 btrfs filesystem resize 指令來變更該檔案系統的大小。掛接了檔案系統時,增加和減少大小均受支援。

  1. 開啟終端機主控台。

  2. 確定您要變更的檔案系統已掛接。

  3. 使用 btrfs filesystem resize 指令透過下列其中一種方法變更檔案系統的大小:

    • 若要將檔案系統的大小擴充至裝置的最大可用大小,請輸入

      tux > sudo btrfs filesystem resize max /mnt
    • 若要將檔案系統擴充至指定大小,請輸入

      tux > sudo btrfs filesystem resize SIZE /mnt

      以所需大小 (以位元組計) 取代 SIZE。您也可以指定值的單位,例如 50000K (KB)、250M (MB) 或 2G (GB)。您也可以在值前面加上加號 (+) 或減號 (-),分別指定增加或減少至目前的大小:

      tux > sudo btrfs filesystem resize +SIZE /mnt
      sudo btrfs filesystem resize -SIZE /mnt
  4. 請輸入以下指令,以檢查在已掛接檔案系統上調整大小的效果:

    tux > df -h

    可用磁碟空間 (df) 指令可顯示磁碟的總大小、使用的區塊數以及檔案系統上可用的區塊數。-h 選項會以可辨識的格式列印大小,如 1K、234M 或 2G。

2.4 變更 XFS 檔案系統的大小

掛接 XFS 檔案系統後,您可以使用 xfs_growfs 指令來增加該檔案系統的大小。XFS 檔案系統的大小無法減少。

  1. 開啟終端機主控台。

  2. 確定您要變更的檔案系統已掛接。

  3. 使用 xfs_growfs 指令增加檔案系統的大小。下面的範例會將檔案系統的大小擴充為適用的最大值。請參閱 man 8 xfs_growfs 瞭解更多選項。

    tux > sudo xfs_growfs -d /mnt
  4. 請輸入以下指令,以檢查在已掛接檔案系統上調整大小的效果:

    tux > df -h

    可用磁碟空間 (df) 指令可顯示磁碟的總大小、使用的區塊數以及檔案系統上可用的區塊數。-h 選項會以可辨識的格式列印大小,如 1K、234M 或 2G。

2.5 變更 Ext2、Ext3 或 Ext4 檔案系統的大小

不論是否掛接了相應的分割區,都可以使用 resize2fs 指令來增大 Ext2、Ext3 和 Ext4 檔案系統的大小。若要減少 Ext 檔案系統的大小,需要將其卸載。

  1. 開啟終端機主控台。

  2. 如果應減小檔案系統的大小,請將它卸載。

  3. 使用下列方法之一變更檔案系統的大小:

    • 若要將檔案系統的大小擴充至名為 /dev/sda1 之裝置的最大可用大小,請輸入

      tux > sudo resize2fs /dev/sda1

      如果未指定大小參數,則預設大小為分割區的大小。

    • 若要將檔案系統變更為特定大小,請輸入

      tux > sudo resize2fs /dev/sda1 SIZE

      SIZE 參數指定為檔案系統要求的新大小。如果未指定單位,則大小參數的單位即為檔案系統的區塊大小。也可以選擇在大小參數後面加上下列其中一種單位指示項:s 表示 512 位元組磁區;K 表示 KB (1 KB 為 1024 位元組);M 表示 MB;G 表示 GB。

    請等候直至完成大小調整,然後再繼續。

  4. 如果未掛接檔案系統,請立即掛接。

  5. 請輸入以下指令,以檢查在已掛接檔案系統上調整大小的效果:

    tux > df -h

    可用磁碟空間 (df) 指令可顯示磁碟的總大小、使用的區塊數以及檔案系統上可用的區塊數。-h 選項會以可辨識的格式列印大小,如 1K、234M 或 2G。

3 使用 UUID 掛接裝置

本章說明如何使用 UUID (全域唯一識別碼) 而不是裝置名稱 (例如 /dev/sda1) 來識別檔案系統裝置。從 SUSE Linux Enterprise Server 12 開始,在開機載入程式檔案和 /etc/fstab 檔案中預設使用的是 UUID。

3.1 具有 udev 的永久裝置名稱

從 Linux 核心 2.6 開始,udev 使用永久性裝置命名方式,為動態的 /dev 目錄提供了一種使用者空間解決方案。做為 HotPlug 系統的一部分,會在裝置新增至系統或從系統中移除時執行 udev

規則清單用來比對特定的裝置屬性。udev 規則基礎結構 (定義於 /etc/udev/rules.d 目錄) 為所有磁碟裝置提供了固定名稱,不會隨辨識順序或裝置使用的連接而改變。udev 工具會檢查核心所建立的每個適當區塊裝置,根據特定匯流排、磁碟機類型或檔案系統套用命名規則。如需有關如何定義自己的 udev 規則的資訊,請參閱寫入 udev 規則

udev 會根據動態核心指定裝置節點名稱,維護指向 /dev/disk 目錄中裝置的永久符號連結類別,該目錄將進一步分類為 by-idby-labelby-pathby-uuid 子目錄。

注意
注意:UUID 產生器

除了 udev 以外的其他程式,例如 LVM 或 md,也可能會產生 UUID,但不會在 /dev/disk 中列出。

3.2 瞭解 UUID

UUID (通用唯一識別碼) 是 128 位元的檔案系統編號,在本地系統和其他系統中都是唯一的。它根據系統硬體資訊和時戳 (做為其種子的一部分) 隨機產生。UUID 通常用於唯一標記裝置。

新增儲存時使用非永久傳統裝置名稱 (例如 /dev/sda1) 可能會致使系統無法開機。例如,如果將根 (/) 指定給 /dev/sda1,在連接 SAN 或將其他硬碟套用至系統之後,根可能會重新指定給 /dev/sdg1。在此情況下,需要調整開機載入程式組態和 /etc/fstab 檔案,否則系統將不再能夠開機。

解決此問題的一個方法是在開機載入程式和開機裝置的 /etc/fstab 檔案中使用 UUID。SUSE Linux Enterprise 從版本 12 開始採用此預設處理。UUID 是檔案系統的內容,在磁碟重新格式化時會發生變更。其他可替代裝置名稱的 UUID 的方法是透過 ID 或標籤識別裝置。

您還可以將 UUID 用做組合與啟動軟體 RAID 裝置的準則。建立 RAID 後,md 驅動程式會為裝置產生一個 UUID,並將該值儲存在 md 超級區塊中。

您可以在 /dev/disk/by-uuid 目錄中找到任何區塊裝置的 UUID。例如,如下所示的 UUID 項目:

tux > ls -og /dev/disk/by-uuid/
lrwxrwxrwx 1 10 Dec  5 07:48 e014e482-1c2d-4d09-84ec-61b3aefde77a -> ../../sda1

3.3 其他資訊

如需使用 udev 來管理裝置的詳細資訊,請參閱Book “管理指南”, Chapter 24 “使用 udev 進行動態核心裝置管理”

如需 udev 指令的詳細資訊,請參閱 man 7 udev

4 用於區塊裝置操作的多層快取

多層快取是一種複製式/分散式快取,它至少包括兩層:一層由速度較慢、較為廉價的旋轉區塊裝置 (硬碟) 代表,另一層成本較高,但執行資料操作時速度更快 (例如,SSD 隨身碟)。

SUSE Linux Enterprise Server 為快閃裝置與旋轉裝置之間的快取實作兩種不同的解決方案:bcachelvmcache

4.1 一般術語

本節介紹在說明快取相關功能時經常用到的一些術語:

移轉

將邏輯區塊的主要副本從一個裝置移至另一個裝置。

升職

從慢速裝置移轉至快速裝置。

降級

從快速裝置移轉至慢速裝置。

原始裝置

大型慢速區塊裝置。它總是包含邏輯區塊的副本,該副本可能已過時或者與快取裝置上的副本保持同步 (視規則而定)。

快取裝置

小型高速區塊裝置。

中繼資料裝置

小型裝置,用於記錄哪些區塊在快取中、哪些區塊有所改動,以及規則物件使用的其他提示。此資訊也可以放在快取裝置上,但分開放置可讓磁碟區管理員對它進行不同的設定,例如,設定為鏡像以進一步提高穩健性。中繼資料裝置只能由單一快取裝置使用。

改動的區塊

如果某個程序將資料寫入快取中的某個資料區塊,該快取的區塊便會標記為改動區塊,因為該區塊已在快取中覆寫,需要寫回原始裝置。

快取遺漏

對 I/O 操作的要求首先會指向已快取裝置的快取。如果找不到要求的值,則會在裝置本身內尋找,因此速度會變慢。這稱為快取遺漏

快取命中

如果在已快取裝置的快取中找到要求的值,便可以快速提供該值。這稱為快取命中

冷快取

未保留任何值 (空白) 並且會導致快取遺漏的快取。在快取的區塊裝置進行操作的過程中,冷快取中會填入資料,從而變為快取。

暖快取

已保留一些值並且可能會導致快取命中的快取。

4.2 快取模式

下面是多層快取使用的基本快取模式:寫回直寫繞寫直通

寫回

寫入已快取區塊的資料只會移至快取,並且該區塊會標記為改動。這是預設的快取模式。

直寫

只有在同時命中原始裝置和快取裝置之後,向快取區塊的寫入才會完成。在直寫快取中,空白的區塊將保持空白狀態。

繞寫

類似於直寫快取的一種技術,不過,寫入 I/O 會直接寫入永久性儲存,並繞過快取。這可以防止在快取中發生大量後續不會重新讀取的寫入 I/O。不過,缺點是對最近寫入資料的讀取要求會造成「快取遺漏」,因而需要從慢速大量儲存中讀取這些資料,造成更大的延遲。

直通

若要啟用直通模式,快取須空白。讀取會從原始裝置進行,而繞過快取。寫入會轉遞到原始裝置,並使快取區塊「失效」。直通可以啟用快取裝置,而不必擔心資料的一致性。隨著寫入的不斷進行,快取將逐漸變為冷快取。如果您之後可以驗證快取的一致性,或者可以使用 invalidate_cblocks 訊息來建立這種一致性,則可以在快取裝置仍處於暖狀態時,將它切換到直寫寫回模式。否則,可以先丟棄快取內容,然後切換到所需的快取模式。

4.3 bcache

bcache 是一個 Linux 核心區塊層快取。它允許使用一或多個高速磁碟機 (例如 SSD) 做為一或多個慢速硬碟的快取。bcache 支援直寫和寫回,不受所使用的檔案系統的影響。依預設,它只快取隨機讀取和寫入,這也是 SSD 的強項。它還適合用於桌上型電腦、伺服器和高端儲存陣列。

4.3.1 主要功能

  • 可以使用單個快取裝置來快取任意數量的支援裝置。在執行時期,可以附加和分離已掛接及使用中的支援裝置。

  • 在非正常關機後復原 — 只有在快取與支援裝置保持一致後才會完成寫入。

  • 在 SSD 壅塞期對傳往 SSD 的流量進行節流。

  • 高效的寫回實作。已改動資料一律按排序順序寫出。

  • 穩定可靠 — 可用於線上用途。

4.3.2 設定 bcache 裝置

本節介紹設定及管理 bcache 裝置的步驟。

  1. 安裝 bcache-tools 套件:

    tux > sudo zypper in bcache-tools
  2. 建立支援裝置 (通常是機械磁碟機)。支援裝置可以是整個裝置、一個分割區或其他任何標準區塊裝置。

    tux > sudo make-bcache -B /dev/sdb
  3. 建立快取裝置 (通常是 SSD 磁碟)。

    tux > sudo make-bcache -C /dev/sdc

    本範例使用預設的區塊大小和貯體大小,分別為 512 B 和 128 KB。區塊大小應與支援裝置的磁區大小 (通常為 512 或 4k) 相符。貯體大小應與快取裝置的去除區塊大小相符,以盡可能減少寫入放大。例如,如果使用具有 4k 磁區的硬碟和具有 2 MB 去除區塊大小的 SSD,此指令如下所示:

    sudo make-bcache --block 4k --bucket 2M -C /dev/sdc
    提示
    提示:多裝置支援

    make-bcache 可以同時準備和註冊多部支援裝置與一部快取裝置。如此,您便無需再將快取裝置手動附加到支援裝置:

    tux > sudo make-bcache -B /dev/sda /dev/sdb -C /dev/sdc
  4. bcache 裝置將顯示為

    /dev/bcacheN

    /dev/bcache/by-uuid/UUID
    /dev/bcache/by-label/LABEL

    您可以像往常一樣正常格式化和掛接 bcache 裝置:

    tux > sudo mkfs.ext4 /dev/bcache0
    tux > sudo mount /dev/bcache0 /mnt

    您可以在 /sys/block/bcacheN/bcache 中透過 sysfs 控制 bcache 裝置。

  5. 註冊快取裝置和支援裝置後,需要將支援裝置附加到相關的快取集才能啟用快取:

    tux > echo CACHE_SET_UUID > /sys/block/bcache0/bcache/attach

    其中,CACHE_SET_UUID 可以在 /sys/fs/bcache 中找到。

  6. bcache 預設使用直通快取模式。您可以變更其模式,例如,若要變更為寫回,請執行

    tux > echo writeback > /sys/block/bcache0/bcache/cache_mode

4.3.3 使用 sysfsbcache 組態

bcache 裝置使用 sysfs 介面來儲存其執行時期組態值。如此您可以變更 bcache 支援裝置和快取磁碟的行為,或查看其使用統計資料。

如需 bcache sysfs 參數的完整清單,請查看 /usr/src/linux/Documentation/bcache.txt 檔案的內容,主要是 SYSFS - BACKING DEVICESYSFS - BACKING DEVICE STATSSYSFS - CACHE DEVICE 區段的內容。

4.4 lvmcache

lvmcache 是由邏輯磁碟區 (LV) 組成的快取機制。它使用 dm-cache 核心驅動程式,並支援直寫 (預設) 和寫回快取模式。lvmcache 可將其某些資料動態移轉至更快、更小的 LV,以提高大型慢速 LV 的效能。如需 LVM 的詳細資訊,請參閱第 II 部分 「邏輯磁碟區 (LVM)」

LVM 將小型快速 LV 稱為快取池 LV。大型慢速 LV 稱為原始 LV。由於 dm-cache 的要求,LVM 進一步將快取池 LV 分割成兩個裝置:快取資料 LV快取中繼資料 LV。來自原始 LV 的資料區塊副本保存在快取資料 LV 中,以提高速度。快取中繼資料 LV 保存統計資訊,這些資訊指定資料區塊的儲存位置。

4.4.1 設定 lvmcache

本節介紹建立及設定 LVM 式快取的步驟。

  1. 建立原始 LV。建立新 LV,或使用現有 LV 做為原始 LV:

    tux > sudo lvcreate -n ORIGIN_LV -L 100G vg /dev/SLOW_DEV
  2. 建立快取資料 LV。此 LV 將保存來自原始 LV 的資料區塊。此 LV 的大小即是快取的大小,將報告為快取池 LV 的大小。

    tux > sudo lvcreate -n CACHE_DATA_LV -L 10G vg /dev/FAST
  3. 建立快取中繼資料 LV。此 LV 將保存快取池中繼資料。此 LV 的大小應該比快取資料 LV 大約小 1000 倍,最小大小為 8MB。

    tux > sudo lvcreate -n CACHE_METADATA_LV -L 12M vg /dev/FAST

    列出到目前為止建立的磁碟區:

    tux > sudo lvs -a vg
    LV                VG   Attr        LSize   Pool Origin
    cache_data_lv     vg   -wi-a-----  10.00g
    cache_metadata_lv vg   -wi-a-----  12.00m
    origin_lv         vg   -wi-a----- 100.00g
  4. 建立快取池 LV。將資料 LV 和中繼資料 LV 合併成一個快取池 LV。可以同時設定快取池 LV 的行為。

    CACHE_POOL_LVCACHE_DATA_LV 同名。

    CACHE_DATA_LV 將重新命名為 CACHE_DATA_LV_cdata,並且會隱藏起來。

    CACHE_META_LV 將重新命名為 CACHE_DATA_LV_cmeta,並且會隱藏起來。

    tux > sudo lvconvert --type cache-pool \
     --poolmetadata vg/cache_metadata_lv vg/cache_data_lv
    tux > sudo lvs -a vg
    LV                     VG   Attr       LSize   Pool Origin
    cache_data_lv          vg   Cwi---C---  10.00g
    [cache_data_lv_cdata]  vg   Cwi-------  10.00g
    [cache_data_lv_cmeta]  vg   ewi-------  12.00m
    origin_lv              vg   -wi-a----- 100.00g
  5. 建立快取 LV。透過將快取池 LV 連結到原始 LV,來建立快取 LV。

    使用者可存取的快取 LV 與原始 LV 同名,原始 LV 將變成重新命名為 ORIGIN_LV_corig 的隱藏 LV。

    CacheLV 與 ORIGIN_LV 同名。

    ORIGIN_LV 將重新命名為 ORIGIN_LV_corig,並且會隱藏起來。

    tux > sudo lvconvert --type cache --cachepool vg/cache_data_lv vg/origin_lv
    tux > sudo lvs -a vg
    LV              VG   Attr       LSize   Pool   Origin
    cache_data_lv          vg   Cwi---C---  10.00g
    [cache_data_lv_cdata]  vg   Cwi-ao----  10.00g
    [cache_data_lv_cmeta]  vg   ewi-ao----  12.00m
    origin_lv              vg   Cwi-a-C--- 100.00g cache_data_lv [origin_lv_corig]
    [origin_lv_corig]      vg   -wi-ao---- 100.00g

4.4.2 移除快取池

關閉 LV 快取的方法有數種。

4.4.2.1 從快取 LV 分離快取池 LV

您可以從快取 LV 中斷快取池 LV 的連接,留下一個未使用的快取池 LV 和一個未快取的原始 LV。資料將視需要從快取池寫回到原始 LV。

tux > sudo lvconvert --splitcache vg/origin_lv

4.4.2.2 移除快取池 LV 但不移除其原始 LV

如此,可以在必要時將資料從快取池寫回原始 LV,然後移除快取池 LV,留下未快取的原始 LV。

tux > sudo lvremove vg/cache_data_lv

也可以使用以下替代指令從快取 LV 中斷快取池連接,並刪除快取池:

tux > sudo lvconvert --uncache vg/origin_lv

4.4.2.3 移除原始 LV 和快取池 LV

移除快取 LV 會同時移除原始 LV 和連結的快取池 LV。

tux > sudo lvremove vg/origin_lv

4.4.2.4 更多資訊

您可以在 lvmcache man 頁面 (man 7 lvmcache) 中找到 lvmcache 的更多相關主題,例如支援的快取模式、備援的子邏輯磁碟區、快取規則,或者將現有 LV 轉換為不同的快取類型。

第 II 部分 邏輯磁碟區 (LVM)

  • 5 LVM 組態
  • 本章介紹邏輯磁碟區管理員 (LVM) 的原理及其基本功能,以及令其在多種狀況下都能發揮效用的基本功能。YaST LVM 組態可透過 YaST 進階磁碟分割程式來完成。這個磁碟分割工具讓您編輯和刪除現有磁碟分割,以及建立應該與 LVM 一起使用的新磁碟分割。

  • 6 LVM 磁碟區快照
  • 邏輯磁碟區管理員 (LVM) 邏輯磁碟區快照是一種寫入時複製技術,它會監控現有磁碟區資料區塊的變更,以便在對其中一個區塊執行寫入操作時,將建立快照時區塊的值複製到快照磁碟區。使用這種方式便會保留一份時間點資料,直到快照磁碟區被刪除。

5 LVM 組態

本章介紹邏輯磁碟區管理員 (LVM) 的原理及其基本功能,以及令其在多種狀況下都能發揮效用的基本功能。YaST LVM 組態可透過 YaST 進階磁碟分割程式來完成。這個磁碟分割工具讓您編輯和刪除現有磁碟分割,以及建立應該與 LVM 一起使用的新磁碟分割。

警告
警告:風險

使用 LVM 可能會增加風險,如遺失資料。這些危險也包括應用程式當機、電源中斷和錯誤指令。執行 LVM 或重新設定磁碟區前,請儲存您的資料。決不要在沒有備份的情形下工作。

5.1 瞭解邏輯磁碟區管理員

LVM 支援在多個實體磁碟區 (硬碟、分割區、LUN) 之間彈性地分配硬碟空間。在安裝過程中,僅當完成首次磁碟分割時需要變更硬碟空間的分割,由此開發了此工具。因為要修改正在執行之系統上的分割區很困難,LVM 提供了儲存空間的虛擬集區 (磁碟區群組,或稱之 VG)。需要時,可從虛擬集區建立邏輯磁碟區 (LV)。作業系統可以存取這些 LV,而不是存取實體分割區。磁碟區群組可以延伸至一個以上的磁碟,因此數個磁碟或是數個磁碟的某些部份可能會構成單一的 VG。借此,LVM 提供了一種從實體磁碟空間進行擷取的方法,允許使用比實體磁碟重新分割更為簡單和安全的方式來變更分割。

圖形 5.1 「實體分割與 LVM」比較實體分割 (左邊) 與 LVM 分割 (右邊)。在左邊,單一個磁碟已分割為三個實體分割區 (PART),每一個都會指定掛接點 (MP),讓作業系統存取它們。在右邊,已經個別將兩個磁碟分割成兩個及三個實體分割區。已經定義兩個 LVM 磁碟區群組 (VG1 與 VG2)。VG 1 包含 DISK 1 的兩個磁碟區以及 DISK 2 的一個磁碟區。VG 2 包含 DISK 2 其餘的兩個磁碟區。

實體分割與 LVM
圖 5.1︰ 實體分割與 LVM

在 LVM 中,併入一個磁碟區群組中的實體磁碟分割區稱為實體磁碟區 (PV)。在圖形 5.1 「實體分割與 LVM」中的磁碟區群組中,已經定義 4 個邏輯磁碟區 (LV 1 至 LV 4),作業系統可以透過關聯的掛接點 (MP) 來使用這些邏輯磁碟區。在不同的邏輯磁碟區之間的邊緣,不需要對齊任何分割區的邊緣。請參閱此範例中 LV 1 與 LV 2 之間的邊緣。

LVM 功能:

  • 數個硬碟或分割區可以在大的邏輯磁碟區結合成一個。

  • 如果組態適用,當可用空間耗盡時,可以擴大 LV (如 /usr)。

  • 使用 LVM,就可以在執行的系統中新增硬碟或 LV。然而,這種作法需要能執行此動作的隨插即用式硬體。

  • 可以啟動分割模式,將邏輯磁碟區的資料流分散至數個實體磁碟區。如果這些實體磁碟區位於不同的磁碟上,這可以改善讀寫效能,就像 RAID 0 一樣。

  • 快照功能能夠讓執行系統中的備份 (特別是伺服器) 成為一致。

注意
注意:LVM 和 RAID

儘管 LVM 也支援 0/1/4/5/6 層級的 RAID,但建議使用 MD RAID (請參閱第 7 章 「軟體 RAID 組態)。不過,LVM 在 RAID 0 和 1 下也可以正常運作,因為 RAID 0 類似於通用邏輯磁碟區管理 (各個邏輯區塊會對應至實體裝置上的區塊)。在 RAID 1 基礎上使用的 LVM 可以追蹤鏡像同步,並且完全能夠管理同步程序。使用更高的 RAID 層級時,需要透過一個管理精靈來監控附加磁碟的狀態,並在磁碟陣列出現問題時通知管理員。LVM 便包含這種精靈,但在裝置故障等例外情況下,該精靈無法正常運作。

警告
警告:IBM Z:LVM 根檔案系統

如果您在 LVM 或軟體 RAID 陣列中為系統設定了根檔案系統,則必須將 /boot 置於單獨的非 LVM 或非 RAID 分割區上,否則系統將無法開機。此類分割區的建議大小為 500 MB,建議的檔案系統為 Ext4。

使用 LVM 的這些功能,對於使用頻繁的家用個人電腦或小型伺服器而言,在效能上可以看到改善。如果您在資料庫、音樂歸檔或使用者目錄中的資料會一直累積,LVM 就是非常適用的工具。可允許比實體硬碟還大的檔案系統。不過,請記住使用 LVM 與使用傳統分割區是不同的。

您可以使用 YaST 磁碟分割程式來管理新的或現有的 LVM 儲存物件。如需設定 LVM 的指示及詳細資訊,請參閱官方網站的 LVM HOWTO

5.2 建立磁碟區群組

一個 LVM 磁碟區群組 (VG) 可將多個 Linux LVM 分割區組合到一個邏輯空間池中。您可以從群組的可用空間中切出邏輯磁碟區。群組中的 Linux LVM 分割區可以位於相同磁碟也可以位於不同的磁碟上。您可以新增分割區或整個磁碟來擴充群組的大小。

若要使用整個磁碟,磁碟不得包含任何分割區。使用分割區時,一定不能將它們掛接。YaST 在將分割區新增至 VG 時,會自動將它們的分割區類型變更為 0x8E Linux LVM

  1. 啟動 YaST 並開啟磁碟分割程式

  2. 如果您需要重新設定現有分割設定,請依如下步驟操作。如需詳細資訊,請參閱Book “部署指南 ”, Chapter 10 “專家分割程式”, Section 10.1 “使用進階磁碟分割程式”。如果您只是想利用現有的未使用磁碟或分割區,請跳過此步驟。

    警告
    警告:未分割磁碟上的實體磁碟區

    可以使用某個未分割的磁碟做為實體磁碟區 (PV),前提是該磁碟不是安裝作業系統的磁碟,也不是作業系統從中開機的磁碟。

    由於未分割的磁碟在系統層級顯示為未使用,因此很容易將其覆寫,或以錯誤的方式對其進行存取。

    1. 若要使用已包含分割區的整個硬碟,請刪除該磁碟上的所有分割區。

    2. 若要使用目前已掛接的分割區,請將其卸載。

  3. 在左側面板中,選取磁碟區管理

    右側面板中即會開啟一份現有磁碟區群組清單。

  4. 在「磁碟區管理」頁面左下方,按一下新增磁碟區群組

    Image
  5. 按如下所示定義磁碟區群組:

    1. 指定磁碟區群組名稱

      如果您要在安裝時建立磁碟區群組,建議為將包含 SUSE Linux Enterprise Server 系統檔案的磁碟區群組指定 system 名稱。

    2. 指定實體範圍大小

      實體範圍大小定義磁碟區群組中實體區塊的大小。在卷冊群組中的所有磁碟空間都會以此大小的區塊來處理。值可以是 1 KB 到 16 GB 範圍內 2 的次方。此值通常設定為 4 MB。

      在 LVM1 中,4 MB 實體範圍允許的最大 LV 大小是 256 GB,因為該 LVM 最多支援每個 LV 有 65534 個範圍。在 SUSE Linux Enterprise Server 上使用的 LVM2 不會限制實體範圍數量。範圍數量較大不會影響邏輯磁碟區的 I/O 效能,但會降低 LVM 工具的速度。

      重要
      重要:實體範圍大小

      在單個 VG 中不應混合使用不同的實體範圍大小。在進行初始設定後,就不應當再修改範圍。

    3. 可用實體磁碟區清單中,選取要用來組成此磁碟區群組的 Linux LVM 分割區,然後按一下新增以將它們移至選定實體磁碟區清單。

    4. 按一下完成

      新群組便會出現在磁碟區群組清單中。

  6. 在「磁碟區管理」頁面中按下一步,確認新的磁碟區群組有列出,然後按一下完成

  7. 若要檢查哪些實體裝置屬於磁碟區群組,請於任一時間在執行中系統內開啟 YaST 磁碟分割程式,然後按一下磁碟區管理 ›  編輯 ›  實體裝置。按一下中止離開此螢幕。

    名為 DATA 的磁碟區群組中的實體磁碟區
    圖 5.2︰ 名為 DATA 的磁碟區群組中的實體磁碟區

5.3 建立邏輯磁碟區

邏輯磁碟區會提供一個與硬碟提供的空間池相似的空間池。若要讓此空間可用,需要定義邏輯磁碟區。邏輯磁碟區類似於一般分割區,您可以將其格式化和掛接。

使用 YaST 磁碟分割程式可從現有磁碟區群組建立邏輯磁碟區。至少指定一個邏輯磁碟區給每個磁碟區群組。可以視需要建立新的邏輯磁碟區,直到磁碟區群組中的所有可用空間都用完為止。可以選擇性地簡易佈建一個 LVM 邏輯磁碟區,以便建立大小超出可用空間的邏輯磁碟區 (如需詳細資訊,請參閱第 5.3.1 節 「簡易佈建的邏輯磁碟區」)。

  • 一般磁碟區:: (預設) 系統會立即配置磁碟區的空間。

  • 簡易池:: 邏輯磁碟區是保留給簡易磁碟區使用的空間池。簡易磁碟區可以視需要從簡易池中配置它們所需的空間。

  • 簡易磁碟區:: 建立為疏鬆磁碟區的磁碟區。該磁碟區會視需要從簡易池配置所需的空間。

  • 鏡像磁碟區:: 建立的磁碟區中包含定義數量的鏡像。

程序 5.1︰ 設定邏輯磁碟區
  1. 啟動 YaST 並開啟磁碟分割程式

  2. 在左側面板中,選取磁碟區管理。右側面板中即會開啟一份現有磁碟區群組清單。

  3. 選取要在其中建立磁碟區的磁碟區群組,然後選擇邏輯磁碟區 › 新增邏輯磁碟區

  4. 提供磁碟區的名稱,然後選擇一般磁碟區 (如需設定簡易佈建磁碟區的資訊,請參閱第 5.3.1 節 「簡易佈建的邏輯磁碟區」)。按下一步繼續。

    Image
  5. 指定磁碟區的大小以及是否使用多個等量磁區。

    如果使用分割的磁碟區,資料將在多個實體磁碟區之間分配。如果這些實體磁碟區是在不同的硬碟上,通常可以改善讀寫效能 (像 RAID 0 一樣)。可用等量磁碟區的最大數量就是實體磁碟區的數量。預設值 1 表示不使用多個等量磁碟區。

    Image
  6. 選擇磁碟區的角色。您在此處所做的選擇只會影響即將開啟之對話方塊的預設值。它們可以在下一步中變更。如果不確定,請選擇原始磁碟區 (未格式化)

    Image
  7. 格式化選項下,選取格式化分割區,然後選取檔案系統選項功能表的內容視檔案系統而定。一般不需要變更預設值。

    掛接選項下,選取掛接分割區,然後選取掛接點。按一下Fstab 選項可為磁碟區新增特殊掛接選項。

  8. 按一下完成

  9. 下一步,確認變更有列出,然後按一下完成

5.3.1 簡易佈建的邏輯磁碟區

您可以選擇性地對 LVM 邏輯磁碟區進行簡易佈建。簡易佈建可讓您建立預訂大小超過可用空間的邏輯磁碟區。您可以建立一個簡易池,來包含保留的供任意數量簡易磁碟區使用的未使用空間。簡易磁碟區將建立為疏鬆磁碟區,並且會視需要從簡易池配置空間。簡易池可以在需要時動態擴充,以具成本效益的方式來配置儲存空間。簡易佈建磁碟區還支援快照 (可以使用 Snapper 進行管理),如需詳細資訊,請參閱Book “管理指南”, Chapter 7 “使用 Snapper 進行系統復原和快照管理”

若要設定簡易佈建的邏輯磁碟區,請依程序 5.1 「設定邏輯磁碟區」所述操作。在選擇磁碟區類型時,請不要選擇一般磁碟區,而應選擇簡易磁碟區簡易池

簡易池

邏輯磁碟區是保留給簡易磁碟區使用的空間池。簡易磁碟區可以視需要從簡易池中配置它們所需的空間。

簡易磁碟區

建立為疏鬆磁碟區的磁碟區。該磁碟區會視需要從簡易池配置所需的空間。

重要
重要:叢集中簡易佈建的磁碟區

若要在叢集中使用簡易佈建磁碟區,使用它的簡易池和簡易磁碟區必須在單個叢集資源中管理。如此,簡易磁碟區和簡易池便可永遠獨佔地掛接在同一個節點上。

5.3.2 建立鏡像磁碟區

可以建立包含多個鏡像的邏輯磁碟區。LVM 可確保將寫入基礎實體磁碟區的資料鏡像到不同的實體磁碟區。因此,即使某個實體磁碟區當機,您仍可以存取邏輯磁碟區上的資料。LVM 還保留一個記錄檔案用於管理同步程序。記錄中包含哪些磁碟區區域目前正在與鏡像同步的相關資訊。依預設,記錄會儲存在磁碟上,並且與鏡像位於不同的磁碟 (如果可能的話)。不過,您可以為記錄指定一個不同的位置,例如暫時性記憶體。

目前可以使用兩種類型的鏡像實作:「正常」的 (非 raid) mirror 邏輯磁碟區和 raid1 邏輯磁碟區。

建立鏡像邏輯磁碟區後,可以對這些磁碟區執行標準操作,例如啟用、擴充和移除。

5.3.2.1 設定鏡像非 raid 邏輯磁碟區

若要建立鏡像磁碟區,請使用 lvcreate 指令。以下範例會建立一個 500 GB 的邏輯磁碟區,其中包含兩個名為 lv1 的鏡像,並使用磁碟區群組 vg1

tux > sudo lvcreate -L 500G -m 2 -n lv1 vg1

此類邏輯磁碟區是一種線性磁碟區 (無分割),可提供檔案系統的三個副本。m 選項指定鏡像的計數。L 選項指定邏輯磁碟區的大小。

邏輯磁碟區會分割成預設大小為 512 KB 的區域。如果需要不同大小的區域,請使用 -R 選項,後接所需的區域大小 (以 MB 為單位)。或者,可以在 lvm.conf 檔案中編輯 mirror_region_size 選項,以設定所需的區域大小。

5.3.2.2 設定 raid1 邏輯磁碟區

由於 LVM 支援 RAID,您可以使用 RAID1 來實作鏡像。相比非 raid 鏡像,這種實作可提供以下優勢:

  • LVM 為每個鏡像影像維護一個完全備援的點陣圖區,從而提高其錯誤處理能力。

  • 可以暫時性地從陣列中分割出鏡像影像,然後重新合併回去。

  • 陣列可以處理暫時性故障。

  • LVM RAID 1 實作支援快照。

但另一方面,這種類型的鏡像實作不允許在叢集磁碟區群組中建立邏輯磁碟區。

若要使用 RAID 建立鏡像磁碟區,請執行以下指令

tux > sudo lvcreate --type raid1 -m 1 -L 1G -n lv1 vg1

其中,各選項/參數的意義如下:

  • --type:需要指定 raid1,否則該指令將使用隱含區段類型 mirror,並建立非 raid 鏡像。

  • -m:指定鏡像的計數。

  • -L:指定邏輯磁碟區的大小。

  • -n:使用此選項可以指定邏輯磁碟區的名稱。

  • vg1:邏輯磁碟區使用之磁碟區群組的名稱。

LVM 將為陣列中的每個資料磁碟區建立具有一個範圍大小的邏輯磁碟區。如果您有兩個鏡像磁碟區,LVM 將另外建立兩個磁碟區用於儲存中繼資料。

建立 RAID 邏輯磁碟區之後,您可以像使用普通邏輯磁碟區一樣使用該磁碟區。可以將它啟用、擴充,等等。

5.4 自動啟動非根 LVM 磁碟區群組

非根 LVM 磁碟區群組的啟用行為在 /etc/lvm/lvm.conf 檔案中控制,同時受控於 auto_activation_volume_list 參數。該參數預設為空白,即所有磁碟區都會啟用。若只想啟用某些磁碟區群組,請新增名稱並用引號括住,同時以逗號分隔,例如:

auto_activation_volume_list = [ "vg1", "vg2/lvol1", "@tag1", "@*" ]

如果在 auto_activation_volume_list 參數中定義了清單,將會發生以下情況:

  1. 首先會依據此清單檢查每個邏輯磁碟區。

  2. 如果兩者不符,則不啟用該邏輯磁碟區。

依預設,在 Dracut 重新啟動系統時,非根 LVM 磁碟區群組會自動啟用。此參數可讓您在系統重新啟動時啟動所有磁碟區群組,或者僅啟動指定的非根 LVM 磁碟區群組。

5.5 調整現有磁碟區群組的大小

您隨時都可在執行中系統內新增實體磁碟區,來擴充磁碟區群組提供的空間,而無需中斷服務。這一特性允許您將邏輯磁碟區新增至群組或擴充現有磁碟區的大小,如第 5.6 節 「調整邏輯磁碟區的大小」所述。

您還可以透過移除實體磁碟區來縮小磁碟區群組的大小。YaST 只允許移除目前未使用的實體磁碟區。若要瞭解哪些實體磁碟區目前在使用中,請執行以下指令。PE Ranges 欄中列出的分割區 (實體磁碟區) 是使用中的分割區 (實體磁碟區):

tux > sudo pvs -o vg_name,lv_name,pv_name,seg_pe_ranges
root's password:
  VG   LV    PV         PE Ranges
             /dev/sda1
  DATA DEVEL /dev/sda5  /dev/sda5:0-3839
  DATA       /dev/sda5
  DATA LOCAL /dev/sda6  /dev/sda6:0-2559
  DATA       /dev/sda7
  DATA       /dev/sdb1
  DATA       /dev/sdc1
  1. 啟動 YaST 並開啟磁碟分割程式

  2. 在左側面板中,選取磁碟區管理。右側面板中即會開啟一份現有磁碟區群組清單。

  3. 選取要變更的磁碟區群組,啟用實體磁碟區索引標籤,然後按一下變更

    Image
  4. 請執行下列其中一個步驟:

    • 新增:: 透過將一或多個實體磁碟區 (LVM 分割區) 從可用實體磁碟區清單移至選定實體磁碟區清單,可以擴大磁碟區群組的大小。

    • 移除:: 透過將一或多個實體磁碟區 (LVM 分割區) 從選定實體磁碟區清單移至可用實體磁碟區清單,可以縮小磁碟區群組的大小。

  5. 按一下完成

  6. 下一步,確認變更有列出,然後按一下完成

5.6 調整邏輯磁碟區的大小

如果磁碟區群組中有未使用的可用空間可供使用,您可以增大邏輯磁碟區以提供更多可用空間。您還可以縮小某個磁碟區的大小,以便釋放磁碟區群組中可供其他邏輯磁碟區使用的空間。

注意
注意:線上調整大小

YaST 在縮小磁碟區的大小時,還會自動調整其檔案系統的大小。目前掛接的磁碟區是否可以線上 (即處於掛接狀態時) 調整大小,取決於其檔案系統。Btrfs、XFS、Ext3 和 Ext4 支援線上增大檔案系統。

只有 Btrfs 支援線上縮小檔案系統。若要縮小 Ext2/3/4 檔案系統,需將其卸載。採用 XFS 格式的磁碟區無法縮小,因為 XFS 不支援檔案系統縮減。

  1. 啟動 YaST 並開啟磁碟分割程式

  2. 在左側面板中,選取磁碟區管理。右側面板中即會開啟一份現有磁碟區群組清單。

  3. 選取要變更的邏輯磁碟區,然後按一下調整大小

    Image
  4. 使用下列選項之一設定所需大小:

    • 最大大小: 將邏輯磁碟區的大小擴充為使用磁碟區群組中剩餘的所有空間。

    • 最小大小: 將邏輯磁碟區的大小縮小為資料和檔案系統中繼資料佔用的大小。

    • 自訂大小: 為磁碟區的大小指定新值。值必須介於上面列出的最小值與最大值之間。請使用 K、M、G、T 分別表示 KB、MB、GB 和 TB (例如 20G)。

  5. 按一下確定

  6. 下一步,確認變更有列出,然後按一下完成

5.7 刪除磁碟區群組或邏輯磁碟區

警告
警告:資料損失

刪除磁碟區群組會損毀其每個成員分割區中的所有資料。刪除邏輯磁碟區會損毀儲存在磁碟區中的所有資料。

  1. 啟動 YaST 並開啟磁碟分割程式

  2. 在左側面板中,選取磁碟區管理。右側面板中即會開啟一份現有磁碟區群組清單。

  3. 選取要移除的磁碟區群組或邏輯磁碟區,然後按一下刪除

  4. 根據您的選擇,系統會顯示警告對話方塊。請按一下進行確認。

  5. 下一步,確認刪除的磁碟區群組 (刪除項目以紅色字型顯示) 有列出,然後按一下完成

5.8 使用 LVM 指令

如需使用 LVM 指令的資訊,請參閱下表中所述指令的 man 頁面。執行所有指令都需要有 root 權限。請使用 sudo COMMAND (建議採用此方式),或者直接以 root 身分執行這些指令。

LVM 指令
pvcreate 裝置

啟始化裝置 (例如 /dev/sdb1),供 LVM 用做實體磁碟區。如果指定的裝置上存在任何檔案系統,將會出現警告。請記住,僅當已安裝 blkid 時 (預設已安裝),pvcreate 才會檢查現有檔案系統。如果 blkid 不可用,pvcreate 不會產生任何警告,因此您可能會在未收到任何警告的情況下遺失檔案系統。

pvdisplay 裝置

顯示 LVM 實體磁碟區的相關資訊,例如邏輯磁碟區中目前是否正在使用該磁碟區。

vgcreate -c y VG_名稱 裝置 1 [裝置 2...]

使用一或多個指定的裝置建立叢集磁碟區群組。

vgcreate --activationmode 啟用模式 VG_名稱

設定磁碟區群組啟用模式。您可以指定以下其中一個值:

  • complete:只能啟用不受缺少的實體磁碟區影響的邏輯磁碟區,即使特定的邏輯磁碟區能夠容許這種故障。

  • degraded:預設的啟用模式。如果提供了足夠的備援層級來啟用某個邏輯磁碟區,則即使缺少某些實體磁碟區,也能啟用該邏輯磁碟區。

  • partial:即使缺少某些實體磁碟區,LVM 也會嘗試啟用磁碟區群組。如果某個非備援邏輯磁碟區缺少重要的實體磁碟區,則通常無法啟用該邏輯磁碟區,而是將它做為錯誤目標進行處理。

vgchange -a [ey|n] VG_名稱

為輸入/輸出啟動 (-a ey) 或取消啟動 (-a n) 磁碟區群組及其邏輯磁碟區。

啟用叢集中的某個磁碟區時,請務必使用 ey 選項。此選項預設用於載入程序檔中。

vgremove VG_名稱

移除磁碟區群組。使用此指令之前,移除邏輯磁碟區,然後取消啟動磁碟區群組。

vgdisplay VG_名稱

顯示指定磁碟區群組的相關資訊。

若要查看磁碟區群組的總體實體範圍,請輸入

tux > vgdisplay VG_NAME | grep "Total PE"
lvcreate -L 大小 -n LV_名稱 VG_名稱

建立具有指定大小的邏輯磁碟區。

lvcreate -L 大小 --thinpool 池名稱 VG_名稱

從磁碟區群組 VG_NAME 建立具有指定大小的簡易池 myPool

以下範例會從磁碟區群組 LOCAL 建立大小為 5 GB 的簡易池:

tux > sudo lvcreate -L 5G --thinpool myPool LOCAL
lvcreate -T VG_名稱/池名稱 -V 大小 -n LV_名稱

在池 POOL_NAME 中建立簡易邏輯磁碟區。以下範例會從磁碟區群組 LOCAL 上的 myPool 池建立 1 GB 的簡易磁碟區 myThin1

tux > sudo lvcreate -T LOCAL/myPool -V 1G -n myThin1
lvcreate -T VG_名稱/池名稱 -V 大小 -L 大小 -n LV_名稱

您也可以在一條指令中同時建立簡易池和簡易邏輯磁碟區:

tux > sudo lvcreate -T LOCAL/myPool -V 1G -L 5G -n myThin1
lvcreate --activationmode 啟用模式 LV_名稱

設定邏輯磁碟區啟用模式。您可以指定以下其中一個值:

  • complete:僅當邏輯磁碟區的所有實體磁碟區均處於使用中狀態時,才能啟用該邏輯磁碟區。

  • degraded:預設的啟用模式。如果提供了足夠的備援層級來啟用某個邏輯磁碟區,則即使缺少某些實體磁碟區,也能啟用該邏輯磁碟區。

  • partial:即使缺少某些實體磁碟區,LVM 也會嘗試啟用磁碟區。如果邏輯磁碟區有一部分不可用,可能會導致資料遺失。此選項通常不使用,但在還原資料時,它可能會有用。

您也可以透過在 /etc/lvm/lvm.conf 中為 activation_mode 組態選項指定上述其中一個值,來指定啟用模式。

lvcreate -s [-L 大小] -n 快照磁碟區 來源磁碟區路徑 VG_名稱

建立指定邏輯磁碟區的快照磁碟區。如果未包括大小選項 (-L--size),則系統會將快照建立為簡易快照。

lvremove /dev/VG_名稱/LV_名稱

移除邏輯磁碟區。

使用此指令之前,請執行 umount 指令卸載邏輯磁碟區以將其關閉。

lvremove 快照磁碟區路徑

移除快照磁碟區。

lvconvert --merge 快照磁碟區路徑

將邏輯磁碟區回復為快照的版本。

vgextend VG_名稱 裝置

將指定的裝置 (實體磁碟區) 新增至現有磁碟區群組。

vgreduce VG_名稱 裝置

從現有磁碟區群組中移除指定的實體磁碟區。

確保實體磁碟區目前未由任何邏輯磁碟區使用。如果在使用中,您必須使用 pvmove 指令將資料移至另一個實體磁碟區。

lvextend -L 大小 /dev/VG_名稱/LV_名稱

擴充指定邏輯磁碟區的大小。此後,您還必須擴充檔案系統以利用新增加的可用空間。如需詳細資料,請參閱第 2 章 「調整檔案系統大小

lvreduce -L 大小 /dev/VG_名稱/LV_名稱

縮小指定邏輯磁碟區的大小。

在縮小磁碟區之前,請務必先縮小檔案系統的大小,否則會有遺失資料的風險。如需詳細資料,請參閱第 2 章 「調整檔案系統大小

lvrename /dev/VG_名稱/LV_名稱 /dev/VG_名稱/新_LV_名稱

重新命名現有 LVM 邏輯磁碟區,這不會變更磁碟區群組名稱。

提示
提示:建立磁碟區時繞過 udev

如果您要使用 LVM 而不是 udev 規則來管理 LV 裝置節點和符號連結,可以使用下列其中一種方法來禁止 udev 發出通知:

  • /etc/lvm/lvm.conf 中設定 activation/udev_rules = 0activation/udev_sync = 0

    請注意,在 lvcreate 指令中指定 --nodevsync 的效果與設定 activation/udev_sync = 0 相同;仍需設定 activation/udev_rules = 0

  • 設定環境變數 DM_DISABLE_UDEV

    export DM_DISABLE_UDEV=1

    這也會禁止 udev 發出通知。此外,還會忽略 /etc/lvm/lvm.conf 中的所有 udev 相關設定。

5.8.1 使用指令調整邏輯磁碟區的大小

lvresizelvextendlvreduce 指令可用於調整邏輯磁碟區的大小。如需這些指令的語法及選項資訊,請參閱相應指令的 man 頁面。若要擴充 LV,VG 上必須有足夠多的未配置空間。

建議您使用 YaST 磁碟分割程式來增大或縮小邏輯磁碟區。使用 YaST 時,磁碟區中檔案系統的大小也會自動調整。

您雖然可以在 LV 處於使用中狀態時手動對其進行擴充或縮小,但若其上包含檔案系統,則無法如此操作。擴充或縮減 LV 不會自動修改磁碟區中檔案系統的大小。在那之後必須使用另一個指令來增大檔案系統。如需調整檔案系統大小的相關資訊,請參閱第 2 章 「調整檔案系統大小

手動調整 LV 大小時,請務必確保使用正確的順序:

  • 若要擴充 LV,則必須先擴充 LV 然後再嘗試增大檔案系統。

  • 若要縮減 LV,則必須先縮減檔案系統然後再嘗試縮減 LV。

若要擴充邏輯磁碟區的大小:

  1. 開啟終端機主控台。

  2. 如果邏輯磁碟區包含 Ext2 或 Ext4 檔案系統,則不支援線上增大,請將其卸下。如果它包含為虛擬機器 (例如 Xen VM) 代管的檔案系統,請先關閉該 VM。

  3. 在終端機主控台提示符處,輸入以下指令以增加邏輯磁碟區的大小:

    tux > sudo lvextend -L +SIZE /dev/VG_NAME/LV_NAME

    對於 SIZE,請指定您要新增到邏輯磁碟區的空間容量,例如 10 GB。以邏輯磁碟區的 Linux 路徑取代 /dev/VG_NAME/LV_NAME,例如 /dev/LOCAL/DATA。例如:

    tux > sudo lvextend -L +10GB /dev/vg1/v1
  4. 調整檔案系統的大小。如需詳細資料,請參閱第 2 章 「調整檔案系統大小

  5. 如果您已卸下了檔案系統,請重新掛接。

例如,將包含 (已裝載並啟用) Btrfs 的 LV 擴充 10 GB:

tux > sudo lvextend −L +10G /dev/LOCAL/DATA
tux > sudo btrfs filesystem resize +10G /dev/LOCAL/DATA

若要縮小邏輯磁碟區的大小:

  1. 開啟終端機主控台。

  2. 如果邏輯磁碟區不包含 Btrfs 檔案系統,請將其卸下。如果它包含為虛擬機器 (例如 Xen VM) 代管的檔案系統,請先關閉該 VM。請注意,包含 XFS 檔案系統之磁碟區的大小無法縮小。

  3. 調整檔案系統的大小。如需詳細資料,請參閱第 2 章 「調整檔案系統大小

  4. 在終端機主控台提示符處,輸入以下指令將邏輯磁碟區的大小縮小為檔案系統的大小:

    tux > sudo lvreduce /dev/VG_NAME/LV_NAME
  5. 如果您已卸載檔案系統,請重新掛接。

例如,若要將包含 Btrfs 的 LV 縮減 5 GB:

tux > sudo btrfs filesystem resize -size 5G /dev/LOCAL/DATA
sudo lvreduce /dev/LOCAL/DATA
提示
提示: 使用一條指令調整磁碟區和檔案系統的大小

SUSE Linux Enterprise Server 12 SP1 開始,lvextendlvresizelvreduce 都支援 --resizefs 選項,該選項不僅可以變更磁碟區的大小,而且還能調整檔案系統的大小。因此,上面所示的 lvextendlvreduce 範例也可以改寫為:

tux > sudo lvextend --resizefs −L +10G /dev/LOCAL/DATA
tux > sudo lvreduce  --resizefs -L -5G /dev/LOCAL/DATA

請注意,--resizefs 在以下檔案系統下受支援:ext2/3/4、Btrfs 和 XFS。目前只能在 SUSE Linux Enterprise Server 上使用此選項調整 Btrfs 的大小,因為之前的版本不支援此選項。

5.8.2 透過 lvmetad 動態彙總 LVM 中繼資料

大多數 LVM 指令都需要針對儲存在系統中各磁碟裝置上的 LVM 中繼資料的準確檢視。依據目前的 LVM 設計,如果此資訊不可用,LVM 必須掃描系統中的所有實體磁碟裝置。在擁有許多磁碟的系統中,這需要執行非常多的 I/O 操作。如果某個磁碟無法回應,LVM 指令就可能會因等待磁碟回應而逾時。

透過 lvmetad 動態彙總 LVM 中繼資料,便可解決此問題。lvmetad 精靈的用途是,每次在裝置的狀態變更時動態彙總中繼資料資訊,從而消除此掃描的需要。這些事件透過 udev 規則向 lvmetad 發出訊號。如果精靈未在執行中,則 LVM 會照常執行掃描。

此功能預設會啟用。如果您的系統上已將其停用,可執行以下步驟加以啟用:

  1. 開啟終端機主控台。

  2. 停止 lvmetad 精靈:

    tux > sudo systemctl stop lvm2-lvmetad
  3. 編輯 /etc/lvm/lvm.conf,將 use_lvmetad 設定為 1

    use_lvmetad = 1
  4. 重新啟動 lvmetad 精靈:

    tux > sudo systemctl start lvm2-lvmetad
重要
重要:

如果 lvmetad 精靈正在執行,則在執行 pvscan --cache device 指令時,不會套用 /etc/lvm/lvm.conf 檔案中的 filter = 設定。若要過濾裝置,必須使用 the global_filter = 設定。LVM 不會開啟全域過濾器所跳過的裝置,也永遠不會掃描這些裝置。

若要檢查確切的行為,請執行 lvmconfig -l | grep global_filter_compat 指令。如果結果顯示 global_filter_compat 選項存在且設定為 0,則會套用上述行為。如果該選項不存在或設定為 1,則行為保持不變。

5.8.3 使用 LVM 快取磁碟區

LVM 支援使用高速區塊裝置 (例如 SSD 裝置) 做為大型慢速區塊裝置的寫回或直寫快取。快取邏輯磁碟區類型使用小型高速 LV 來提高大型慢速 LV 的效能。

若要設定 LVM 快取,需要在快取裝置上建立兩個邏輯磁碟區。較大的磁碟區用於快取自身,較小的磁碟區用於儲存快取中繼資料。這兩個磁碟區必須與原始磁碟區同屬一個磁碟區群組。建立這些磁碟區之後,需要將其轉換為快取池,並將該池附加到原始磁碟區:

程序 5.2︰ 設定快取的邏輯磁碟區
  1. 在慢速裝置上建立原始磁碟區 (如果尚不存在)。

  2. 將實體磁碟區 (從快速裝置) 新增至原始磁碟區所屬的同一個磁碟區群組,然後在實體磁碟區上建立快取資料磁碟區。

  3. 建立快取中繼資料磁碟區。該磁碟區的大小應為快取資料磁碟區大小的 1/1000,最小 8 MB。

  4. 將快取資料磁碟區和中繼資料磁碟區合併成一個快取池磁碟區:

    tux > sudo lvconvert --type cache-pool --poolmetadata VOLUME_GROUP/METADATA_VOLUME VOLUME_GROUP/CACHING_VOLUME
  5. 將快取池附加到原始磁碟區:

    tux > sudo lvconvert --type cache --cachepool VOLUME_GROUP/CACHING_VOLUME VOLUME_GROUP/ORIGINAL_VOLUME

如需 LVM 快取的詳細資訊,請參閱 lvmcache(7) man 頁面。

5.9 標記 LVM2 儲存物件

標記是指定給儲存物件中繼資料的無序關鍵字或詞彙。透過使用標記,您可以為 LVM 儲存物件的中繼資料附加無序的標記清單,用實用的方式對物件集合進行分類。

5.9.1 使用 LVM2 標記

標記 LVM2 儲存物件之後,便可以在指令中使用標記來完成下列任務:

  • 選取要根據是否存在特定標記來處理的 LVM 物件。

  • 在組態檔案中使用標記,可控制在伺服器上啟動哪些磁碟區群組和邏輯磁碟區。

  • 透過在指令中指定標記,覆寫全域組態檔案中的設定。

可以使用標記來代替接受下列各項的任何指令行 LVM 物件參考:

  • 物件清單

  • 單一物件,只要標記展開為單一物件

在所有位置都尚不支援用標記取代物件名稱。引數展開之後,對於清單中重複的引數,系統會移除重複的引數並保留每個引數的第一個例項。

每當遇到可能不明確的引數類型時,都必須使用 at 符號 (@) 字元為標記加上字首,例如 @mytag。其他情況下,是否使用 @ 隨您選擇。

5.9.2 建立 LVM2 標記的要求

將標記與 LVM 配合使用時,請考慮下列要求:

受支援的字元

LVM 標記單字可以包含 ASCII 大寫字元 A 到 Z、小寫字元 a 到 z、數字 0 到 9、底線 (_)、加號 (+)、連字號 (-) 及句點 (.)。單字不能以連字號開頭。最大長度為 128 個字元。

受支援的儲存物件

您可以標記 LVM2 實體磁碟區、磁碟區群組、邏輯磁碟區和邏輯磁碟區區段。PV 標記儲存在其磁碟區群組的中繼資料中。刪除磁碟區群組也會刪除未同步實體磁碟區中的標記。您雖然不能標記快照,但可以標記它們的來源。

無法對 LVM1 物件加標記,因為磁碟格式不支援。

5.9.3 指令行標記語法

--addtag標記資訊

將標記新增至 LVM2 儲存物件 (或對其加標記)。範例:

tux > sudo vgchange --addtag @db1 vg1
--deltag標記資訊

移除 LVM2 儲存物件的標記 (或對其取消標記)。範例:

tux > sudo vgchange --deltag @db1 vg1
--tag標記資訊

指定標記,用來縮小要啟動或取消啟動之磁碟區群組或邏輯磁碟區的清單。

如果磁碟區具有與提供的標記相符的標記,輸入以下指令可將其啟動 (範例):

tux > sudo lvchange -ay --tag @db1 vg1/vol2

5.9.4 組態檔案語法

下面幾節顯示特定使用案例的範例組態。

5.9.4.1 啟用 lvm.conf 檔案中的主機名稱標記

將以下代碼新增至 /etc/lvm/lvm.conf 檔案,以啟用主機上 /etc/lvm/lvm_<HOSTNAME>.conf 檔案中單獨定義的主機標記。

tags {
   # Enable hostname tags
   hosttags = 1
}

將啟用代碼放在主機上的 /etc/lvm/lvm_<HOSTNAME>.conf 檔案中。請參閱第 5.9.4.3 節 「定義啟動行為」

5.9.4.2 為 lvm.conf 檔案中的主機名稱定義標記

tags {

   tag1 { }
      # Tag does not require a match to be set.

   tag2 {
      # If no exact match, tag is not set.
      host_list = [ "hostname1", "hostname2" ]
   }
}

5.9.4.3 定義啟動行為

您可以修改 /etc/lvm/lvm.conf 檔案,根據標記啟動 LVM 邏輯磁碟區。

在文字編輯器中,將以下代碼新增至該檔案:

  activation {
      volume_list = [ "vg1/lvol0", "@database" ]
  }

以您的標記取代 @database。使用 "@*" 可使標記與主機上設定的任何標記相符。

啟用指令會比對磁碟區群組與邏輯磁碟區中繼資料中設定的 VGNAMEVGNAME/LVNAME 或 @TAG。當中繼資料標記相符時,磁碟區群組或邏輯磁碟區才會啟動。如果沒有相符標記,預設不會啟用任何項目。

如果沒有 volume_list 並且主機上定義了標記,則僅當主機標記與中繼資料標記相符時,磁碟區群組或邏輯磁碟區才會啟用。

如果 volume_list 已定義但為空白,並且主機上未定義任何標記,則不會啟用。

如果未定義 volume_list,不會對 LV 的啟用實施任何限制 (允許所有)。

5.9.4.4 在多個主機名稱組態檔案中定義啟動行為

如果 lvm.conf 檔案中啟用了主機標記,您便可在主機的組態檔案 (/etc/lvm/lvm_<HOST_TAG>.conf) 中使用啟用代碼。例如,/etc/lvm/ 目錄中包含某個伺服器的兩個組態檔案:

lvm.conf
lvm_<HOST_TAG>.conf

伺服器啟動時,會載入 /etc/lvm/lvm.conf 檔案,並處理該檔案中的任何標記設定。如果定義了任何主機標記,則會載入相關的 /etc/lvm/lvm_<HOST_TAG>.conf 檔案。當它搜尋特定組態檔案項目時,將會先搜尋主機標記檔案,然後再搜尋 lvm.conf 檔案,並在找到第一個相符項時停止搜尋。在 lvm_<HOST_TAG>.conf 檔案中,使用與標記設定順序相反的順序。如此會先搜尋最後設定之標記的檔案。在主機標記檔案中設定的新標記將觸發其他組態檔案的載入。

5.9.5 將標記用於叢集中的簡單啟用控制

/etc/lvm/lvm.conf 檔案中啟用 hostname_tags 選項,可以設定簡單的主機名稱啟用控制。在叢集中的每台機器上使用相同的檔案,使之成為全域設定。

  1. 在文字編輯器中,將以下代碼新增至 /etc/lvm/lvm.conf 檔案:

    tags {
       hostname_tags = 1
    }
  2. 將該檔案複製到叢集中的所有主機上。

  3. 在叢集的任何機器中,將 db1 新增至啟動 vg1/lvol2 的機器清單:

    tux > sudo lvchange --addtag @db1 vg1/lvol2
  4. db1 伺服器上,輸入以下指令以將其啟動:

    tux > sudo lvchange -ay vg1/vol2

5.9.6 使用標記啟動叢集中的偏好主機

本節中的範例示範如何透過兩種方法實現下列目的:

  • 僅在資料庫主機 db1db2 上啟動磁碟區群組 vg1

  • 僅在檔案伺服器主機 fs1 上啟動磁碟區群組 vg2

  • 起初,在檔案伺服器備份主機 fsb1 上不啟動任何項目,但是讓它準備好接管檔案伺服器主機 fs1 的工作。

5.9.6.1 選項 1:在主機之間複製的集中式管理與靜態組態

下面的解決方案會在多個主機之間複製單一組態檔案。

  1. @database 標記新增至磁碟區群組 vg1 的中繼資料。在終端機主控台中,輸入

    tux > sudo vgchange --addtag @database vg1
  2. @fileserver 標記新增至磁碟區群組 vg2 的中繼資料。在終端機主控台中,輸入

    tux > sudo vgchange --addtag @fileserver vg2
  3. 在文字編輯器中,使用以下代碼修改 /etc/lvm/lvm.conf 檔案,以定義 @database@fileserver@fileserverbackup 標記。

    tags {
       database {
          host_list = [ "db1", "db2" ]
       }
       fileserver {
          host_list = [ "fs1" ]
       }
       fileserverbackup {
          host_list = [ "fsb1" ]
       }
    }
    
    activation {
       # Activate only if host has a tag that matches a metadata tag
       volume_list = [ "@*" ]
    }
  4. 將修改後的 /etc/lvm/lvm.conf 檔案複製到四部主機:db1db2fs1fsb1

  5. 如果檔案伺服器主機停機,您可在任何節點上的終端機主控台中輸入以下指令,來啟動 fsb1 上的 vg2

    tux > sudo vgchange --addtag @fileserverbackup vg2
    tux > sudo vgchange -ay vg2

5.9.6.2 選項 2:本地化的管理與組態

在下面的解決方案中,每部主機都在本地保留要啟動哪些磁碟區類別的相關資訊。

  1. @database 標記新增至磁碟區群組 vg1 的中繼資料。在終端機主控台中,輸入

    tux > sudo vgchange --addtag @database vg1
  2. @fileserver 標記新增至磁碟區群組 vg2 的中繼資料。在終端機主控台中,輸入

    tux > sudo vgchange --addtag @fileserver vg2
  3. 啟用 /etc/lvm/lvm.conf 檔案中的主機標記:

    1. 在文字編輯器中,使用以下代碼修改 /etc/lvm/lvm.conf 檔案,以啟用主機標記組態檔案。

      tags {
         hosttags = 1
      }
    2. 將修改後的 /etc/lvm/lvm.conf 檔案複製到四部主機:db1db2fs1fsb1

  4. 在主機 db1 上,建立資料庫主機 db1 的啟動組態檔案。在文字編輯器中,建立 /etc/lvm/lvm_db1.conf 檔案並新增以下代碼:

    activation {
       volume_list = [ "@database" ]
    }
  5. 在主機 db2 上,建立資料庫主機 db2 的啟動組態檔案。在文字編輯器中,建立 /etc/lvm/lvm_db2.conf 檔案並新增以下代碼:

    activation {
       volume_list = [ "@database" ]
    }
  6. 在主機 fs1 上,建立檔案伺服器主機 fs1 的啟動組態檔案。在文字編輯器中,建立 /etc/lvm/lvm_fs1.conf 檔案並新增以下代碼:

    activation {
       volume_list = [ "@fileserver" ]
    }
  7. 如果檔案伺服器主機 fs1 停機,要將備用檔案伺服器主機 fsb1 做為檔案伺服器啟動:

    1. 在主機 fsb1 上,建立主機 fsb1 的啟動組態檔案。在文字編輯器中,建立 /etc/lvm/lvm_fsb1.conf 檔案並新增以下代碼:

      activation {
         volume_list = [ "@fileserver" ]
      }
    2. 在終端機主控台中,輸入下列其中一個指令:

      tux > sudo vgchange -ay vg2
      tux > sudo vgchange -ay @fileserver

6 LVM 磁碟區快照

邏輯磁碟區管理員 (LVM) 邏輯磁碟區快照是一種寫入時複製技術,它會監控現有磁碟區資料區塊的變更,以便在對其中一個區塊執行寫入操作時,將建立快照時區塊的值複製到快照磁碟區。使用這種方式便會保留一份時間點資料,直到快照磁碟區被刪除。

6.1 瞭解磁碟區快照

檔案系統快照包含關於自身的中繼資料,以及在建立快照後已變更之來源邏輯磁碟區的資料區塊。透過快照存取資料時,您會看到來源邏輯磁碟區的時間點副本。您無需從備份媒體還原資料,或是覆寫已變更的資料。

重要
重要:掛接具有快照的磁碟區

在快照的存留期間,必須先掛接快照,然後才能掛接其來源邏輯磁碟區。

LVM 磁碟區快照可用於從檔案系統的時間點檢視建立備份。您可以實時建立快照,建立後它會一直保留,直到您將它刪除。您可以從快照備份檔案系統,而磁碟區本身仍可繼續供使用者使用。快照最初包含自身相關的一些中繼資料,但不包含來源邏輯磁碟區的實際資料。快照會使用寫入時複製技術偵測原始資料區塊中發生的資料變更。當在快照磁碟區中拍攝某個區塊的快照時,它會複製所包含的值,然後允許在來源區塊中儲存新的資料。隨著來源邏輯磁碟區上有更多區塊變更其原始值,快照大小會不斷增大。

調整快照大小時,請考慮來源邏輯磁碟區中將會變更的資料量,以及要保留快照的時間。根據來源邏輯磁碟區大小、您打算保留快照的時間,以及在快照存留期間預期要變更的資料區塊數,您為快照磁碟區配置的空間容量可能會有所不同。快照磁碟區一經建立,就無法調整大小。建議在建立快照磁碟區時,將其大小設定成約為原始邏輯磁碟區的 10%。如果您預測在刪除快照前,來源邏輯磁碟區中的每個區塊都至少會變更一次,則快照磁碟區大小至少應不小於來源邏輯磁碟區的容量加上儲存快照磁碟區相關中繼資料所需的一些額外空間。如果資料變更並不頻繁,或者預計的存留期足夠簡短,所需的空間就會減少。

在 LVM2 中,快照預設為讀/寫模式。當您直接將資料寫入快照時,該區塊在例外表格中會標記為已使用,因此不會從來源邏輯磁碟區中複製。您可以掛接快照磁碟區,並透過直接將資料寫入快照磁碟區的方式來測試應用程式的變更。您可以透過卸下快照,移除快照,然後重新掛接來源邏輯磁碟區,輕鬆丟棄變更。

在虛擬客體環境中,您可以如同在實體伺服器上一般,對在伺服器磁碟上建立的 LVM 邏輯磁碟區使用快照功能。

在虛擬主機環境中,您可以使用快照功能來備份虛擬機器的儲存後端,或測試對虛擬機器影像進行的變更 (例如針對修補程式或升級進行的變更),而不必修改來源邏輯磁碟區。虛擬機器必須使用 LVM 邏輯磁碟區做為其儲存後端,而不應使用虛擬磁碟檔案。您可以掛接 LVM 邏輯磁碟區,並將它用做檔案型磁碟來儲存虛擬機器影像,您也可以指定 LVM 邏輯磁碟區做為實體磁碟,將它做為區塊裝置向其中寫入資料。

從 SLES 11 SP3 開始,LVM 邏輯磁碟區快照可以簡易佈建。如果您建立沒有指定大小的快照,系統就會使用簡易佈建。建立為簡易磁碟區的快照會視需要使用簡易池中的空間。簡易快照磁碟區的特性與任何其他簡易磁碟區相同。您可以獨立啟動磁碟區、擴充磁碟區、重新命名磁碟區、移除磁碟區,甚至可以建立磁碟區的快照。

重要
重要:叢集中簡易佈建的磁碟區

若要在叢集中使用簡易佈建的快照,來源邏輯磁碟區及其快照必須在單個叢集資源中管理。如此,該磁碟區及其快照便可永遠獨佔地掛接在同一個節點上。

對快照的操作完成後,請務必將其從系統中移除。隨著來源邏輯磁碟區上資料區塊的不斷變更,快照終將完全填滿。快照填滿時就會處於停用狀態,導致您無法重新裝載來源邏輯磁碟區。

如果您為一個來源邏輯磁碟區建立了多個快照,在移除這些快照時,請採用最後建立的最先刪除的順序。

6.2 使用 LVM 建立 Linux 快照

邏輯磁碟區管理員 (LVM) 可用於建立檔案系統的快照。

開啟終端機主控台,然後輸入

tux > sudo lvcreate -s [-L <size>] -n SNAP_VOLUME SOURCE_VOLUME_PATH

如果不指定大小,快照會建立為簡易快照。

例如:

tux > sudo lvcreate -s -L 1G -n linux01-snap /dev/lvm/linux01

則快照建立為 /dev/lvm/linux01-snap 磁碟區。

6.3 監控快照

開啟終端機主控台,然後輸入

tux > sudo lvdisplay SNAP_VOLUME

例如:

tux > sudo lvdisplay /dev/vg01/linux01-snap

--- Logical volume ---
  LV Name                /dev/lvm/linux01
  VG Name                vg01
  LV UUID                QHVJYh-PR3s-A4SG-s4Aa-MyWN-Ra7a-HL47KL
  LV Write Access        read/write
  LV snapshot status     active destination for /dev/lvm/linux01
  LV Status              available
  # open                 0
  LV Size                80.00 GB
  Current LE             1024
  COW-table size         8.00 GB
  COW-table LE           512
  Allocated to snapshot  30%
  Snapshot chunk size    8.00 KB
  Segments               1
  Allocation             inherit
  Read ahead sectors     0
  Block device           254:5

6.4 刪除 Linux 快照

開啟終端機主控台,然後輸入

tux > sudo lvremove SNAP_VOLUME_PATH

例如:

tux > sudo lvremove /dev/lvmvg/linux01-snap

6.5 在虛擬主機上使用虛擬機器的快照

使用 LVM 邏輯磁碟區做為虛擬機器的後端儲存,可為基礎裝置管理提供彈性,例如,可讓您更輕鬆地移動儲存物件、建立快照和備份資料。您可以掛接 LVM 邏輯磁碟區,並將它用做檔案型磁碟來儲存虛擬機器影像,您也可以指定 LVM 邏輯磁碟區做為實體磁碟,將它做為區塊裝置向其中寫入資料。您可以在 LVM 邏輯磁碟區上建立虛擬磁碟影像,然後建立 LVM 的快照。

您可以利用快照的讀/寫功能為虛擬機器建立多個不同例項,以使變更針對特定虛擬機器例項的快照進行。您可以在 LVM 邏輯磁碟區上建立虛擬磁碟影像、建立來源邏輯磁碟區的快照,以及修改特定虛擬機器例項的快照。您可以建立來源邏輯磁碟區的另一個快照,並為另一個不同的虛擬機器例項修改該快照。各虛擬機器例項的大部分資料與影像一起儲存在來源邏輯磁碟區上。

在客體環境中,您還可以利用快照的讀/寫功能保留虛擬磁碟影像,同時測試修補程式或升級。您需要為包含影像的 LVM 磁碟區建立一個快照,然後在快照位置執行虛擬機器。來源邏輯磁碟區將保持不變,對機器的所有變更均會寫入快照。為了恢復到虛擬機器影像的來源邏輯磁碟區,您需要關閉虛擬機器,然後從來源邏輯磁碟區中移除快照。為了重新開始,您需要重新建立快照,掛接該快照,然後在快照影像上重新啟動虛擬機器。

以下程序將使用檔案型虛擬磁碟影像和 Xen 監管程式。對於在 SUSE Linux Enterprise 平台上執行的其他監管程式 (例如 KVM),您可以調整本節中的程序。若要從快照磁碟區中執行檔案型虛擬機器影像:

  1. 確定已掛接包含檔案型虛擬機器影像的來源邏輯磁碟區,例如在掛接點 /var/lib/xen/images/<IMAGE_NAME> 處掛接。

  2. 為具有足夠空間來儲存預期差異的 LVM 邏輯磁碟區建立快照。

    tux > sudo lvcreate -s -L 20G -n myvm-snap /dev/lvmvg/myvm

    如果不指定大小,快照會建立為簡易快照。

  3. 建立一個用來掛接快照磁碟區的掛接點。

    tux > sudo mkdir -p /mnt/xen/vm/myvm-snap
  4. 在您建立的掛接點掛接快照磁碟區。

    tux > sudo mount -t auto /dev/lvmvg/myvm-snap /mnt/xen/vm/myvm-snap
  5. 在文字編輯器中,複製來源虛擬機器的組態檔案,修改指向所掛接快照磁碟區上的檔案型影像檔案的路徑,然後儲存檔案,例如 /etc/xen/myvm-snap.cfg

  6. 使用虛擬機器的掛接快照磁碟區啟動虛擬機器。

    tux > sudo xm create -c /etc/xen/myvm-snap.cfg
  7. (選擇性) 移除快照,然後在來源邏輯磁碟區上使用未變更的虛擬機器影像。

    tux > sudo umount /mnt/xenvms/myvm-snap
    tux > sudo lvremove -f /dev/lvmvg/mylvm-snap
  8. (選擇性) 根據需要重複此程序。

6.6 將快照與來源邏輯磁碟區合併以回復變更或復原至先前的狀態

如果您需要將磁碟區上的資料復原或還原至先前的狀態,快照可能非常有用。例如,您可能需要回復由於管理員錯誤或是失敗或不需要的套件安裝或升級所導致的資料變更。

您可以使用 lvconvert --merge 指令回復對 LVM 邏輯磁碟區進行的變更。合併程序會按如下所述的方式開始:

  • 如果來源邏輯磁碟區和快照磁碟區均未開啟,合併將立即開始。

  • 如果來源邏輯磁碟區或快照磁碟區已開啟,合併會在來源邏輯磁碟區或快照磁碟區已啟動且都關閉的情況第一次發生時開始。

  • 如果來源邏輯磁碟區不能關閉 (例如根檔案系統),合併將延遲到下次伺服器重新開機且來源邏輯磁碟區處於啟動狀態時開始。

  • 如果來源邏輯磁碟區包含虛擬機器影像,您必須關閉虛擬機器,取消啟動來源邏輯磁碟區和快照磁碟區 (透過依該順序將其卸下),然後再發出合併指令。因為來源邏輯磁碟區會自動重新掛接,並且合併完成時會刪除快照磁碟區,因此,在合併完成之前,您不應重新啟動虛擬機器。在合併完成之後,您便可將產生的邏輯磁碟區用於虛擬機器。

合併開始後,該程序將在伺服器重新啟動之後繼續進行,直到完成為止。當正在進行合併時,您不能為來源邏輯磁碟區建立新快照。

當正在進行合併時,針對來源邏輯磁碟區的讀取或寫入操作會透明地重新導向至正在合併的快照。這使得使用者能夠立即檢視和存取資料,就如建立快照時一樣。他們不需要等到合併完成。

合併完成時,來源邏輯磁碟區包含的資料為快照建立時的資料加上合併開始後的任何資料變更。產生的邏輯磁碟區具有來源邏輯磁碟區的名稱、次要編號和 UUID。來源邏輯磁碟區會自動重新掛接,並且會移除快照磁碟區。

  1. 開啟終端機主控台,然後輸入

    tux > sudo lvconvert --merge  [-b] [-i SECONDS] [SNAP_VOLUME_PATH[...snapN]|@VOLUME_TAG]

    您可以在指令行上指定一或多個快照。您也可以使用相同磁碟區標記來標記多個來源邏輯磁碟區,然後在指令行上指定 @<VOLUME_TAG>。已標記磁碟區的快照會合併到它們各自的來源邏輯磁碟區中。如需標記邏輯磁碟區的的資訊,請參閱第 5.9 節 「標記 LVM2 儲存物件」

    選項包括:

    -b, --background

    在背景中執行精靈。這允許以平行方式同時合併多個指定的快照。

    -i, --interval <SECONDS>

    按固定間隔以百分比形式報告進度。請以秒為單位指定間隔。

    如需此指令的詳細資訊,請參閱 lvconvert(8) man 頁面。

    例如:

    tux > sudo lvconvert --merge /dev/lvmvg/linux01-snap

    此指令會將 /dev/lvmvg/linux01-snap 合併到其來源邏輯磁碟區中。

    tux > sudo lvconvert --merge @mytag

    如果 lvol1lvol2lvol3 全都標記了 mytag,每個快照磁碟區將按順序與其各自的來源邏輯磁碟區合併;即先合併 lvol1,然後是 lvol2,最後是 lvol3。如果指定了 --background 選項,各個已標記邏輯磁碟區的快照將以平行方式同時合併。

  2. (選擇性) 如果來源邏輯磁碟區和快照磁碟區均已開啟並且兩者都可以關閉,您可以手動取消啟動來源邏輯磁碟區,然後再將其啟動,讓合併立即開始。

    tux > sudo umount ORIGINAL_VOLUME
    tux > sudo lvchange -an ORIGINAL_VOLUME
    tux > sudo lvchange -ay ORIGINAL_VOLUME
    tux > sudo mount ORIGINAL_VOLUME MOUNT_POINT

    例如:

    tux > sudo umount /dev/lvmvg/lvol01
    tux > sudo lvchange -an /dev/lvmvg/lvol01
    tux > sudo lvchange -ay /dev/lvmvg/lvol01
    tux > sudo mount /dev/lvmvg/lvol01 /mnt/lvol01
  3. (選擇性) 如果來源邏輯磁碟區和快照磁碟區均已開啟,但來源邏輯磁碟區不能關閉 (例如檔案系統),您可以重新啟動伺服器並掛接來源邏輯磁碟區,讓合併在重新啟動之後立即開始。

第 III 部分 軟體 RAID

  • 7 軟體 RAID 組態
  • RAID (獨立磁碟容錯陣列,Redundant Array of Independent Disks) 的用途是將數個硬碟分割區組合成一個大型「虛擬」硬碟,以達最佳化效能、資料安全性或是兩者兼具的功能。大部分 RAID 控制器使用 SCSI 通訊協定,因為它可利用比 IDE 通訊協定更有效的方式處理較大量的硬碟,並且更適合指令的平行處理。有部分的 RAID 控制器支援 IDE 或 SATA 硬碟。軟體 RAID 可提供 RAID 系統的優點,卻不需要硬體 RAID 控制器的額外成本。但是這需要一些 CPU 時間,而且有一些記憶體需求,使它不適用於極高效能的電腦。

  • 8 設定根分割區的軟體 RAID
  • SUSE Linux Enterprise Server 中,裝置對應程式 RAID 工具已整合到 YaST 磁碟分割程式中。您可以在安裝時使用磁碟分割程式,為包含根 (/) 分割區的系統裝置建立一個軟體 RAID。不能將 /boot 分割區儲存在除 RAID 1 以外的 RAID 分割區上。

  • 9 建立軟體 RAID 10 裝置
  • 本章說明如何設定巢狀和複雜 RAID 10 裝置。RAID 10 裝置由巢狀的 RAID 1 (鏡像) 和 RAID 0 (分割) 陣列組成。巢狀 RAID 可以設定為分割的鏡像 (RAID 1+0) 或鏡像的等量磁碟區 (RAID 0+1)。複雜 RAID 10 設定支援更高的資料備援層級,因而還結合了鏡像和等量磁碟區及額外的資料安全性。

  • 10 建立降級 RAID 陣列
  • 降級陣列是指其中某些裝置遺失的陣列。只有 RAID 1、RAID 4、RAID 5 和 RAID 6 支援降級陣列。這些 RAID 類型具有容錯功能,可容許遺失某些裝置。降級陣列通常發生在裝置故障時。也可能會出於某種目的而建立降級陣列。

  • 11 使用 mdadm 調整軟體 RAID 陣列的大小
  • 本章描述如何使用「多裝置管理」(mdadm(8)) 工具增加或減少軟體 RAID 1、4、5 或 6 裝置的大小。

  • 12 適用於 MD 軟體 RAID 的儲存機殼指示燈公用程式
  • 儲存機殼指示燈監控公用程式 (ledmon) 和指示燈控制 (ledctl) 公用程式都是 Linux 使用者空間應用程式,可以使用多種介面和通訊協定來控制儲存機殼指示燈。主要用途是視覺化顯示透過 mdadm 公用程式建立之 Linux MD 軟體 RAID 裝置的狀態。ledmon 精靈會監控磁碟機陣列的狀態並更新磁碟機指示燈的狀態。ledctl 公用程式可讓您設定所指定裝置的指示燈模式。

7 軟體 RAID 組態

RAID (獨立磁碟容錯陣列,Redundant Array of Independent Disks) 的用途是將數個硬碟分割區組合成一個大型「虛擬」硬碟,以達最佳化效能、資料安全性或是兩者兼具的功能。大部分 RAID 控制器使用 SCSI 通訊協定,因為它可利用比 IDE 通訊協定更有效的方式處理較大量的硬碟,並且更適合指令的平行處理。有部分的 RAID 控制器支援 IDE 或 SATA 硬碟。軟體 RAID 可提供 RAID 系統的優點,卻不需要硬體 RAID 控制器的額外成本。但是這需要一些 CPU 時間,而且有一些記憶體需求,使它不適用於極高效能的電腦。

重要
重要:叢集檔案系統上的 RAID

需要使用叢集多裝置 (叢集 MD) 來設定叢集檔案系統下的軟體 RAID。請參閱 《SUSE Linux Enterprise High Availability Extension 管理指南

SUSE Linux Enterprise 可讓您選擇將幾個硬碟組合為一個軟 RAID 系統。RAID 一詞是表示將數個硬碟結合成 RAID 系統的一些策略,每個都有不同的目標、優點及特色。這些變化通常稱為 RAID 層級

7.1 瞭解 RAID 層級

本節說明通用 RAID 層級 0、1、2、3、4、5 以及巢狀 RAID 層級。

7.1.1 RAID 0

此層級將每個檔案的區塊分散於多個磁碟,以提升您的資料存取效能。實際上,它不是 RAID,因為它不提供資料備份,但 RAID 0 已成為此系統類型的標準名稱。使用 RAID 0,就可將兩個以上的磁碟聚集在一起。效能非常好,但是如果其中一個硬碟錯誤,RAID 系統便會損毀而且資料會遺失。

7.1.2 RAID 1

此層級對資料提供足夠的安全性,因為資料是以 1:1 複製到另一個硬碟。這就是所謂的硬碟鏡像。如果其中一個磁碟損毀,另一個鏡像複製磁碟上有其內容的複本。如果所有其他磁碟都受到損害,但有一個可用,就不會危害到資料。但是,如果未偵測到損毀的情況,則損毀的資料也可能會鏡射到正確的磁碟,因而造成資料損毀。在複製過程中的寫入效能比使用單一磁碟存取時稍差一些 (慢了百分之十到二十),但是讀取存取卻較任何一般實體硬碟快得多,因為資料已複製,因此可以平行掃描。一般而言,可以說 RAID 1 比單一磁碟的讀取異動率快了將近兩倍,而且與單一磁碟的寫入異動率幾乎相同。

7.1.3 RAID 2 與 RAID 3

這些都不是一般的 RAID 實作。「層級 2」在是位元層級分割資料,而不是在區塊層級。「層級 3」提供具有專用同位磁碟的位元層級分割,但是無法同時服務多個要求。這兩個層級都很少使用。

7.1.4 RAID 4

「層級 4」提供與「層級 0」類似的區塊層級分割,並且結合專用的同位磁碟。在資料磁碟失敗時,會使用同位資料建立替代的磁碟。不過,同位磁碟可能造成寫入存取的瓶頸。儘管如此,有時還是會使用「層級 4」。

7.1.5 RAID 5

RAID 5 是在「層級 0」與「層級 1」之間效能和備用方面最佳的折衷方法。硬碟空間等於使用的磁碟數減一。使用 RAID 0 可將資料分布至各個硬碟。在其中一個分割區上建立的同位區塊是基於安全性考量。它們以 XOR 互相連結,使得系統失敗時,能夠藉由對應的同位區塊重新建構內容。使用 RAID 5,不會有一個以上的硬碟同時失敗。如果一個硬碟出現故障,必須立即更換以避免資料遺失的風險。

7.1.6 RAID 6

RAID 6 是 RAID 5 的延伸,它透過使用第二種獨立的分散式同位規劃 (雙同位) 來增加容錯能力。即使在資料復原過程中兩個硬碟都發生故障,系統也能繼續運作,且不遺失資料。

在多個磁碟機同時發生故障的情況下,RAID 6 可提供極高的資料容錯能力。它能夠處理兩個裝置的遺失,不會遺失資料。相應地,它需要 N+2 個磁碟機來儲存 N 個磁碟機的重要資料。至少需要四個裝置。

在正常模式以及有一個硬碟發生故障的模式下,RAID 6 的效能比 RAID 5 略低,但相差不多。處於雙磁碟機故障模式下時,其速度會變得很慢。RAID 6 組態需要將相當多的 CPU 時間和記憶體用於寫入操作。

表 7.1︰ 比較 RAID 5 與 RAID 6

特性

RAID 5

RAID 6

裝置數量

N+1,最小值為 3

N+2,最小值為 4

同位元

分散式,單一

分散式,兩個

效能

對寫入與重建有中等程度的影響

對連續寫入的影響比 RAID 5 要大

容錯

一個元件裝置發生故障

兩個元件裝置發生故障

7.1.7 巢狀和複雜 RAID 層級

現已開發出其他的 RAID 層級,如 RAIDn、RAID 10、RAID 0+1、RAID 30 和 RAID 50。有些是硬體廠商所建立的專用實作。建立 RAID 10 組態的範例可在第 9 章 「建立軟體 RAID 10 裝置中找到。

7.2 使用 YaST 進行軟體 RAID 組態

YaST 軟體 RAID 組態可以透過 YaST 進階磁碟分割程式完成。這個磁碟分割工具還可讓您編輯和刪除現有分割區,以及建立應該與軟體 RAID 一起使用的新分割區。下列指示適用於設定 RAID 層級 0、1、5 和 6。設定 RAID 10 組態的方法在第 9 章 「建立軟體 RAID 10 裝置中做了說明。

  1. 啟動 YaST 並開啟磁碟分割程式

  2. 如果需要,建立應該與 RAID 組態配合使用的分割區。不要將它們格式化,也不要將分割區類型設定為 0xFD Linux RAID。使用現有分割區時,不需要變更它們的分割區類型 — YaST 會自動變更。如需詳細資訊,請參閱Book “部署指南 ”, Chapter 10 “專家分割程式”, Section 10.1 “使用進階磁碟分割程式”

    強烈建議您使用儲存在不同硬碟中的分割區,如此可降低當其中一個 (RAID 1 和 5) 損壞時遺失資料的風險,同時又可最佳化 RAID 0 的效能。

    RAID 0 至少需要兩個分割區。RAID 1 只需要兩個分割區,而 RAID 5 至少需要三個分割區。RAID 6 設定至少需要四個分割區。建議您僅使用大小相同的分割區,因為每個節區只能提供相同容量的空間做為最小的分割區。

  3. 在左側面板中,選取 RAID

    右側面板中即會開啟一份現有 RAID 組態的清單。

  4. 在 RAID 頁面的左下方,按一下新增 RAID

  5. 選取 RAID 類型,然後從可用的裝置對話方塊中新增適當數量的分割區。

    您可以選擇為您的 RAID 指定 RAID 名稱。這樣,RAID 的名稱將是 /dev/md/NAME。如需相關資訊,請參閱第 7.2.1 節 「RAID 名稱」

    RAID 5 範例組態
    圖 7.1︰ RAID 5 範例組態

    下一步繼續。

  6. 選取區塊大小,如果適用,同時選取同位演算法。最佳區塊大小視資料類型和 RAID 類型而定。如需詳細資訊,請參閱https://raid.wiki.kernel.org/index.php/RAID_setup#Chunk_sizes。如需同位演算法的詳細資訊,請使用 man 8 mdadm 搜尋 --layout 選項。如果不確定,請使用預設值。

  7. 選擇磁碟區的角色。您在此處所做的選擇只會影響即將開啟之對話方塊的預設值。它們可以在下一步中變更。如果不確定,請選擇原始磁碟區 (未格式化)

  8. 格式化選項下,選取格式化分割區,然後選取檔案系統選項功能表的內容視檔案系統而定。一般不需要變更預設值。

    掛接選項下,選取掛接分割區,然後選取掛接點。按一下Fstab 選項可為磁碟區新增特殊掛接選項。

  9. 按一下完成

  10. 下一步,確認變更有列出,然後按一下完成

重要
重要:磁碟上的 RAID

雖然使用分割程式可以在磁碟 (而不是分割區) 的頂層建立 RAID,但出於多個原因,我們不建議使用此方法。不支援在此類 RAID 上安裝開機載入程式,因此您需要使用獨立的裝置進行開機。諸如 fdiskparted 之類的工具在此類 RAID 上無法正常工作,不清楚 RAID 特定設定的人員在使用這些工具時,可能會做出錯誤的診斷或執行錯誤的動作。

7.2.1 RAID 名稱

依預設,軟體 RAID 裝置使用遵循 mdN 模式的數值名稱,其中 N 是數字。因此,可以使用 /dev/md127 形式來存取它們,並且在 /proc/mdstat/proc/partitions 中,它們也被列為 md127,但使用這些名稱不大方便。SUSE Linux Enterprise Server 提供了兩種方法來解決此問題:

提供指向裝置的具名連結

當您透過 YaST 或在指令行上使用 mdadm --create '/dev/md/ NAME' 來建立 RAID 裝置時,可以選擇為 RAID 裝置指定一個名稱。裝置名稱仍然是 mdN,但系統會建立一個連結 /dev/md/NAME

tux > ls -og /dev/md
total 0
lrwxrwxrwx 1 8 Dec  9 15:11 myRAID -> ../md127

裝置在 /proc 下仍列為 md127

提供具名裝置

如果指向裝置的具名連結不足以滿足您設定的要求,請執行下列指令將 CREATE names=yes 一行新增至 /etc/mdadm.conf

tux > sudo echo "CREATE names=yes" >> /etc/mdadm.conf

如此,系統將使用類似 myRAID 的名稱做為實際的裝置名稱。您不但可以採用 /dev/myRAID 形式存取裝置,它們在 /proc 下也會列為 myRAID。請注意,這只適用於在變更組態檔案之後設定的 RAID。作用中的 RAID 將繼續使用 mdN 名稱,直到被停止並被重新組合為止。

警告
警告:不相容的工具

可能並非所有工具都支援具名 RAID 裝置。如果某個工具需要 RAID 裝置命名為 mdN,它將無法識別具名裝置。

7.3 軟體 RAID 疑難排解

檢查 /proc/mdstat 檔案以確定 RAID 分割區是否已損毀。磁碟出現故障時,請關閉 Linux 系統並使用以相同方式磁碟分割的新硬碟來更換損壞的硬碟。然後重新啟動系統,並輸入 mdadm /dev/mdX --add /dev/sdX 指令。使用特定的裝置識別碼取代 X。這會自動將硬碟整合到 RAID 系統中,並將其完全重構 (適用於 RAID 0 以外的所有 RAID 層級)。

雖然您可以在重建期間存取所有資料,但是在完全重建 RAID 之前,可能會遇到一些效能問題。

7.3.1 修復故障磁碟之後進行復原

RAID 陣列中的磁碟可能會出於多種原因而發生故障。下面列出了最常見的原因:

  • 磁碟媒體出現問題。

  • 磁碟機控制器發生故障。

  • 與磁碟的連接斷開。

在發生磁碟媒體或控制器故障時,需要更換或維修裝置。如果未在 RAID 中設定熱備件,則需要手動干預。

對於後一種情況,可以在修復連接 (可能會自動修復) 之後,使用 mdadm 指令自動重新加入發生故障的裝置。

md/mdadm 不能可靠地判斷磁碟故障的原因,它會臆測發生了嚴重的磁碟錯誤,並一直將任何有故障的裝置視為有故障,直到明確獲知該裝置可靠。

在某些情況下 (例如,儲存裝置包含內部 RAID 陣列),連接問題往往是裝置發生故障的原因。在這種情況下,您可以告知 mdadm,在裝置出現後,可以放心地使用 --re-add 自動重新加入該裝置。為此,您可以將以下行新增到 /etc/mdadm.conf 中:

POLICY action=re-add

請注意,僅當 udev 規則導致 mdadm -I DISK_DEVICE_NAME 在自發性出現的任何裝置上執行 (預設行為),並且已設定 write-intent 點陣圖 (預設已設定) 時,才會在裝置重新出現後自動重新加入該裝置。

如果您希望此規則只會套用至某些裝置而不會套用至其他一些裝置,可以將 path= 選項新增到 /etc/mdadm.conf 中的 POLICY 行,以限制為只對所選裝置執行非預設動作。可以使用萬用字元來識別裝置群組。如需詳細資訊,請參閱 man 5 mdadm.conf

7.4 更多資訊

可在下列網址的 HOWTO 中找到組態指南及軟體 RAID 的詳細資訊:

  • Linux RAID Wikihttps://raid.wiki.kernel.org/

  • /usr/share/doc/packages/mdadm/Software-RAID.HOWTO.html 檔案中的The Software RAID HOWTO (軟體 RAID HOWTO)

此外,您還可參考 Linux RAID 郵寄清單,如 http://marc.info/?l=linux-raid 上的 linux-raid

8 設定根分割區的軟體 RAID

SUSE Linux Enterprise Server 中,裝置對應程式 RAID 工具已整合到 YaST 磁碟分割程式中。您可以在安裝時使用磁碟分割程式,為包含根 (/) 分割區的系統裝置建立一個軟體 RAID。不能將 /boot 分割區儲存在除 RAID 1 以外的 RAID 分割區上。

8.1 將軟體 RAID 裝置用於根分割區的先決條件

確保您的組態符合下列要求:

  • 您需要兩個硬碟來建立 RAID 1 鏡像裝置。這兩個硬碟的大小應相似。RAID 假設為較小磁碟機的大小。區塊儲存裝置可以是本地 (機器中或直接連接到機器上)、光纖通道儲存子系統或 iSCSI 儲存子系統的任意組合。

  • 如果在 MBR 中安裝開機載入程式,則不需要為 /boot 建立獨立分割區。如果無法在 MBR 中安裝開機載入程式,則 /boot 需要位於獨立的分割區上。

  • 對於 UEFI 機器,需要設定專用的 /boot/efi 分割區。該分割區需格式化為 VFAT,可以位於 RAID 1 裝置上,以防止使用 /boot/efi 的實體磁碟發生故障時出現開機問題。

  • 如果您使用的是硬體 RAID 裝置,請不要嘗試在其上執行軟體 RAID。

  • 如果您使用的是 iSCSI 目標裝置,則需要先啟用 iSCSI 啟動器支援,然後再建立 RAID 裝置。

  • 如果儲存子系統在伺服器與要用於軟體 RAID 的裝置 (直接附加的本地裝置、光纖通道裝置或 iSCSI 裝置) 之間提供了多重 I/O 路徑,則需要先啟用多重路徑支援,然後才能建立 RAID 裝置。

8.2 為系統設定根 (/) 分割區的軟體 RAID 裝置

  1. 使用 YaST 啟動安裝並依照Book “部署指南 ”, Chapter 8 “安裝步驟”所述操作,直到建議的分割方式步驟為止。

  2. 按一下進階磁碟分割程式開啟該自訂分割工具。

  3. (選擇性) 如果有要使用的 iSCSI 目標裝置,則需要從螢幕右下方的區段中選擇設定 ›  設定 iSCSI,以啟用 iSCSI 啟動器軟體。如需更多詳細資料,請參閱第 14 章 「IP 網路上的大型儲存裝置:iSCSI

  4. (選擇性) 如果要使用的裝置存在多個 I/O 路徑,您需要從螢幕右下方的區段中選擇設定 ›  設定多重路徑 › ,以啟用多重路徑支援。

  5. (選擇性) 如果您既未設定 iSCSI 又未設定多重路徑,則會顯示預設的建議設定。請按一下重新掃描裝置刪除它們。

  6. 為要用於軟體 RAID 的每台裝置設定 0xFD Linux RAID 格式。應該為 //boot/efi 或交換分割區使用 RAID。

    1. 在左側面板中,選取硬碟,然後選取要使用的裝置,再按一下新增分割區

    2. 新分割區類型下,選取主分割區,然後按下一步

    3. 新分割區大小下,指定要使用的大小,然後按下一步

    4. 角色下,選擇原始磁碟區 (未格式化)

    5. 選取不格式化,並將檔案系統 ID 設定為 0xFD Linux RAID

    6. 按一下完成,然後對第二個分割區重複這些指示。

      Image
  7. / 分割區建立 RAID 裝置。

    1. 在左側面板中,選取 RAID,然後選取新增 RAID

    2. / 分割區設定所需的 RAID 類型,並將 RAID 名稱設為 system

    3. 可用的裝置區段中選取您在上一步中準備的兩個 RAID 裝置,並新增它們。

      Image

      下一步繼續。

    4. RAID 選項下的下拉式方塊中選取區塊大小。保留預設值是安全的做法。

    5. 角色下選取作業系統,然後按一下完成

    6. 選取檔案系統並將掛接點設為 /。按一下 完成 以結束此對話方塊。

  8. 該軟體 RAID 裝置便會受裝置對應程式的管理,並會在 /dev/md/system 路徑下建立一個裝置。

  9. (選擇性) 對於 UEFI 機器,請使用類似的步驟來建立掛接 /boot/efi 的分割區。請記住,RAID 1 僅支援 /boot/efi,需要使用 FAT 檔案系統來格式化該分割區。

    RAID 上的 /、/boot/efi 和交換分割區
    圖 8.1︰ RAID 上的 //boot/efi 和交換分割區
  10. 按一下接受結束磁碟分割程式。

    新建議會出現在建議的分割方式頁面上。

  11. 繼續安裝。對於包含獨立 /boot/efi 分割區的 UEFI 機器,請在安裝設定畫面上按一下開機,然後將開機載入程式設定為 GRUB2 for EFI。檢查啟用安全開機支援選項是否已啟用。

    每次將伺服器重新開機時,裝置對應程式都會在開機時啟動,以便讓系統能夠自動辨識軟體 RAID,並啟動根 (/) 分割區上的作業系統。

9 建立軟體 RAID 10 裝置

本章說明如何設定巢狀和複雜 RAID 10 裝置。RAID 10 裝置由巢狀的 RAID 1 (鏡像) 和 RAID 0 (分割) 陣列組成。巢狀 RAID 可以設定為分割的鏡像 (RAID 1+0) 或鏡像的等量磁碟區 (RAID 0+1)。複雜 RAID 10 設定支援更高的資料備援層級,因而還結合了鏡像和等量磁碟區及額外的資料安全性。

9.1 使用 mdadm 建立巢狀 RAID 10 裝置

巢狀 RAID 裝置由 RAID 陣列構成,它使用其他 RAID 陣列取代實體磁碟做為其基本元素。此組態的目標是提高 RAID 的效能和容錯能力。YaST 不支援設定巢狀 RAID 層級,但您可以使用 mdadm 指令行工具來設定。

根據巢狀的順序,可以設定兩個不同的巢狀 RAID。本文使用了下列術語:

  • RAID 1+0:: 首先建立 RAID 1 (鏡像) 陣列,然後再結合以形成 RAID 0 (分割) 陣列。

  • RAID 0+1:: 首先建立 RAID 0 (分割) 陣列,然後再結合以形成 RAID 1 (鏡像) 陣列。

下表描述 RAID 10 巢狀化為 1+0 與 0+1 的優點和缺點。假設使用的儲存物件位於不同的磁碟,且每個物件都有專屬的 I/O 功能。

表 9.1︰ 巢狀 RAID 層級

RAID 層級

描述

效能與容錯

10 (1+0)

使用 RAID 1 (鏡像) 陣列建立 RAID 0 (分割)

RAID 1+0 提供高層級的 I/O 效能、資料備援及磁碟容錯。因為 RAID 0 中的每個成員裝置都是個別鏡像的,所以只要發生故障的磁碟處於不同的鏡像複製,這些故障磁碟都可進行容錯,且保持資料可用。

可以選擇性為每個基礎鏡像複製陣列設定備用,或者為服務所有鏡像複製的備用群組設定所用備用。

10 (0+1)

使用 RAID 0 (分割) 陣列建立 RAID 1 (鏡像)

RAID 0+1 提供高層級的 I/O 效能和資料備援,但容錯能力略低於 RAID 1+0。如果同側鏡像複製中的多個磁碟發生故障,則另一側的鏡像複製仍可用。但是,如果兩側鏡像複製中的磁碟同時發生故障,則會遺失所有資料。

此解決方案的磁碟容錯能力低於 1+0 解決方案,但如果要執行維護操作或維護其他位置的鏡像複製,則可使鏡像複製的一側完全處於離線狀態,此時仍可擁有儲存裝置的完整功能。同樣地,如果兩個位置之間斷開連接,則每個位置都可獨立進行操作。但如果分割經過鏡像處理的區段,則上述說法不正確,因為鏡像複製的管理處於較低層級。

如果裝置發生故障,則位於那側的鏡像複製將失敗,因為 RAID 1 不具容錯能力。建立新 RAID 0 以取代發生故障的那一側,然後重新同步鏡像複製。

9.1.1 使用 mdadm 建立巢狀 RAID 10 (1+0)

建立巢狀 RAID 1+0 的方法是:建立兩個或更多 RAID 1 (鏡像) 裝置,然後將其做為元件裝置用於 RAID 0。

重要
重要:多重路徑

如果需要管理與裝置的多個連接,您必須在設定 RAID 裝置之前設定多重路徑 I/O。如需更多資訊,請參閱第 17 章 「管理裝置的多重路徑 I/O

此節的程序使用下表顯示的裝置名稱。請確保將裝置名稱修改為自己裝置的名稱。

表 9.2︰ 經由巢狀化建立 RAID 10 (1+0) 的案例

Raw 裝置

RAID 1 (鏡像)

RAID 1+0 (分割的鏡像)

/dev/sdb1
/dev/sdc1

/dev/md0

/dev/md2

/dev/sdd1
/dev/sde1

/dev/md1

  1. 開啟終端機主控台。

  2. 如果需要,使用 parted 之類的磁碟分割程式建立四個大小相同的 0xFD Linux RAID 分割區。

  3. 建立兩個軟體 RAID 1 裝置,每個 RAID 裝置使用兩個不同的裝置。在指令提示符下,輸入下列兩個指令:

    tux > sudo mdadm --create /dev/md0 --run --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1
    sudo mdadm --create /dev/md1 --run --level=1 --raid-devices=2 /dev/sdd1 /dev/sde1
  4. 建立巢狀 RAID 1+0 裝置。在命令提示符處,使用您在上一步中建立的軟體 RAID 1 裝置輸入以下指令:

    tux > sudo mdadm --create /dev/md2 --run --level=0 --chunk=64 \
    --raid-devices=2 /dev/md0 /dev/md1

    預設區塊大小為 64 KB。

  5. 在 RAID 1+0 裝置 /dev/md2 上建立檔案系統,例如 XFS 檔案系統:

    tux > sudo mkfs.xfs /dev/md2

    如果要使用其他檔案系統,請修改指令。

  6. 編輯 /etc/mdadm.conf 檔案,如果該檔案不存在,則請建立該檔案 (例如,透過執行 sudo vi /etc/mdadm.conf 來建立)。新增下列幾行 (如果該檔案存在,則第一行可能已存在)。

    DEVICE containers partitions
    ARRAY /dev/md0 UUID=UUID
    ARRAY /dev/md1 UUID=UUID
    ARRAY /dev/md2 UUID=UUID

    每個裝置的 UUID 可以透過以下指令來擷取:

    tux > sudo mdadm -D /dev/DEVICE | grep UUID
  7. 編輯 /etc/fstab 檔案以新增 RAID 1+0 裝置 /dev/md2 的項目。下面的範例顯示了包含 XFS 檔案系統並以 /data 做為掛接點之 RAID 裝置的一個項目。

    /dev/md2 /data xfs defaults 1 2
  8. 掛接 RAID 裝置:

    tux > sudo mount /data

9.1.2 使用 mdadm 建立巢狀 RAID 10 (0+1)

建立巢狀 RAID 0+1 的方法是:建立兩到四個 RAID 0 (分割) 裝置,然後將其進行鏡像處理並做為元件裝置用於 RAID 1。

重要
重要:多重路徑

如果需要管理與裝置的多個連接,您必須在設定 RAID 裝置之前設定多重路徑 I/O。如需更多資訊,請參閱第 17 章 「管理裝置的多重路徑 I/O

在此組態中,無法為基礎 RAID 0 裝置指定備用裝置,因為 RAID 0 不能容許裝置遺失。如果鏡像一側的裝置發生故障,您必須建立取代的 RAID 0 裝置,然後將其新增至鏡像。

此節的程序使用下表顯示的裝置名稱。請確保將裝置名稱修改為自己裝置的名稱。

表 9.3︰ 經由巢狀化建立 RAID 10 (0+1) 的案例

Raw 裝置

RAID 0 (分割)

RAID 0+1 (鏡像的分割)

/dev/sdb1
/dev/sdc1

/dev/md0

/dev/md2

/dev/sdd1
/dev/sde1

/dev/md1

  1. 開啟終端機主控台。

  2. 如果需要,使用 parted 之類的磁碟分割程式建立四個大小相同的 0xFD Linux RAID 分割區。

  3. 建立兩個軟體 RAID 0 裝置,每個 RAID 0 裝置使用兩個不同的裝置。在指令提示符下,輸入下列兩個指令:

    tux > sudo mdadm --create /dev/md0 --run --level=0 --chunk=64 \
    --raid-devices=2 /dev/sdb1 /dev/sdc1
    sudo mdadm --create /dev/md1 --run --level=0 --chunk=64 \
    --raid-devices=2 /dev/sdd1 /dev/sde1

    預設區塊大小為 64 KB。

  4. 建立巢狀 RAID 0+1 裝置。在命令提示符處,使用您在上一步中建立的軟體 RAID 0 裝置輸入以下指令:

    tux > sudo mdadm --create /dev/md2 --run --level=1 --raid-devices=2 /dev/md0 /dev/md1
  5. 在 RAID 1+0 裝置 /dev/md2 上建立檔案系統,例如 XFS 檔案系統:

    tux > sudo mkfs.xfs /dev/md2

    如果要使用其他檔案系統,請修改指令。

  6. 編輯 /etc/mdadm.conf 檔案,如果該檔案不存在,則請建立該檔案 (例如,透過執行 sudo vi /etc/mdadm.conf 來建立)。新增下列幾行 (如果該檔案存在,則第一行可能也已存在)。

    DEVICE containers partitions
    ARRAY /dev/md0 UUID=UUID
    ARRAY /dev/md1 UUID=UUID
    ARRAY /dev/md2 UUID=UUID

    每個裝置的 UUID 可以透過以下指令來擷取:

    tux > sudo mdadm -D /dev/DEVICE | grep UUID
  7. 編輯 /etc/fstab 檔案以新增 RAID 1+0 裝置 /dev/md2 的項目。下面的範例顯示了包含 XFS 檔案系統並以 /data 做為掛接點之 RAID 裝置的一個項目。

    /dev/md2 /data xfs defaults 1 2
  8. 掛接 RAID 裝置:

    tux > sudo mount /data

9.2 建立複雜 RAID 10

YaST (以及帶 --level=10 選項的 mdadm) 可建立單個複雜軟體 RAID,它結合了 RAID 0 (等量分割) 與 RAID 1 (鏡像) 的功能。所有資料區塊的多個複本按照分割原則分佈於多個裝置之上。元件裝置的大小應相同。

複雜 RAID 10 與巢狀 RAID 10 (1+0) 的用途相似,但有以下幾處差異:

表 9.4︰ 複雜 RAID 10 與巢狀 RAID 10 的比較

特性

複雜 RAID 10

巢狀 RAID 10 (1+0)

裝置數量

允許元件裝置的數量為偶數或奇數

要求元件裝置的數量為偶數

元件裝置

視為單一 RAID 裝置進行管理

視為巢狀 RAID 裝置進行管理

等量磁區

在元件裝置近配置或遠配置中發生分割。

遠配置提供根據磁碟機數量 (而非 RAID 1 配對的數量) 調整的連續讀取輸送量。

分割跨元件裝置連續發生

多個資料複本

兩個或更多複本,最多為陣列中的裝置數

每個鏡像複製區段上的複本

熱備用裝置

單一備用可用於所有元件裝置

為每個基礎鏡像複製陣列設定備用,或者為服務所有鏡像複製的備用群組設定所用備用。

9.2.1 複雜 RAID 10 中的裝置和複本數量

設定複雜 RAID 10 陣列時,您必須指定每個資料區塊的所需複本數。複本的預設數量是 2,但該值可以是介於 2 與陣列中裝置數量的數字。

必須至少使用與指定的複本數量相同的元件裝置。但是,RAID 10 陣列中的元件裝置數不必是每個資料區塊複本數量的倍數。有效的儲存大小為裝置數量除以複本數量。

例如,如果您為使用 5 個元件裝置建立的陣列指定兩個複本,兩個不同的裝置上都會儲存每個區塊的一個複本。則所有資料的一個複本的有效儲存大小是元件裝置大小的 5/2 或 2.5 倍。

9.2.2 配置

複雜 RAID 10 設定支援 3 種不同的配置,這些配置定義在磁碟上安排資料區塊的方式。可用配置有近 (預設值)、遠和偏移。它們具有不同的效能特性,因此選擇適合您工作負載的配置很重要。

9.2.2.1 近配置

使用近配置,資料區塊的複本被分割到不同元件裝置上鄰近位置。即一個資料區塊的多個複本位於不同裝置中偏移值類似的位置。近配置是 RAID 10 的預設配置。例如,如果使用奇數數量的元件裝置和兩個資料複本,某些複本可能是裝置中的一個區塊。

複雜 RAID 10 之近配置的讀與寫效能與磁碟機數量超過其半數的 RAID 0 相似。

具有偶數數量的磁碟和兩個複本的近配置:

sda1 sdb1 sdc1 sde1
  0    0    1    1
  2    2    3    3
  4    4    5    5
  6    6    7    7
  8    8    9    9

具有奇數數量的磁碟和兩個複本的近配置:

sda1 sdb1 sdc1 sde1 sdf1
  0    0    1    1    2
  2    3    3    4    4
  5    5    6    6    7
  7    8    8    9    9
  10   10   11   11   12

9.2.2.2 遠配置

遠配置將資料分割到所有磁碟機的較前部分,然後將資料的另一複本分割到所有磁碟機的較後部分,確保區塊的所有複本位於不同的磁碟機。第二組值啟始於元件磁碟機的中間部分。

使用遠配置,複雜 RAID 10 的讀取效能與超出其全部磁碟機數量的 RAID 0 相似,但寫入效能大大低於 RAID 0,因為需要進行更多的磁碟機頭搜尋。遠配置最適用於讀密集型操作,如唯讀檔案伺服器。

RAID 10 的寫入速度與其他鏡像 RAID 類型相似 (例如 RAID 1 和使用近配置的 RAID 10),因為該檔案系統的升級程式會以一種比 raw 寫入更佳的方式排程寫入操作。使用遠配置的 RAID 10 非常適合鏡像寫入應用程式。

具有偶數數量的磁碟和兩個複本的遠配置:

sda1 sdb1 sdc1 sde1
  0    1    2    3
  4    5    6    7
  . . .
  3    0    1    2
  7    4    5    6

具有奇數數量的磁碟和兩個複本的遠配置:

sda1 sdb1 sdc1 sde1 sdf1
  0    1    2    3    4
  5    6    7    8    9
  . . .
  4    0    1    2    3
  9    5    6    7    8

9.2.2.3 偏移配置

偏移配置會複製等量磁碟區,以便指定區塊的多個副本以連續偏移配置在連續的磁碟機上。實際上,會複製每個等量磁碟區,且各副本會按一個裝置進行偏移。如果使用適當的大型區塊大小,此方式應可為遠配置提供類似的讀取特性,但是寫入特性略低。

具有偶數數量的磁碟和兩個複本的偏移配置:

sda1 sdb1 sdc1 sde1
  0    1    2    3
  3    0    1    2
  4    5    6    7
  7    4    5    6
  8    9   10   11
 11    8    9   10

具有奇數數量的磁碟和兩個複本的偏移配置:

sda1 sdb1 sdc1 sde1 sdf1
  0    1    2    3    4
  4    0    1    2    3
  5    6    7    8    9
  9    5    6    7    8
 10   11   12   13   14
 14   10   11   12   13

9.2.2.4 使用 YaST 和 mdadm 指定複本數和配置

複本數和配置可在 YaST 的同位演算法中指定,也可使用 mdadm 的 --layout 參數指定。接受的值如下:

nN

對於近配置指定 n 並以複本數取代 Nn2 是預設值,用於未設定配置和複本數的情況。

fN

對於遠配置指定 f 並以複本數取代 N

oN

對於偏移配置指定 o 並以複本數取代 N

注意
注意:複本數量

YaST 會自動為同位演算法參數提供所有可能的值供您選擇。

9.2.3 使用 YaST 磁碟分割程式建立複雜 RAID 10

  1. 啟動 YaST 並開啟磁碟分割程式。

  2. 如果需要,建立應該與 RAID 組態配合使用的分割區。不要將它們格式化,也不要將分割區類型設定為 0xFD Linux RAID。使用現有分割區時,不需要變更它們的分割區類型 — YaST 會自動變更。如需詳細資訊,請參閱Book “部署指南 ”, Chapter 10 “專家分割程式”, Section 10.1 “使用進階磁碟分割程式”

    RAID 10 至少需要四個分割區。強烈建議您使用儲存在不同硬碟上的分割區,以降低當其中一個損壞時遺失資料的風險。建議您僅使用大小相同的分割區,因為每個節區只能提供相同容量的空間做為最小的分割區。

  3. 在左側面板中,選取 RAID

    右側面板中即會開啟一份現有 RAID 組態的清單。

  4. 在 RAID 頁面的左下方,按一下新增 RAID

  5. RAID 類型下,選取RAID 10 (鏡像和分割)

    您可以選擇為您的 RAID 指定 RAID 名稱。這樣,RAID 的名稱將是 /dev/md/NAME。如需相關資訊,請參閱第 7.2.1 節 「RAID 名稱」

  6. 可用的裝置清單中,選取所需的 分割區,然後按一下新增以將它們移至選定裝置清單。

    Image
  7. (選擇性) 按一下分類以指定 RAID 陣列中各磁碟的偏好順序。

    對於新增磁碟順序很重要的 RAID 類型 (例如 RAID 10),您可以指定將使用裝置的順序。這將確保一半的陣列在一個磁碟子系統上,另一半陣列在另一個磁碟子系統上。例如,如果一個磁碟子系統失敗,系統將從第二個磁碟子系統繼續執行。

    1. 依次選取每個磁碟,然後按一下其中一個類別 X按鈕 (其中 X 是要指定給磁碟的字母)。可用的類別有 A、B、C、D 和 E,但是大多數情況下,只需要較少的類別 (例如,僅需 A 和 B)。以這種方式指定所有可用的 RAID 磁碟。

      可以按 CtrlShift 鍵選取多個裝置。也可以在選定裝置上按一下滑鼠右鍵,然後從網路位置功能表中選擇適當的類別。

    2. 選取其中一個排序選項來指定裝置的順序:

      排序:: 先對類別 A 的所有裝置排序,然後對類別 B 的所有裝置排序,依此類推。例如:AABBCC

      交錯式:: 先對類別 A 的第一個裝置排序,接著對類別 B 的第一個裝置排序,依此類推對所有指定了裝置的後續類別排序。之後,接著對類別 A、B 等的第二個裝置排序,依次類推。沒有類別的所有裝置將排在裝置清單的末尾。例如:ABCABC

      模式檔案:: 選取包含多行的現有檔案,其中每一行都是一個正規表示式和一個類別名稱 ("sda.* A")。所有符合該正規表示式的裝置都會指定給該行的指定類別。正規表示式將依次比對核心名稱 (/dev/sda1)、udev 路徑名稱 (/dev/disk/by-path/pci-0000:00:1f.2-scsi-0:0:0:0-part1) 和 udev ID (dev/disk/by-id/ata-ST3500418AS_9VMN8X8L-part1)。如果裝置名稱與多個正規表示式相符,則由第一個相符項決定其類別。

    3. 在對話方塊底部,按一下確定以確認順序。

      Image
  8. 下一步

  9. RAID 選項下,指定區塊大小同位演算法,然後按下一步

    對於 RAID 10,同位選項包括 n (近)、f (遠) 和 o (偏移)。數字表示每個資料區塊的所需複本數。預設值為 2。如需更多資訊,請參閱第 9.2.2 節 「配置」

  10. 將檔案系統與掛接選項新增至 RAID 裝置,然後按一下完成

  11. 按一下下一步

  12. 驗證要進行的變更,然後按一下完成以建立 RAID。

9.2.4 使用 mdadm 建立複雜 RAID 10

此節的程序使用下表顯示的裝置名稱。請確保將裝置名稱修改為自己裝置的名稱。

表 9.5︰ 使用 mdadm 建立 RAID 10 的案例

Raw 裝置

RAID 10

/dev/sdf1

/dev/sdg1

/dev/sdh1

/dev/sdi1

/dev/md3

  1. 開啟終端機主控台。

  2. 如果需要,使用 parted 之類的磁碟分割程式至少建立四個大小相同的 0xFD Linux RAID 分割區。

  3. 輸入以下指令建立 RAID 10。

    tux > sudo mdadm --create /dev/md3 --run --level=10 --chunk=32 --raid-devices=4 \
    /dev/sdf1 /dev/sdg1 /dev/sdh1 /dev/sdi1

    請務必根據您的設定調整 --raid-devices 的值和分割區清單。

    該指令會建立具有近配置和兩個複本的陣列。若要變更這兩個值中的任意一個,請依第 9.2.2.4 節 「使用 YaST 和 mdadm 指定複本數和配置」所述使用 --layout

  4. 在 RAID 10 裝置 /dev/md3 上建立檔案系統,例如 XFS 檔案系統:

    tux > sudo mkfs.xfs /dev/md3

    如果要使用其他檔案系統,請修改指令。

  5. 編輯 /etc/mdadm.conf 檔案,如果該檔案不存在,則請建立該檔案 (例如,透過執行 sudo vi /etc/mdadm.conf 來建立)。新增下列幾行 (如果該檔案存在,則第一行可能也已存在)。

    DEVICE containers partitions
    ARRAY /dev/md3 UUID=UUID

    裝置的 UUID 可以透過以下指令來擷取:

    tux > sudo mdadm -D /dev/md3 | grep UUID
  6. 編輯 /etc/fstab 檔案以新增 RAID 10 裝置 /dev/md3 的項目。下面的範例顯示了包含 XFS 檔案系統並以 /data 做為掛接點之 RAID 裝置的一個項目。

    /dev/md3 /data xfs defaults 1 2
  7. 掛接 RAID 裝置:

    tux > sudo mount /data

10 建立降級 RAID 陣列

降級陣列是指其中某些裝置遺失的陣列。只有 RAID 1、RAID 4、RAID 5 和 RAID 6 支援降級陣列。這些 RAID 類型具有容錯功能,可容許遺失某些裝置。降級陣列通常發生在裝置故障時。也可能會出於某種目的而建立降級陣列。

RAID 類型

允許遺失插槽數量

 

RAID 1

只要有一個裝置未遺失即可

 

RAID 4

一個插槽

 

RAID 5

一個插槽

 

RAID 6

一或兩個插槽

 

若要建立其中某些裝置遺失的降級陣列,只需以 missing 一詞替換裝置名稱。這會導致 mdadm 將陣列中的相應插槽保留空白。

建立 RAID 5 陣列時,mdadm 會自動建立具有額外備用磁碟機的降級陣列。這是因為在降級陣列中建立備用磁碟機通常比重新同步非降級但不乾淨的陣列上的同位要快得多。可以使用 --force 選項覆寫此功能。

如果您要建立 RAID,但要使用的其中一個裝置上已有資料,則可以建立降級陣列。在這種情況下,建立具有其他裝置的降級陣列,將資料從使用中的裝置複製到在降級模式下執行的 RAID,再將該裝置新增至 RAID,然後等候 RAID 重建,如此操作資料就會分佈到所有裝置。下列程序是該處理程序的一個範例:

  1. 若要使用單個磁碟機 /dev/sd 1 建立降級的 RAID 1 裝置 /dev/md0,請在指令提示符處輸入以下指令:

    tux > sudo mdadm --create /dev/md0 -l 1 -n 2 /dev/sda1 missing

    該裝置大小應不小於您計劃新增的裝置。

  2. 如果您要新增至鏡像複製的裝置包含要移至 RAID 陣列的資料,請將該資料立即複製到在降級模式下執行的 RAID 陣列。

  3. 將您從中複製資料的裝置新增至鏡像。例如,若要將 /dev/sdb1 新增至 RAID,請在指令提示符下輸入:

    tux > sudo mdadm /dev/md0 -a /dev/sdb1

    您一次只能新增一個裝置。請耐心等候核心建立鏡像複製並將其完全發佈到線上,然後才能新增其他鏡像複製。

  4. 在指令提示符下輸入以下指令以監控建立進度:

    tux > sudo cat /proc/mdstat

    若要查看每秒重新整理一次的重建進度,請輸入

    tux > sudo watch -n 1 cat /proc/mdstat

11 使用 mdadm 調整軟體 RAID 陣列的大小

本章描述如何使用「多裝置管理」(mdadm(8)) 工具增加或減少軟體 RAID 1、4、5 或 6 裝置的大小。

調整現有軟體 RAID 裝置的大小包括增加或減少每個元件分割區所佔空間。還必須能夠調整 RAID 上之檔案系統的大小,以便充分利用裝置上可用空間的變更。在 SUSE Linux Enterprise Server 中,檔案系統調整大小公用程式可用於 Btrfs、Ext2、Ext3、Ext4、 和 XFS 檔案系統 (僅限增加大小)。如需相關資訊,請參閱第 2 章 「調整檔案系統大小

mdadm 工具僅支援調整軟體 RAID 層級 1、4、5 和 6 的大小。這些 RAID 層級提供磁碟容錯功能,因此調整大小時一次可以移除一個元件分割區。原則上,可以即時調整 RAID 分割區的大小,但在執行此操作時要格外留意您的資料避免遺失。

警告
警告:在調整大小之前請備份您的資料

調整任何分割區或檔案系統的大小都存在一定的風險,可能會造成資料遺失。若要避免資料遺失,在開始執行調整大小任務之前,請務必備份資料。

調整 RAID 大小包括下列任務。執行這些任務的順序取決於您要增加還是減少大小。

表 11.1︰ 調整 RAID 大小的相關任務

任務

描述

增加大小時採用的順序

減少大小時採用的順序

調整每個元件分割區的大小。

增加或減少每個元件分割區的使用中大小。一次僅可移除一個元件分割區,修改其大小,然後將其傳回 RAID。

1

2

調整軟體 RAID 自身大小。

RAID 無法自動知曉您對基礎元件分割區大小所做的調整 (增加或減少)。您必須通知它新大小。

2

3

調整檔案系統的大小。

您必須調整 RAID 上檔案系統的大小。您只能對提供了調整大小工具的檔案系統執行此操作。

3

1

下列各節中的程序將使用下表中所示的裝置名稱。請確定將名稱修改為自己裝置的名稱。

表 11.2︰ 增加元件分割區大小的案例

RAID 裝置

元件分割區

/dev/md0

/dev/sda1

/dev/sdb1

/dev/sdc1

11.1 增加軟體 RAID 的大小

若要增加軟體 RAID 的大小,您需要按給定順序完成下列任務:增加 RAID 包含之所有分割區的大小,增加 RAID 自身的的大小,最後增加檔案系統的大小。

警告
警告:潛在的資料遺失

如果 RAID 不具備磁碟容錯功能或只是不一致,則移除任何分割區都會導致資料遺失。移除分割區時要非常小心,並確定已備份可用資料。

11.1.1 增加元件分割區的大小

套用此節中的程序以增加 RAID 1、4、5 或 6 的大小。對於 RAID 中的每個元件分割區,請先將它從 RAID 移除,修改其大小,然後將它傳回 RAID,RAID 需要一定的穩定時間,隨後就可以繼續。移除分割區時,RAID 在降級模式下操作,此時不具備磁碟容錯功能或會降低此功能。即便對於能夠容許多個磁碟同時發生故障的 RAID,也不要一次移除多個元件分割區。若要增加組成 RAID 之分割區的大小,請執行下列步驟:

  1. 開啟終端機主控台。

  2. 輸入以下指令,以確定 RAID 陣列具有一致性且經過同步:

    tux > cat /proc/mdstat

    如果 RAID 陣列仍在根據指令的輸出進行同步,您必須等候同步完成,然後才能繼續。

  3. 從 RAID 陣列移除一個元件分割區。例如,若要移除 /dev/sda1,請輸入

    tux > sudo mdadm /dev/md0 --fail /dev/sda1 --remove /dev/sda1

    為使操作成功,必須指定容錯和移除動作。

  4. 執行下列操作之一,以增加上一步中移除之分割區的大小:

    • 使用磁碟分割程式 (例如 YaST 磁碟分割程式) 或指令行工具 parted 增加分割區的大小。通常選擇此選項。

    • 用更大容量的裝置取代分割區所在的磁碟。僅當原始磁碟區上的其他檔案系統沒有被系統存取時,該選項才可用。當取代裝置被新增回 RAID 時,它需要更久的時間來同步資料,因為此時必須重建原始裝置上的所有資料。

  5. 再次將分割區新增至 RAID 陣列。例如,若要新增 /dev/sda1,請輸入

    tux > sudo mdadm -a /dev/md0 /dev/sda1

    請等候直至 RAID 實現同步和一致性,然後再繼續下一分割區。

  6. 對陣列中其餘的每個元件裝置重複這些步驟。請確定針對正確的元件分割區修改指令。

  7. 如果系統發出訊息告知您核心無法重新讀取 RAID 的分割區表,則必須在調整所有分割區大小之後重新開機電腦,以強制更新分割區表。

  8. 請繼續執行第 11.1.2 節 「增加 RAID 陣列的大小」

11.1.2 增加 RAID 陣列的大小

在調整 RAID 中每個元件分割區的大小後 (請參閱第 11.1.1 節 「增加元件分割區的大小」),RAID 陣列組態會繼續使用原始陣列大小,直至您強制其知曉新的可用空間。您可以指定 RAID 的大小,或使用最大可用空間。

在本節的程序中,使用 RAID 裝置的裝置名稱 /dev/md0。請確定修改名稱以使用自己裝置的名稱。

  1. 開啟終端機主控台。

  2. 輸入以下指令,以確定 RAID 陣列具有一致性且經過同步:

    tux > cat /proc/mdstat

    如果 RAID 陣列仍在根據指令的輸出進行同步,您必須等候同步完成,然後才能繼續。

  3. 請輸入以下指令,以檢查陣列的大小及陣列可識別的裝置大小:

    tux > sudo mdadm -D /dev/md0 | grep -e "Array Size" -e "Dev Size"
  4. 請執行下列其中一個步驟:

    • 請輸入以下指令,以將陣列的大小增加到可用的最大大小:

      tux > sudo mdadm --grow /dev/md0 -z max
    • 請輸入以下指令,以將陣列的大小增加到可用的最大大小:

      tux > sudo mdadm --grow /dev/md0 -z max --assume-clean

      陣列會使用已新增至裝置的任何空間,但是不會對此空間進行同步。建議將此指令用於 RAID 1,因為該層級不需要同步。如果新增至成員裝置的空間已預先置零,則該指令可用於其他 RAID 層級。

    • 請輸入以下指令,以將陣列的大小增加到指定值:

      tux > sudo mdadm --grow /dev/md0 -z SIZE

      以表示所需大小的整數值 (以 KB 計,1 KB 為 1024 位元組) 取代 SIZE

  5. 請輸入以下指令,以重新檢查陣列的大小及陣列可識別的裝置大小:

    tux > sudo mdadm -D /dev/md0 | grep -e "Array Size" -e "Dev Size"
  6. 請執行下列其中一個步驟:

11.1.3 增加檔案系統的大小

在增加陣列的大小後 (請參閱第 11.1.2 節 「增加 RAID 陣列的大小」),您就可以調整檔案系統的大小。

可以將檔案系統的大小增加到最大可用空間大小,或指定一個精確的值。為檔案系統指定精確大小時,請確保新大小符合以下條件:

  • 新大小必須大於現有資料的大小;否則資料會遺失。

  • 新大小不得超過目前 RAID 的大小,因為檔案系統大小無法超過可用空間大小。

如需詳細指示,請參閱第 2 章 「調整檔案系統大小

11.2 減少軟體 RAID 的大小

若要減少軟體 RAID 的大小,您需要按給定順序完成下列任務:減少檔案系統的大小,減少 RAID 包含之所有分割區的大小,最後減少 RAID 自身的的大小。

警告
警告:潛在的資料遺失

如果 RAID 不具備磁碟容錯功能或只是不一致,則移除任何分割區都會導致資料遺失。移除分割區時要非常小心,並確定已備份可用資料。

重要
重要:XFS

XFS 格式檔案系統的大小無法減少,因為 XFS 不支援此功能。因此,使用 XFS 檔案系統之 RAID 的大小無法減少。

11.2.1 減少檔案系統的大小

當要減少 RAID 裝置上檔案系統的大小時,請確定新大小滿足下列條件:

  • 新大小必須大於現有資料的大小;否則資料會遺失。

  • 新大小不得超過目前 RAID 的大小,因為檔案系統大小無法超過可用空間大小。

如需詳細指示,請參閱第 2 章 「調整檔案系統大小

11.2.2 減少 RAID 陣列的大小

調整檔案系統的大小 (請參閱第 11.2.1 節 「減少檔案系統的大小」) 之後,RAID 陣列組態會繼續使用其原始陣列大小,直到您強制它減少可用空間。使用 mdadm --grow 模式來強制 RAID 使用較小的節區大小。為此,您必須使用 -z 選項來指定 RAID 中每個裝置要使用的空間量 (以 KB 為單位)。此大小必須是區塊大小的倍數,並且必須為要寫入裝置的 RAID 超級區塊留出約 128KB 的空間。

在本節的程序中,使用 RAID 裝置的裝置名稱 /dev/md0。請務必修改指令,以使用您自己的裝置名稱。

  1. 開啟終端機主控台。

  2. 請輸入以下指令,以檢查陣列的大小及陣列可識別的裝置大小:

    tux > sudo mdadm -D /dev/md0 | grep -e "Array Size" -e "Dev Size"
  3. 輸入以下指令將陣列的裝置大小減少至指定值:

    tux > sudo mdadm --grow /dev/md0 -z SIZE

    以表示所需大小的整數值 (以 KB 計) 取代 SIZE。(1 KB = 1024 B。)

    例如,下列指令會將每個 RAID 裝置的節區大小設為約 40 GB,其中區塊大小為 64 KB。它還包括用於 RAID 超級區塊的 128 KB。

    tux > sudo mdadm --grow /dev/md2 -z 41943168
  4. 請輸入以下指令,以重新檢查陣列的大小及陣列可識別的裝置大小:

    tux > sudo mdadm -D /dev/md0 | grep -e "Array Size" -e "Device Size"
  5. 請執行下列其中一個步驟:

11.2.3 減少元件分割區的大小

減少 RAID 中每個裝置使用的區段大小 (請參閱第 11.2.2 節 「減少 RAID 陣列的大小」) 之後,RAID 便不會使用每個元件分割區中的剩餘空間。您可以讓分割區保持其目前大小,以便為 RAID 將來的增長留出空間,也可以收回這些目前未使用的空間。

若要收回空間,請逐個減少元件分割區。對於每個元件分割區,您可以將其從 RAID 移除,減小其分割區的大小,將分割區返回至 RAID,然後等待 RAID 穩定下來。若要允許中繼資料,所指定的大小應比第 11.2.2 節 「減少 RAID 陣列的大小」 中為 RAID 指定的大小略大。

移除分割區時,RAID 在降級模式下操作,此時不具備磁碟容錯功能或會降低此功能。即使對於那些可以容許多個磁碟失敗同時發生的 RAID 而言,您也決不能一次即移除一個以上的元件分割區。若要減少組成 RAID 的各分割區的大小,請執行下列步驟:

  1. 開啟終端機主控台。

  2. 輸入以下指令,以確定 RAID 陣列具有一致性且經過同步:

    tux > cat /proc/mdstat

    如果 RAID 陣列仍在根據指令的輸出進行同步,您必須等候同步完成,然後才能繼續。

  3. 從 RAID 陣列移除一個元件分割區。例如,若要移除 /dev/sda1,請輸入

    tux > sudo mdadm /dev/md0 --fail /dev/sda1 --remove /dev/sda1

    為使操作成功,必須指定容錯和移除動作。

  4. 減少您在上一步中移除之分割區的大小,讓其值略大於為區段大小設定的大小。大小應該是區塊大小的倍數,並為 RAID 超級區塊留出 128 KB 的空間。使用磁碟分割程式 (例如 YaST 磁碟分割程式) 或指令行工具 parted 減少分割區的大小。

  5. 再次將分割區新增至 RAID 陣列。例如,若要新增 /dev/sda1,請輸入

    tux > sudo mdadm -a /dev/md0 /dev/sda1

    請等候直至 RAID 實現同步和一致性,然後再繼續下一分割區。

  6. 對陣列中其餘的每個元件裝置重複這些步驟。請確定針對正確的元件分割區修改指令。

  7. 如果您收到一條訊息,告知核心無法重新讀取 RAID 的分割區表,則您必須在調整所有元件分割區的大小後將電腦重新開機。

  8. (選擇性) 將 RAID 和檔案系統的大小擴充為使用目前較小元件分割區中的最大空間容量,並在此後增加檔案系統的大小。如需指示,請參閱第 11.1.2 節 「增加 RAID 陣列的大小」

12 適用於 MD 軟體 RAID 的儲存機殼指示燈公用程式

儲存機殼指示燈監控公用程式 (ledmon) 和指示燈控制 (ledctl) 公用程式都是 Linux 使用者空間應用程式,可以使用多種介面和通訊協定來控制儲存機殼指示燈。主要用途是視覺化顯示透過 mdadm 公用程式建立之 Linux MD 軟體 RAID 裝置的狀態。ledmon 精靈會監控磁碟機陣列的狀態並更新磁碟機指示燈的狀態。ledctl 公用程式可讓您設定所指定裝置的指示燈模式。

這些指示燈公用程式使用 SGPIO (序列一般用途輸入/輸出) 規格 (小型機機殼 (SFF) 8485) 及 SCSI 機殼服務 (SES) 2 通訊協定來控制指示燈。它們實作 SGPIO 之 SFF-8489 規格的 International Blinking Pattern Interpretation (IBPI) 模式。IBPI 定義如何將 SGPIO 標準解譯為後擋板上磁碟機和插槽的狀態,以及後擋板應該如何透過指示燈視覺化顯示狀態。

某些儲存機殼未嚴格遵守 SFF-8489 規格。機殼處理器可能會接受 IBPI 模式,但不會根據 SFF-8489 規格讓指示燈閃爍,或者該處理器可能僅支援數量有限的 IBPI 模式。

ledmonledctl 公用程式都不支援指示燈管理 (AHCI) 和 SAF-TE 通訊協定。

ledmonledctl 應用程式經驗證可以與 Intel 儲存控制器 (例如 Intel AHCI 控制器和 Intel SAS 控制器) 配合使用。它們還支援 PCIe-SSD (固態磁碟) 機殼指示燈,用以控制屬於 MD 軟體 RAID 磁碟區一部分之 PCIe-SSD 裝置的儲存機殼狀態 (正常、失敗、正在重建) 指示燈。這些應用程式還可以與其他廠商推出之符合 IBPI 的儲存控制器 (尤其是 SAS/SCSI 控制器) 配合使用;不過,其他廠商的控制器尚未經過測試。

ledmonledctlledmon 套件的一部分,系統預設不會安裝該套件。執行 sudo zypper in ledmon 可安裝它。

12.1 儲存機殼指示燈監控服務

ledmon 應用程式是一個精靈程序,可以不斷地監控 MD 軟體 RAID 裝置的狀態,或者儲存機殼或磁碟機槽中區塊裝置的狀態。一次只能執行一個該精靈的例項。ledmon 精靈是 Intel 機殼指示燈公用程式的一部分。

狀態會在與儲存陣列機殼或磁碟機槽中的每個插槽相關聯的指示燈上視覺化顯示。該應用程式會監控所有軟體 RAID 裝置並將其狀態視覺化顯示。它無法僅監控所選軟體 RAID 磁碟區。

ledmon 精靈支援兩種類型的指示燈系統:雙指示燈系統 (活動指示燈和狀態指示燈) 與三指示燈系統 (活動指示燈、定位指示燈和失敗指示燈)。存取指示燈時,此工具的優先程度最高。

若要啟動 ledmon,請輸入

tux > sudo ledmon [options]

其中,[options] 是下面的一或多個選項:

ledmon 的選項
-c 路徑 , --confg=路徑

系統從 ~/.ledctl/etc/ledcfg.conf (如果存在) 中讀取組態。使用此選項可指定替代組態檔案。

目前,此選項不起作用,因為尚未實作組態檔案的支援。如需詳細資料,請參閱 man 5 ledctl.conf

-l 路徑 , --log=路徑

設定本地記錄檔案的路徑。如果指定了此使用者定義的檔案,則不會使用全域記錄檔案 /var/log/ledmon.log

-t 秒數 , --interval=秒數

設定掃描 sysfs 之間的時間間隔。該值以秒為單位。最短為 5 秒。最大值未指定。

--quiet--error--warning--info--debug--all

指定詳細度層級。層級選項按從無資訊到最詳細資訊的順序指定。使用 --quiet 選項不會記錄任何內容。使用 --all 選項則可記錄所有內容。如果指定多個詳細選項,將會套用指令中的最後一個選項。

-h , --help

將指令資訊列印至主控台,然後結束。

-v , --版本

顯示 ledmon 的版本以及授權的相關資訊,然後結束。

注意
注意:已知問題

ledmon 精靈無法依照 SFF-8489 規格識別 PFA (故障預警分析) 狀態。因此,無法視覺化顯示 PFA 模式。

12.2 儲存機殼指示燈控制應用程式

機殼指示燈應用程式 (ledctl) 是一個使用者空間應用程式,可以控制與儲存機殼或磁碟機槽相關聯的指示燈。ledctl 應用程式是 Intel 機殼指示燈公用程式的一部分。

當您發出該指令時,系統會將指定裝置的指示燈設為指定的模式,並會關閉所有其他指示燈。執行此應用程式需要有 root 權限。由於 ledmon 應用程式在存取指示燈時具有最高優先程度,因此如果 ledmon 精靈正在執行,ledctl 設定的某些模式可能將不起作用 (Locate 模式除外)。

ledctl 應用程式支援兩種類型的指示燈系統:雙指示燈系統 (活動指示燈和狀態指示燈) 與三指示燈系統 (活動指示燈、失敗指示燈和定位指示燈)。

若要啟動 ledctl,請輸入

tux > sudo [options] PATTERN_NAME=list_of_devices

其中,[options] 是下面的一或多個選項:

-c 路徑 , --confg=路徑

設定本地組態檔案的路徑。如果指定了此選項,則全域組態檔案與使用者組態檔案都將無效。

-l 路徑 , --log=路徑

設定本地記錄檔案的路徑。如果指定了此使用者定義的檔案,則不會使用全域記錄檔案 /var/log/ledmon.log

--quiet

關閉傳送至 stdout 或從 stderr 傳出的所有訊息。但這些訊息仍會記錄到本地檔案和 syslog 工具中。

-h , --help

將指令資訊列印至主控台,然後結束。

-v , --版本

显示 ledctl 的版本以及许可证的相关信息,然後退出。

12.2.1 模式名稱

根據 SFF-8489 規格,ledctl 應用程式接受下列 pattern_name 引數名稱。

locate

開啟與指定裝置或空插槽相關聯的定位指示燈。此狀態用於識別插槽或磁碟機。

locate_off

關閉與指定裝置或空插槽相關聯的定位指示燈。

normal

關閉與指定裝置相關聯的狀態指示燈、失敗指示燈和定位指示燈。

off

僅關閉與指定裝置相關聯的狀態指示燈和失敗指示燈。

ica , degraded

視覺化顯示 In a Critical Array 模式。

rebuild , rebuild_p

視覺化顯示 Rebuild 模式。出於相容性和舊版原因,支援這兩種重建狀態。

ifa , failed_array

視覺化顯示 In a Failed Array 模式。

hotspare

視覺化顯示 Hotspare 模式。

pfa

視覺化顯示 Predicted Failure Analysis 模式。

failure , disk_failed

視覺化顯示 Failure 模式。

ses_abort

SES-2 R/R ABORT

ses_rebuild

SES-2 REBUILD/REMAP

ses_ifa

SES-2 IN FAILED ARRAY

ses_ica

SES-2 IN CRITICAL ARRAY

ses_cons_check

SES-2 CONS CHECK

ses_hotspare

SES-2 HOTSPARE

ses_rsvd_dev

SES-2 RSVD DEVICE

ses_ok

SES-2 OK

ses_ident

SES-2 IDENT

ses_rm

SES-2 REMOVE

ses_insert

SES-2 INSERT

ses_missing

SES-2 MISSING

ses_dnr

SES-2 DO NOT REMOVE

ses_active

SES-2 ACTIVE

ses_enable_bb

SES-2 ENABLE BYP B

ses_enable_ba

SES-2 ENABLE BYP A

ses_devoff

SES-2 DEVICE OFF

ses_fault

SES-2 FAULT

將非 SES-2 模式傳送至機殼中的裝置時,該模式會自動轉換為 SCSI 機殼服務 (SES) 2 模式,如下所示。

表 12.1︰ 非 SES-2 模式與 SES-2 模式之間的轉換

非 SES-2 模式

SES-2 模式

locate

ses_ident

locate_off

ses_ident

normal

ses_ok

off

ses_ok

ica

ses_ica

degraded

ses_ica

rebuild

ses_rebuild

rebuild_p

ses_rebuild

ifa

ses_ifa

failed_array

ses_ifa

hotspare

ses_hotspare

pfa

ses_rsvd_dev

failure

ses_fault

disk_failed

ses_fault

12.2.2 裝置清單

當您發出 ledctl 指令時,系統會將指定裝置的指示燈設為指定的模式,並會關閉所有其他指示燈。裝置清單可採用下列兩種格式之一來提供:

  • 以逗號分隔且無空格的裝置清單

  • 以空格分隔並用大括號括住的裝置清單

如果在同一個指令中指定多個模式,則每個模式的裝置清單可以使用相同的格式,也可以使用不同的格式。如需顯示兩種清單格式的範例,請參閱第 12.2.3 節 「範例」

裝置是指向 /dev 目錄或 /sys/block 目錄中檔案的路徑。路徑可以識別區塊裝置、MD 軟體 RAID 裝置或容器裝置。對於軟體 RAID 裝置或容器裝置,將會為所有相關聯的區塊裝置設定所報告的指示燈狀態。

list_of_devices 中列出之裝置的指示燈將設為指定的模式 pattern_name,且所有其他指示燈都將關閉。

12.2.3 範例

尋找單個區塊裝置:

tux > sudo ledctl locate=/dev/sda

若要關閉單個區塊裝置的定位指示燈:

tux > sudo ledctl locate_off=/dev/sda

尋找 MD 軟體 RAID 裝置的磁碟,並同時為其兩個區塊裝置設定重建模式:

tux > sudo ledctl locate=/dev/md127 rebuild={ /sys/block/sd[a-b] }

關閉指定裝置的狀態指示燈和失敗指示燈:

tux > sudo ledctl off={ /dev/sda /dev/sdb }

若要定位三個區塊裝置,請執行以下指令之一 (兩個指令的作用相同):

tux > sudo ledctl locate=/dev/sda,/dev/sdb,/dev/sdc
tux > sudo ledctl locate={ /dev/sda /dev/sdb /dev/sdc }

12.3 其他資訊

如需指示燈模式和監控工具的詳細資料,請參閱下列資源:

第 IV 部分 網路儲存

  • 13 iSNS for Linux
  • 儲存區域網路 (SAN) 可包含許多在複雜網路中散佈的磁碟機。這可能會使探查及擁有裝置變得困難。iSCSI 啟動器必須可識別 SAN 中的儲存資源,並確定這些資源是否已進行存取。

  • 14 IP 網路上的大型儲存裝置:iSCSI
  • 電腦中心或支援伺服器的任何站點的主要任務之一就是提供充足的磁碟容量。為此通常使用光纖通道。iSCSI (網際網路 SCSI) 解決方案的實施成本較低,可用來替代光纖通道,並能充分發揮商用伺服器與乙太網路設備的價值。Linux iSCSI 提供 iSCSI 啟動器和 iSCSI LIO 目標軟體,用於將 Linux 伺服器連接至中央儲存系統。

  • 15 乙太網路光纖通道儲存:FCoE
  • 許多企業資料中心的 LAN 和資料流量都依賴於乙太網路,而他們的儲存基礎架構則依賴於光纖通道網路。開放式乙太網路光纖通道 (FCoE) 啟動器軟體允許具有乙太網路卡的伺服器透過乙太網路連接至光纖通道儲存子系統。而在以前,此連接性僅可供具有光纖通道配接器的系統透過光纖通道光纖使用。FCoE 技術支援網路會聚,降低了資料中心的複雜程度。這可協助您保護在光纖通道儲存基礎架構中的現有投資,並簡化網路管理。

  • 16 NVMe over Fabric
  • 本章介紹如何設定 NVMe over Fabric 主機和目標。

  • 17 管理裝置的多重路徑 I/O
  • 本章描述如何透過使用多重路徑 I/O (MPIO) 管理伺服器和區塊儲存裝置間多重路徑的容錯移轉和路徑負載平衡。

  • 18 透過 NFSv4 管理存取控制清單
  • 除了針對使用者、群組和其他人 (ugo) 的簡單讀取、寫入、執行 (rwx) 旗標之外,Linux 中的各存取控制清單 (ACL) 之間沒有統一的標準。控制能力相對較好的一個選擇是 POSIX 從未正式標準化的《Draft POSIX ACLs》(POSIX ACL 草稿)。另一個選擇是 NFSv4 ACL,它們設計為 NFSv4 網路檔案系統的一部分,目的是為 Linux 上的 POSIX 系統與 Microsoft Windows 上的 WIN32 系統之間提供合理的相容性。

13 iSNS for Linux

儲存區域網路 (SAN) 可包含許多在複雜網路中散佈的磁碟機。這可能會使探查及擁有裝置變得困難。iSCSI 啟動器必須可識別 SAN 中的儲存資源,並確定這些資源是否已進行存取。

網際網路儲存名稱服務 (iSNS) 是一項標準式服務,可便於自動化探查、管理和設定 TCP/IP 網路上的 iSCSI 裝置。iSNS 提供可與光纖通道媲美的智能儲存探查與管理服務。

如果沒有 iSNS,您必須知道所需目標所在的每個節點的主機名稱或 IP 位址。此外,您必須使用存取控制清單等機制,自行手動管理哪些啟動器能夠存取哪些目標。

重要
重要:安全性考量

由於網路流量未加密,只能在安全的內部網路環境中使用 iSNS。

13.1 iSNS 的工作原理

若要讓 iSCSI 啟動器探查 iSCSI 目標,則需要識別網路中屬於儲存資源的裝置及需要存取的 IP 位址。對於 iSNS 伺服器的查詢會傳回應用程式有權存取的 iSCSI 目標與 IP 位址。

透過使用 iSNS,您可以建立 iSNS 探查網域,隨後將 iSCSI 目標和啟動器按這些網域來分組或組織。透過將儲存節點劃分為網域,您就可以將每台主機的探查程序限定為使用 iSNS 註冊的目標之最合適的子集,這樣就可透過減少不必要的探查數量並限制每台主機用於建立探查關係所耗費的時間讓儲存網路進行縮放。此操作可讓您控制並簡化必須進行探查的目標與啟動器的數量。

iSNS 探查網域
圖 13.1︰ iSNS 探查網域

iSCSI 目標與 iSCSI 啟動器都可以使用 iSNS 用戶端透過 iSNS 通訊協定啟動與 iSNS 伺服器的交易。然後在常見探查網域中註冊裝置屬性資訊,下載其他註冊用戶端相關的資訊,並接收發生在探查網域中的事件之非同步通知。

iSNS 伺服器會回應 iSNS 用戶端使用 iSNS 通訊協定作出的 iSNS 通訊協定查詢與申請。iSNS 伺服器會啟動 iSNS 通訊協定狀態變更通知,並將註冊申請提交的經適當驗證的資訊儲存到 iSNS 資料庫中。

iSNS for Linux 提供的優點包括:

  • 為註冊、探查與管理網路內的儲存資產帶來資訊便利。

  • 與 DNS 基礎結構相整合。

  • 合併 iSCSI 儲存的註冊、探查與管理。

  • 簡化了儲存管理實作。

  • 與其他探查方法相比,提高了擴充性。

iSNS 具有多項重要優勢。

例如,在包含 100 個 iSCSI 啟動器和 100 個 iSCSI 目標的設定中,所有 iSCSI 啟動器都可嘗試探查並連接至 100 個 iSCSI 目標中的任何一個。透過將啟動器與目標分組到探查網域中,您就可以阻止一個部門中的 iSCSI 啟動器探查另一個部門中的 iSCSI 目標。

使用 iSNS 的另一項優勢在於,iSCSI 用戶端只需知道 iSNS 伺服器的主機名稱或 IP 位址,而不必知道全部 100 個伺服器的主機名稱或 IP 位址。

13.2 安裝 iSNS Server for Linux

SUSE Linux Enterprise Server 中隨附了 iSNS Server for Linux,但預設不會安裝或設定。您需要安裝套件 open-isns 並設定 iSNS 服務。

注意
注意:iSNS 和 iSCSI 在同一伺服器上

可將 iSNS 安裝在 iSCSI 目標或 iSCSI 起始程式軟體所在的伺服器上。不能將 iSCSI 目標軟體與 iSCSI 起始程式軟體安裝在同一部伺服器上。

安裝 iSNS for Linux:

  1. 啟動 YaST 並選取網路服務 ›  iSNS 伺服器

  2. 如果 open-isns 尚未安裝,系統會提示您現在安裝。按一下安裝確認安裝。

  3. 「iSNS 服務」組態對話方塊會自動開啟並顯示服務索引標籤。

    Image
  4. 服務啟動中選取下列其中一項:

    • 開機時:: iSNS 服務會在伺服器啟動時自動啟動。

    • 手動 (預設):: 您必須在用於安裝 iSNS 服務之伺服器的主控台中輸入 sudo systemctl start isnsd,來手動啟動 iSNS 服務。

  5. 指定下列防火牆設定:

    • 在防火牆中開啟埠:: 選取核取方塊開啟防火牆,並允許從遠端電腦存取服務。預設關閉防火牆連接埠。

    • 防火牆詳細資料:: 如果開啟防火牆連接埠,則依預設會在所有網路介面上開啟連接埠。按一下防火牆詳細資料選取要在其上開啟連接埠的介面,並選取要使用的網路,然後按一下確定

  6. 按一下確定套用組態設定並完成安裝。

  7. 請繼續執行第 13.3 節 「設定 iSNS 探查網域」

13.3 設定 iSNS 探查網域

若要讓 iSCSI 啟動器與 iSCSI 目標使用 iSNS 服務,則它們必須屬於探查網域。

重要
重要:iSNS 服務必須處於使用中狀態

iSNS 服務必須已安裝並且執行,您才能設定 iSNS 探查網域。如需更多資訊,請參閱第 13.4 節 「啟動 iSNS 服務」

13.3.1 建立 iSNS 探查網域

安裝 iSNS 服務時,會自動建立名稱為 default DD 的預設探查網域。設定使用 iSNS 的現有 iSCSI 目標與啟動器會自動新增至預設探查網域。

建立新的探查網域:

  1. 啟動 YaST,然後在網路服務之下選取iSNS 伺服器

  2. 按一下探查網域索引標籤。

    探查網域區域列出了所有現有的探查網域。您可以建立探查網域刪除現有的探查網域。請注意,從網域成員資格中刪除某個 iSCSI 節點只是將其從網域中移除,而不會刪除該 iSCSI 節點。

    探查網域成員區域列出了為所選探查網域指定的所有 iSCSI 節點。如果選取其他探查網域,則會重新整理清單,並列出該探查網域的成員。您可以對選取的探查網域新增或刪除 iSCSI 節點。如果刪除 iSCSI 節點,則會將其從網域中移除,但不會刪除該 iSCSI 節點。

    建立 iSCSI 節點成員允許將尚未註冊的節點新增為探查網域成員。該節點經 iSCSI 啟動器或目標註冊後,就會成為此網域的一部分。

    iSCSI 啟動器執行探查申請時,iSNS 服務會傳回屬於同一探查網域的所有 iSCSI 節點目標。

    Image
  3. 按一下建立探查網域按鈕。

    您也可以選取現有的探查網域,然後按一下刪除按鈕移除該探查網域。

  4. 指定您正在建立的探查網域之名稱,然後按一下確定

  5. 請繼續執行第 13.3.2 節 「將 iSCSI 節點新增至探查網域」

13.3.2 將 iSCSI 節點新增至探查網域

  1. 啟動 YaST,然後在網路服務之下選取iSNS 伺服器

  2. 按一下iSCSI 節點索引標籤。

    Image
  3. 檢閱節點清單,確定已列出要使用 iSNS 服務的 iSCSI 目標和啟動器。

    若未列出 iSCSI 目標或啟動器,您可能需要重新啟動節點上的 iSCSI 服務。為此,您可以執行

    tux > sudo systemctl restart iscsid.socket
    tux > sudo systemctl restart iscsi

    重新啟動啟動器,或執行

    tux > sudo systemctl restart target-isns

    重新啟動目標。

    您可以選取 iSCSI 節點,然後按一下刪除按鈕將該節點從 iSNS 資料庫移除。若您不再使用 iSCSI 節點或已對該節點進行重新命名,這會帶來幫助。

    除非您移除 iSCSI 組態檔案的 iSNS 部分或將其注解化,否則在重新啟動 SCSI 服務或伺服器時,iSCSI 節點會自動再次新增至清單 (iSNS 資料庫)。

  4. 按一下探查網域索引標籤,然後選取所需的探查網域。

  5. 按一下新增現有的 iSCSI 節點,選取您要新增至網域的節點,然後再按新增節點

  6. 對要新增至探查網域的所有節點重複上述步驟,當您新增完節點時,再按一下完成

    請注意,一個 iSCSI 節點可屬於多個探查網域。

13.4 啟動 iSNS 服務

iSNS 必須在所安裝到的伺服器上啟動。如果您未將它設定為在開機時啟動 (請參閱第 13.2 節 「安裝 iSNS Server for Linux」瞭解詳細資料),請在終端機主控台中輸入以下指令:

tux > sudo systemctl start isnsd

您也可以使用 iSNS 的 stopstatusrestart 選項。

13.5 進一步的資訊

以下專案提供了有關 iSNS 和 iSCSI 的更多資訊:

如需 iSNS 的一般資訊,請參閱「RFC 4171: Internet Storage Name Service」(RFC 4171:網際網路儲存名稱服務,網址為 https://tools.ietf.org/html/rfc4171)。

14 IP 網路上的大型儲存裝置:iSCSI

電腦中心或支援伺服器的任何站點的主要任務之一就是提供充足的磁碟容量。為此通常使用光纖通道。iSCSI (網際網路 SCSI) 解決方案的實施成本較低,可用來替代光纖通道,並能充分發揮商用伺服器與乙太網路設備的價值。Linux iSCSI 提供 iSCSI 啟動器和 iSCSI LIO 目標軟體,用於將 Linux 伺服器連接至中央儲存系統。

配有 iSNS 伺服器的 iSCSI SAN
圖 14.1︰ 配有 iSNS 伺服器的 iSCSI SAN
注意
注意:LIO

LIO (http://linux-iscsi.org) 是適用於 Linux 的標準開放原始碼多協定 SCSI 目標。LIO 取代了 STGT (SCSI 目標) 架構,成為 Linux 核心版本為 2.6.38 及更新版本之 Linux 中的標準統一儲存目標。在 SUSE Linux Enterprise Server 12 中,iSCSI LIO 目標伺服器取代了先前版本中的 iSCSI 目標伺服器。

iSCSI 是一種儲存網路通訊協定,可以透過 TCP/IP 網路來簡化區塊儲存裝置與伺服器之間 SCSI 封包資料的傳輸。iSCSI 目標軟體在目標伺服器上執行,並將邏輯單元定義為 iSCSI 目標裝置。iSCSI 啟動器軟體在不同伺服器上執行,然後會連接到目標裝置,以使該伺服器上的儲存裝置可用。

iSCSI LIO 目標伺服器與 iSCSI 啟動器伺服器之間透過在 LAN 的 IP 層級上傳送 SCSI 封包來通訊。如果在啟動器伺服器上執行的應用程式發出 iSCSI LIO 目標裝置查詢,作業系統會產生必要的 SCSI 指令。接著,通常稱為 iSCSI 啟動器的軟體會根據需要將 SCSI 指令嵌入 IP 封包並加密。封包透過內部 IP 網路傳送到相應的 iSCSI 遠端工作站,該工作站稱為 iSCSI LIO 目標伺服器,簡稱為 iSCSI 目標

許多儲存解決方案提供透過 iSCSI 的存取方式,但還另一種可能就是執行提供 iSCSI 目標的 Linux 伺服器。在這種情況下,針對檔案系統服務設定最佳化的 Linux 伺服器是很重要的。如需關於 RAID 的詳細資訊,請參閱第 7 章 「軟體 RAID 組態

14.1 安裝 iSCSI LIO 目標伺服器和 iSCSI 啟動器

系統中預設會安裝 iSCSI 啟動器 (套件 open-iscsiyast2-iscsi-client),而 iSCSI LIO 目標套件則需要手動安裝。

重要
重要:啟動器和目標位於同一伺服器

儘管可以在同一系統中執行啟動器和目標,但不建議採用此設定。

若要安裝 iSCSI LIO 目標伺服器,請在終端機主控台中執行以下指令:

tux > sudo zypper in yast2-iscsi-lio-server

如果您需要安裝 iSCSI 啟動器或其任何相依項,請執行指令 sudo zypper in yast2-iscsi-client

也可以使用 YaST 軟體管理模組來進行安裝。

除了上述套件之外,任何其他所需的套件將由安裝程式自動提取,或者在您第一次執行相應的 YaST 模組時安裝。

14.2 設定 iSCSI LIO 目標伺服器

本章說明如何使用 YaST 設定 iSCSI LIO 目標伺服器以及設定 iSCSI LIO 目標裝置。您可以使用任一 iSCSI 啟動器軟體來存取目標裝置。

14.2.1 iSCSI LIO 目標服務啟動和防火牆設定

iSCSI LIO 目標服務預設設為手動啟動。您可以將該服務設定為在開機時自動啟動。如果在伺服器上使用防火牆並且希望 iSCSI LIO 目標在其他電腦上可用,則必須為要用於目標存取的每個介面卡開啟防火牆中的連接埠。按照 IANA (Internet Assigned Numbers Authority) 的定義,TCP 連接埠 3260 是 iSCSI 通訊協定的埠號。

  1. 啟動 YaST,然後啟動網路服務 ›  iSCSI LIO 目標

  2. 切換至服務索引標籤。

    Image
  3. 服務啟動下,指定 iSCSI LIO 目標服務的啟動方式:

    • 開機時:: 該服務會在伺服器重新啟動時自動啟動。

    • 自訂:: (預設) 伺服器重新啟動之後,您必須執行 sudo systemctl start targetcli 指令來手動啟動該服務。啟動該服務之後,目標裝置才可用。

  4. 如果在伺服器上使用防火牆,並且希望 iSCSI LIO 目標在其他電腦上可用,請為要用於存取目標的每個介面卡介面開啟防火牆中的連接埠 3260。如果關閉所有網路介面的連接埠,則 iSCSI LIO 目標將無法供其他電腦使用。

    如果您未在伺服器上使用防火牆,則防火牆 設定會停用。在此情況下,請跳過下列步驟,按一下完成結束組態設定對話方塊,或切換至另一個索引標籤繼續進行組態設定。

    1. 服務索引標籤上,選取在防火牆中開啟埠核取方塊以啟用防火牆設定。

    2. 按一下防火牆詳細資料以檢視或設定要使用的網路介面。隨即會列出所有可用的網路介面,並且預設會選取所有介面。取消選取應該開啟連接埠的所有介面。按一下確定儲存您的設定。

  5. 按一下完成以儲存並套用 iSCSI LIO 目標服務設定。

14.2.2 設定用於探查 iSCSI LIO 目標與啟動器的驗證

iSCSI LIO 目標伺服器軟體支援 PPP-CHAP (點對點通訊協定-Challenge Handshake 驗證通訊協定),它是網際網路工程任務推動小組 (IETF) RFC 1994 (https://tools.ietf.org/rfc/rfc1994.txt) 中定義的一種三向驗證方法。伺服器使用此驗證方法是用來探查 iSCSI LIO 目標與啟動器,而不是用來存取目標上的檔案。如果不想將存取僅限於搜索,請使用無驗證無探查驗證選項預設處於啟用狀態。此伺服器上的所有 iSCSI LIO 目標都可由同一網路上的任何 iSCSI 啟動器探查,而不需要驗證。

如果為了設定更安全的組態而需要驗證,則可以使用內送驗證、外送驗證或兩者。依啟動器驗證要求 iSCSI 啟動器證明它有權針對 iSCSI LIO 目標執行探查。啟動器必須提供內送使用者名稱和密碼。依目標驗證要求 iSCSI LIO 目標向啟動器證明它是預期的目標。iSCSI LIO 目標必須向 iSCSI 啟動器提供外送使用者名稱和密碼。用於內送和外送探查的密碼必須不同。如果探查驗證已啟用,其設定將會套用至所有 iSCSI LIO 目標群組。

重要
重要:安全性

為安全起見,建議您在線上環境中針對目標與啟動器探查使用驗證。

若要設定 iSCSI LIO 目標的驗證偏好設定,請執行下列步驟:

  1. 啟動 YaST,然後啟動網路服務 ›  iSCSI LIO 目標

  2. 切換至全域索引標籤。

    Image
  3. 驗證預設處於停用狀態 (無探查驗證)。若要啟用驗證,請選取依啟動器驗證和/或外送驗證

  4. 提供所選驗證方法的身分證明。內送和外送探查的使用者名稱和密碼對必須不同。

  5. 按一下完成以儲存並套用設定。

14.2.3 準備儲存空間

在為 iSCSI 目標伺服器設定 LUN 之前,必須準備好要使用的儲存。可以將整個未格式化的區塊裝置當成單個 LUN,也可以將一部裝置分為數個未格式化的分割區,並將每個分割區當成單獨的 LUN。iSCSI 目標組態會將 LUN 輸出到 iSCSI 啟動器。

您可以使用 YaST 中的磁碟分割程式或指令行來設定分割區。如需詳細資訊,請參閱Book “部署指南 ”, Chapter 10 “專家分割程式”, Section 10.1 “使用進階磁碟分割程式”。iSCSI LIO 目標能夠以 Linux、Linux LVM 或 Linux RAID 檔案系統 ID 來使用未格式化的分割區。

重要
重要:不要掛接 iSCSI 目標裝置

將某個裝置或分割區設定為 iSCSI 目標後,您將無法再透過其本地路徑直接存取它。請勿在目標伺服器上掛接分割區。

14.2.3.1 對虛擬環境中的裝置進行磁碟分割

您可以使用虛擬機器客體伺服器做為 iSCSI LIO 目標伺服器。本節說明如何將分割區指定給 Xen 虛擬機器。您還可以使用 SUSE Linux Enterprise Server 支援的其他虛擬環境。

在 Xen 虛擬環境中,您必須為客體虛擬機器指定要用於 iSCSI LIO 目標裝置的儲存空間,然後在客體環境內以虛擬磁碟的方式存取該空間。每個虛擬磁碟可以是實體區塊裝置,如整個磁碟、分割區或磁碟區,也可以是檔案備份磁碟影像,其中虛擬磁碟是 Xen 主機伺服器中較大實體磁碟上的一個影像檔案。為獲得最佳效能,請從實體磁碟或分割區建立所有虛擬磁碟。為訪客虛擬機器設定虛擬磁碟後,啟動訪客伺服器,然後依照與實體伺服器相同的程序將新的空白虛擬磁碟設定為 iSCSI 目標裝置。

檔案備份磁碟影像建立在 Xen 主機伺服器上,然後會指定給 Xen 客體伺服器。依預設,Xen 會將檔案型磁碟影像儲存到 /var/lib/xen/images/VM_NAME 目錄中,其中 VM_NAME 為虛擬機器的名稱。

14.2.4 設定 iSCSI LIO 目標群組

您可以使用 YaST 來設定 iSCSI LIO 目標裝置。YaST 使用 lio-utils 軟體提供的 API。iSCSI LIO 目標能夠使用具有 Linux、Linux LVM 或 Linux RAID 檔案系統 ID 的分割區。

重要
重要:分割區

在開始之前,請選擇要用於後端儲存的分割區。不一定要格式化這些分割區:iSCSI 用戶端可以在連接分割區時再進行格式化,並覆寫所有現有格式。

  1. 啟動 YaST,然後啟動網路服務 ›  iSCSI LIO 目標

  2. 切換至目標索引標籤。

    Image
  3. 按一下新增,然後定義新的 iSCSI LIO 目標群組和裝置:

    iSCSI LIO 目標軟體會自動填寫目標識別碼入口群組IP 位址埠號欄位。使用驗證預設會處於選中狀態。

    1. 如果您有多個網路介面,請使用 IP 位址下拉式方塊來選取要用於此目標群組的網路介面 IP 位址。若要讓伺服器在所有位址下都能存取,請選擇結合所有 IP 位址

    2. 如果您不想對此目標群組進行啟動器驗證,請取消選取使用驗證 (不建議)。

    3. 按一下新增。輸入裝置或分割區的路徑,或按一下瀏覽新增路徑。(選擇性) 指定名稱,然後按一下確定。LUN 編號將會自動產生,從 0 開始。如果將該欄位保留為空白,則會自動產生名稱。

    4. (選擇性) 重複前面的步驟,將目標新增至此目標群組。

    5. 將所有需要的目標新增到群組之後,按下一步

  4. 修改 iSCSI 目標啟動器設定頁面上,設定允許存取目標群組中 LUN 之啟動器的資訊:

    Image

    為目標群組至少指定一個啟動器後,編輯 LUN編輯驗證刪除複製按鈕都將啟用。您可以使用新增複製來為目標群組新增啟動器。

    修改 iSCSI 目標:選項
    • 新增:: 為所選 iSCSI LIO 目標群組新增啟動器項目。

    • 編輯 LUN:: 設定將 iSCSI LIO 目標群組中的哪些 LUN 對應到所選啟動器。您可以將每個已配置目標對應到偏好的啟動器。

    • 編輯驗證:: 為所選啟動器設定偏好的驗證方法。您可以指定無驗證,也可以設定內送驗證、外送驗證或兩者。

    • 刪除:: 從配置給目標群組的啟動器清單中移除所選啟動器項目。

    • 複製:: 新增啟動器項目,其 LUN 對應和驗證設定與所選啟動器項目相同。這樣,您可以依次將相同的共享 LUN 輕鬆地配置給叢集中的每個節點。

    1. 按一下新增,指定啟動器名稱,選取或取消選取從 TPG 輸入 LUN 核取方塊,然後按一下確定以儲存設定。

    2. 選取啟動器項目,按一下編輯 LUN,修改 LUN 對應以指定將 iSCSI LIO 目標群組中的哪些 LUN 配置給所選啟動器,然後按一下確定以儲存變更。

      如果 iSCSI LIO 目標群組由多個 LUN 組成,則您可以將一或多個 LUN 配置給所選啟動器。依預設,群組中每個可用的 LUN 會指定給一個啟動器 LUN。

      若要修改 LUN 配置,請執行下列一或多個動作:

      • 新增:: 按一下新增以建立新的啟動器 LUN 項目,然後使用變更下拉式方塊將一個目標 LUN 對應至該項目。

      • 刪除:: 選取啟動器 LUN 項目,然後按一下刪除以移除目標 LUN 對應。

      • 將:: 選取啟動器 LUN 項目,然後使用變更下拉式方塊來選取要將哪個目標 LUN 對應至該項目。

      一般配置計畫包含下列各項:

      • 單個伺服器列出為啟動器。目標群組中的所有 LUN 都會配置給它。

        您可以使用此分組策略,為指定伺服器邏輯分組 iSCSI SAN 儲存。

      • 多個獨立伺服器列出為啟動器。一或多個目標 LUN 會配置給每個伺服器。每個 LUN 僅會配置給一個伺服器。

        您可以使用此分組策略,為資料中心中的指定部門或服務類別邏輯分組 iSCSI SAN 儲存。

      • 叢集的每個節點列出為啟動器。所有共享的目標 LUN 都會配置給每個節點。所有節點都會連接至裝置,但是對於大部分檔案系統,叢集軟體會鎖定裝置以禁止存取,並且一次只在一個節點上掛接該裝置。共享檔案系統 (例如 OCFS2) 可讓多個節點同時掛接相同的檔案結構,並以讀寫權限開啟相同檔案。

        您可以使用此分組策略,為指定伺服器叢集邏輯分組 iSCSI SAN 儲存。

    3. 選取啟動器項目,按一下編輯驗證,指定啟動器的驗證設定,然後按一下確定以儲存設定。

      您可以要求無探查驗證,也可以設定依啟動器驗證和/或外送驗證。您只能為每個啟動器指定一個使用者名稱和密碼組。對於啟動器的內送和外送驗證,其身分證明可以不同。每個啟動器的身分證明都可以不同。

    4. 對每個可以存取此目標群組的 iSCSI 啟動器重複上述步驟。

    5. 設定啟動器指定之後,按下一步

  5. 按一下完成以儲存並套用設定。

14.2.5 修改 iSCSI LIO 目標群組

您可以按如下方式修改現有的 iSCSI LIO 目標群組:

  • 在目標群組中新增或移除目標 LUN 裝置

  • 為目標群組新增或移除啟動器

  • 為目標群組之啟動器修改啟動器 LUN 至目標 LUN 對應

  • 修改啟動器驗證 (內送、外送或兩者) 的使用者名稱和密碼身分證明

若要檢視或修改 iSCSI LIO 目標群組的設定,請執行下列步驟:

  1. 啟動 YaST,然後啟動網路服務 ›  iSCSI LIO 目標

  2. 切換至目標索引標籤。

  3. 選取要修改的 iSCSI LIO 目標群組,然後按一下編輯

  4. 在「修改 iSCSI 目標 LUN 設定」頁面上,將 LUN 新增至目標群組,編輯 LUN 指定或從該群組中移除目標 LUN。對群組進行所有需要的變更之後,按下一步

    如需選項資訊,請參閱修改 iSCSI 目標:選項

  5. 在「修改 iSCSI 目標啟動器設定」頁面上,設定允許存取目標群組中 LUN 之啟動器的資訊。對群組進行所有需要的變更之後,按下一步

  6. 按一下完成以儲存並套用設定。

14.2.6 刪除 iSCSI LIO 目標群組

刪除 iSCSI LIO 目標群組會移除群組的定義以及啟動器的相關設定,包括 LUN 對應和驗證身分證明。此操作不會損毀分割區上的資料。若要再次提供啟動器存取權限,您可以將目標 LUN 配置給其他或新的目標群組,並為它們設定啟動器存取權限。

  1. 啟動 YaST,然後啟動網路服務 ›  iSCSI LIO 目標

  2. 切換至目標索引標籤。

  3. 選取要刪除的 iSCSI LIO 目標群組,然後按一下刪除

  4. 系統提示時,按一下繼續以確認刪除,或按一下取消進行取消。

  5. 按一下完成以儲存並套用設定。

14.3 設定 iSCSI 啟動器

iSCSI 啟動器可用來連接任何 iSCSI 目標。這不僅限於第 14.2 節 「設定 iSCSI LIO 目標伺服器」 中說明的 iSCSI 目標解決方案。iSCSI 啟動器的組態涉及兩個主要步驟:探查可用的 iSCSI 目標和設定 iSCSI 工作階段。這兩個步驟都可以使用 YaST 來完成。

14.3.1 使用 YaST 設定 iSCSI 啟動器的組態

YaST 中的 iSCSI 啟動器綜覽包含三個索引標籤:

服務:

服務索引標籤可用來在開機時啟用 iSCSI 啟動器。同時會提供設定用於該探查的唯一啟動器名稱及 iSNS 伺服器。

連接的目標:

連接的目標索引標籤會提供目前已連接 iSCSI 目標的綜覽。它與探查的目標索引標籤一樣,也提供為系統新增新目標的選項。

探查的目標:

探查的目標索引標籤提供了手動探查網路中 iSCSI 目標的途徑。

14.3.1.1 設定 iSCSI 啟動器

  1. 啟動 YaST,然後啟動網路服務 ›  iSCSI 啟動器

  2. 切換至服務索引標籤。

    Image
  3. 服務啟動下,指定 iSCSI 啟動器服務的啟動方式:

    • 開機時:: 該服務會在伺服器重新啟動時自動啟動。

    • 自訂:: (預設) 伺服器重新啟動之後,您必須執行 sudo systemctl start iscsi iscsid 來手動啟動該服務。

  4. 指定或驗證啟動器名稱

    為此伺服器上的 iSCSI 啟動器指定一個格式正確的 iSCSI 合格名稱 (IQN)。此啟動器名稱在網路上必須是全域唯一的。IQN 的一般格式如下:

    iqn.yyyy-mm.com.mycompany:n1:n2

    其中,n1 與 n2 為英數字元。例如:

    iqn.1996-04.de.suse:01:a5dfcea717a

    啟動器名稱中會自動填上伺服器上 /etc/iscsi/initiatorname.iscsi 檔案中的對應值。

    如果伺服器支援 iBFT (iSCSI 開機韌體表),啟動器名稱中會填上 IBFT 中的對應值,並且該名稱無法在此介面上變更,不過,您可以使用 BIOS 設定對此進行修改。iBFT 是指包含對 iSCSI 開機程序有用之各種參數的資訊區塊,包括伺服器的 iSCSI 目標與啟動器描述。

  5. 使用下列方法之一探查網路上的 iSCSI 目標。

14.3.1.2 使用 iSNS 探查 iSCSI 目標

只有在您的環境中安裝並設定了 iSNS 伺服器後,才可以使用此選項。如需更多資訊,請參閱第 13 章 「iSNS for Linux

  1. 在 YaST 中,選取iSCSI 啟動器,然後選取服務索引標籤。

  2. 指定 iSNS 伺服器與連接埠的 IP 位址。預設埠為 3205。

  3. 按一下確定以儲存並套用您的變更。

14.3.1.3 手動探查 iSCSI 目標

對要從您目前正設定 iSCSI 啟動器的伺服器存取的所有 iSCSI 目標伺服器重複下列程序。

  1. 在 YaST 中,選取iSCSI 啟動器,然後選取探查的目標索引標籤。

  2. 按一下探查開啟「iSCSI 啟動器探查」對話方塊。

  3. 輸入 IP 位址,並視需要變更連接埠。預設埠為 3260。

  4. 如果需要進行驗證,請取消選取無探查驗證,然後為依啟動器驗證依目標驗證指定身分證明。

  5. 下一步開始探查並連接到 iSCSI 目標伺服器。

  6. 如果需要身分證明,則在探查成功後使用連接啟動目標。

    系統會提示您提供驗證身分證明以使用所選的 iSCSI 目標。

  7. 按一下下一步完成組態。

    該目標現在即會出現在已連線目標中,並且虛擬 iSCSI 裝置現在可用。

  8. 按一下確定以儲存並套用您的變更。

  9. 您可以使用 lsscsi 指令尋找 iSCSI 目標裝置的本地裝置路徑。

14.3.1.4 設定 iSCSI 目標裝置的啟動優先設定

  1. 在 YaST 中,選取iSCSI 啟動器,然後選取已連接目標索引標籤,以檢視目前連接到伺服器的 iSCSI 目標裝置清單。

  2. 選取要管理的 iSCSI 目標裝置。

  3. 按一下切換啟動修改設定:

    自動:: 此選項用於 iSCSI 服務自身啟動時要連接的 iSCSI 目標。這是一般組態。

    開機時:: 此選項用於開機時要連接的 iSCSI 目標;也就是說,當根目錄 (/) 位於 iSCSI 上時。因此,伺服器開機時,iSCSI 目標裝置會從 initrd 進行評估。在無法從 iSCSI 開機的平台 (例如 IBM Z) 上,將會忽略此選項。因此,在這些平台上不應使用該選項,而應使用自動

  4. 按一下確定以儲存並套用您的變更。

14.3.2 手動設定 iSCSI 啟動器

iSCSI 連接的探查和組態都需要執行中的 iscsid。第一次執行探查時,會在 /etc/iscsi/ 目錄中建立 iSCSI 啟動器的內部資料庫。

如果您的探查受到密碼保護,請提供驗證資訊給 iscsid。因為執行第一次搜索時,內部資料庫還不存在,所以這時無法使用該資料庫,而必須編輯 /etc/iscsid.conf 組態檔案來提供資訊。若要新增您的搜索密碼資訊,請將下列幾行加到 /etc/iscsid.conf 結束處:

discovery.sendtargets.auth.authmethod = CHAP
discovery.sendtargets.auth.username = USERNAME
discovery.sendtargets.auth.password = PASSWORD

探查會將收到的所有值儲存在永久的內部資料庫中。此外,它會顯示所有偵測到的目標。使用下列指令執行此探查:

tux > sudo iscsiadm -m discovery --type=st --portal=TARGET_IP

輸出應如下所示:

10.44.171.99:3260,1 iqn.2006-02.com.example.iserv:systems

若要探查 iSNS 伺服器上可使用的目標,請使用以下指令:

sudo iscsiadm --mode discovery --type isns --portal TARGET_IP

針對 iSCSI 目標上定義的每個目標,會各出現一行。如需已儲存資料的詳細資訊,請參閱第 14.3.3 節 「iSCSI 啟動器資料庫」

iscsiadm 特殊的 --login 選項會建立所有需要的裝置:

tux > sudo iscsiadm -m node -n iqn.2006-02.com.example.iserv:systems --login

新產生的裝置會顯示在 lsscsi 的輸出中,而且現在可以掛接。

14.3.3 iSCSI 啟動器資料庫

iSCSI 啟動器探查到的所有資訊都儲存在位於 /etc/iscsi 的兩個資料庫檔案中。一個資料庫用來探查目標,一個資料庫用於已探查到的節點。存取資料庫時,您必須先選取要從探查資料庫或從節點資料庫中取得資料。使用 iscsiadm-m discovery-m node 參數就可以做到這一點。將 iscsiadm 與其中一個參數配合使用,可提供儲存記錄的概觀:

tux > sudo iscsiadm -m discovery
10.44.171.99:3260,1 iqn.2006-02.com.example.iserv:systems

這個範例中的目標名稱為 iqn.2006-02.com.example.iserv:systems。與這個特殊資料集相關的所有動作都需要這個名稱。若要檢查 ID iqn.2006-02.com.example.iserv:systems 的資料記錄內容,請使用下列指令:

tux > sudo iscsiadm -m node --targetname iqn.2006-02.com.example.iserv:systems
node.name = iqn.2006-02.com.example.iserv:systems
node.transport_name = tcp
node.tpgt = 1
node.active_conn = 1
node.startup = manual
node.session.initial_cmdsn = 0
node.session.reopen_max = 32
node.session.auth.authmethod = CHAP
node.session.auth.username = joe
node.session.auth.password = ********
node.session.auth.username_in = EMPTY
node.session.auth.password_in = EMPTY
node.session.timeo.replacement_timeout = 0
node.session.err_timeo.abort_timeout = 10
node.session.err_timeo.reset_timeout = 30
node.session.iscsi.InitialR2T = No
node.session.iscsi.ImmediateData = Yes
....

若要編輯這其中一個變數的值,請使用 iscsiadm 指令搭配 update 操作。例如,如果希望 iscsid 在初始化時登入 iSCSI 目標,請將 node.startup 變數設定為 automatic 值:

sudo iscsiadm -m node -n iqn.2006-02.com.example.iserv:systems \
-p ip:port --op=update --name=node.startup --value=automatic

使用 delete 操作移除過時的資料集。如果目標 iqn.2006-02.com.example.iserv:systems 不再是有效的記錄,請使用以下指令加以刪除:

tux > sudo iscsiadm -m node -n iqn.2006-02.com.example.iserv:systems \
-p ip:port --op=delete
重要
重要:無確認

請謹慎地使用此選項,因為該選項會刪除記錄,而不提供其他確認提示。

若要取得所有探查到的目標清單,請執行 sudo iscsiadm -m node 指令。

14.4 使用 targetcli-fb 設定軟體目標

targetcli 是用於管理 LinuxIO (LIO) 目標子系統組態設定的外圍程序。您可以互動方式呼叫該外圍程序,也可以像在傳統外圍程序中那樣每次執行一個指令。與傳統外圍程序類似,您可以使用 cd 指令周遊 targetcli 功能階層,並使用 ls 指令列出內容。

可用的指令取決於目前目錄。雖然每個目錄都有其各自的指令集,但也有一些指令可在所有目錄中使用 (例如 cdls 指令)。

targetcli 指令的格式如下:

[DIRECTORY] command [ARGUMENTS]

您可以在任何目錄中使用 help 指令來檢視可用指令清單,或檢視有關指令的特定資訊。

targetcli 工具在 targetcli-fb 套件中提供。此套件已在官方 SUSE Linux Enterprise Server 軟體儲存庫中提供,可使用以下指令進行安裝:

tux > sudo zypper install targetcli-fb

安裝 targetcli-fb 套件後,啟用 targetcli 服務:

tux > sudo systemctl enable targetcli
tux > sudo systemctl start targetcli

若要切換到 targetcli 外圍程序,請以 root 身分執行 targetcli

tux > sudo targetcli

然後,可以執行 ls 指令來查看預設組態。

/> ls
o- / ............................ [...]
  o- backstores ................. [...]
  | o- block ..... [Storage Objects: 0]
  | o- fileio .... [Storage Objects: 0]
  | o- pscsi ..... [Storage Objects: 0]
  | o- ramdisk ... [Storage Objects: 0]
  | o- rbd ....... [Storage Objects: 0]
  o- iscsi ............... [Targets: 0]
  o- loopback ............ [Targets: 0]
  o- vhost ............... [Targets: 0]
  o- xen-pvscsi .......... [Targets: 0]
/>

ls 指令的輸出中所示,尚未設定任何後端。因此,第一步是設定一個受支援軟體目標。

targetcli 支援以下後端:

  • fileio:本地影像檔

  • block:專屬的磁碟或分割區上的區塊儲存

  • pscsi:SCSI 直通裝置

  • ramdisk:記憶體型後端

  • rbd:Ceph RADOS 區塊裝置

為了熟悉 targetcli 的功能,請使用 create 指令將本地影像檔設定為軟體目標:

/backstores/fileio create test-disc /alt/test.img 1G

這會在指定的位置 (在本範例中為 /alt) 建立 1GB 的 test.img 影像。執行 ls,此時應會看到以下結果:

/> ls
o- / ........................................................... [...]
  o- backstores ................................................ [...]
  | o- block .................................... [Storage Objects: 0]
  | o- fileio ................................... [Storage Objects: 1]
  | | o- test-disc ... [/alt/test.img (1.0GiB) write-back deactivated]
  | |   o- alua ......     .......................... [ALUA Groups: 1]
  | |     o- default_tg_pt_gp      .... [ALUA state: Active/optimized]
  | o- pscsi .................................... [Storage Objects: 0]
  | o- ramdisk .................................. [Storage Objects: 0]
  | o- rbd ...................................... [Storage Objects: 0]
  o- iscsi .............................................. [Targets: 0]
  o- loopback ........................................... [Targets: 0]
  o- vhost .............................................. [Targets: 0]
  o- xen-pvscsi ......................................... [Targets: 0]
/>

輸出中指出,已在 /backstores/fileio 目錄下建立一個名為 test-disc 的檔案型後端儲存,並已與所建立的檔案 /alt/test.img 相關聯。請注意,新的後端儲存尚未啟用。

下一步是將一個 iSCSI 目標前端連接至該後端儲存。每個目標都必須有一個 IQN (iSCSI 完全合格的名稱)。最常用的 IQN 格式如下:

iqn.YYYY-MM.NAMING-AUTHORITY:UNIQUE-NAME

必須提供 IQN 的以下部分:

  • YYYY-MM:建立命名機構的年份和月份

  • NAMING-AUTHORITY:命名機構的網際網路網域名稱的反向語法

  • UNIQUE-NAME:由命名機構選擇的網域唯一名稱

例如,對於網域 open-iscsi.com,IQN 可以是:

iqn.2005-03.com.open-iscsi:UNIQUE-NAME

建立 iSCSI 目標時,targetcli 指令允許您指定自己的 IQN,只要該 IQN 遵循指定的格式即可。您還可以在建立目標時省略名稱,讓該指令為您建立 IQN,例如:

/> iscsi/ create

再次執行 ls

/> ls
o- / ............................................................... [...]
  o- backstores .................................................... [...]
  | o- block ........................................ [Storage Objects: 0]
  | o- fileio ....................................... [Storage Objects: 1]
  | | o- test-disc ....... [/alt/test.img (1.0GiB) write-back deactivated]
  | |   o- alua ......................................... [ALUA Groups: 1]
  | |     o- default_tg_pt_gp ............. [ALUA state: Active/optimized]
  | o- pscsi ........................................ [Storage Objects: 0]
  | o- ramdisk ...................................... [Storage Objects: 0]
  | o- rbd .......................................... [Storage Objects: 0]
  o- iscsi .................................................. [Targets: 1]
  | o- iqn.2003-01.org.linux-iscsi.e83.x8664:sn.8b35d04dd456 ... [TPGs: 1]
  |   o- tpg1 ..................................... [no-gen-acls, no-auth]
  |     o- acls ................................................ [ACLs: 0]
  |     o- luns ................................................ [LUNs: 0]
  |     o- portals .......................................... [Portals: 1]
  |       o- 0.0.0.0:3260 ........................................... [OK]
  o- loopback ............................................... [Targets: 0]
  o- vhost .................................................. [Targets: 0]
  o- xen-pvscsi ............................................. [Targets: 0]
/>

輸出顯示建立了 iSCSI 目標節點,並自動為其產生 IQN iqn.2003-01.org.linux-iscsi.e83.x8664:sn.8b35d04dd456

請注意,targetcli 還建立並啟用了預設的目標入口群組 tpg1。這是因為位於根層級的變數 auto_add_default_portalauto_enable_tpgt 預設設定為 true

該指令還使用 0.0.0.0 IPv4 萬用字元建立了預設入口網站。這表示,任何 IPv4 位址都可以存取設定的目標。

下一步是為 iSCSI 目標建立 LUN (邏輯單位編號)。完成此操作的最佳做法是讓 targetcli 自動指定其名稱和編號。切換到 iSCSI 目標所在的目錄,然後在 lun 目錄中使用 create 指令為後端儲存指定 LUN。

/> cd /iscsi/iqn.2003-01.org.linux-iscsi.e83.x8664:sn.8b35d04dd456/
/iscsi/iqn.2003-01.org.linux-iscsi.e83.x8664:sn.8b35d04dd456> cd tpg1
/iscsi/iqn.2003-01.org.linux-iscsi.e83.x8664:sn.8b35d04dd456/tpg1> luns/
create /backstores/fileio/test-disc

執行 ls 指令以查看變更:

/iscsi/iqn.2003-01.org.linux-iscsi.e83.x8664:sn.8b35d04dd456/tpg1> ls
o- tpg1 .............................................. [no-gen-acls, no-auth]
      o- acls ..................................................... [ACLs: 0]
      o- luns ..................................................... [LUNs: 1]
      | o- lun0 ....... [fileio/test-disc (/alt/test.img) (default_tg_pt_gp)]
      o- portals ............................................... [Portals: 1]
        o- 0.0.0.0:3260 ................................................ [OK]

現在,即建立了一個具有 1GB 檔案型後端儲存的 iSCSI 目標。該目標的名稱為 iqn.2003-01.org.linux-iscsi.e83.x8664:sn.8b35d04dd456,可從系統的任何網路連接埠存取它。

最後,需要確定啟動器能夠存取設定的目標。若要實現此目的,一種方法是為每個啟動器建立一個允許其連接至目標的 ACL 規則。在這種情況下,必須使用其 IQN 列出每個所需的啟動器。您可以在 /etc/iscsi/initiatorname.iscsi 檔案中找到現有啟動器的 IQN。使用以下指令新增所需的啟動器 (在本範例中為 iqn.1996-04.de.suse:01:54cab487975b):

/iscsi/iqn.2003-01.org.linux-iscsi.e83.x8664:sn.8b35d04dd456/tpg1> acls/ create iqn.1996-04.de.suse:01:54cab487975b
Created Node ACL for iqn.1996-04.de.suse:01:54cab487975b
Created mapped LUN 0.
/iscsi/iqn.2003-01.org.linux-iscsi.e83.x8664:sn.8b35d04dd456/tpg1>

您也可以在不限制存取的展示模式下執行目標。此方法的安全性較低,但適合展示目的,並可以在封閉式網路中執行。若要啟用展示模式,請使用以下指令:

/iscsi/iqn.2003-01.org.linux-iscsi.e83.x8664:sn.8b35d04dd456/tpg1> set attribute generate_node_acls=1
/iscsi/iqn.2003-01.org.linux-iscsi.e83.x8664:sn.8b35d04dd456/tpg1> set attribute demo_mode_write_protect=0

最後一步是使用根目錄中可用的 saveconfig 指令儲存建立的組態:

/> saveconfig /etc/target/example.json

如果在某個時間點您需要從儲存的檔案還原組態,需要先清除目前組態。請記住,除非先儲存組態,否則清除目前組態會導致資料遺失。使用以下指令清除並重新載入組態:

/> clearconfig
As a precaution, confirm=True needs to be set
/> clearconfig confirm=true
All configuration cleared
/> restoreconfig /etc/target/example.json
Configuration restored from /etc/target/example.json
/>

若要測試設定的目標是否正常工作,請使用同一系統上安裝的 open-iscsi iSCSI 啟動器連接該目標 (將 HOSTNAME 取代為本地機器的主機名稱):

tux > iscsiadm -m discovery -t st -p HOSTNAME

此指令將傳回找到的目標清單,例如:

192.168.20.3:3260,1 iqn.2003-01.org.linux-iscsi.e83.x8664:sn.8b35d04dd456

然後,您可以使用 login iSCSI 指令連接至列出的目標。這使得目標可充當本地磁碟使用。

14.5 安裝時使用 iSCSI 磁碟

使用支援 iSCSI 的韌體時,支援從 AMD64/Intel 64 和 IBM POWER 架構上的 iSCSI 磁碟開機。

若要在安裝期間使用 iSCSI 磁碟,必須將下列參數新增至開機參數行:

withiscsi=1

安裝期間會顯示一個額外的螢幕,可讓您將 iSCSI 磁碟連接至系統,並在安裝過程中使用它們。

注意
注意:掛接點支援

開機期間,iSCSI 裝置將非同步顯示。雖然 initrd 可保證為根檔案系統正確設定這些裝置,但對於任何其他檔案系統或掛接點 (例如 /usr),並無此類保證。因此,任何系統掛接點 (例如 /usr/var) 都不受支援。若要使用這些裝置,請務必正確同步相應的服務和裝置。

14.6 iSCSI 疑難排解

本節說明一些已知問題和 iSCSI 目標及 iSCSI 啟動器問題的可能解決方案。

14.6.1 在 iSCSI LIO 目標伺服器上設定目標 LUN 時發生入口錯誤

新增或編輯 iSCSI LIO 目標群組時發生錯誤:

Problem setting network portal IP_ADDRESS:3260

/var/log/YasT2/y2log 記錄檔案包含下列錯誤:

find: `/sys/kernel/config/target/iscsi': No such file or directory

如果 iSCSI LIO 目標伺服器軟體目前未在執行中,則會發生此問題。若要解決此問題,請結束 YaST,並在指令行中使用 systemctl start targetcli 指令手動啟動 iSCSI LIO,然後再試一次。

您也可以輸入下列指令來檢查 configfsiscsi_target_modtarget_core_mod 是否已載入。隨即會顯示回應範例。

tux > sudo lsmod | grep iscsi
iscsi_target_mod      295015  0
target_core_mod       346745  4
iscsi_target_mod,target_core_pscsi,target_core_iblock,target_core_file
configfs               35817  3 iscsi_target_mod,target_core_mod
scsi_mod              231620  16
iscsi_target_mod,target_core_pscsi,target_core_mod,sg,sr_mod,mptctl,sd_mod,
scsi_dh_rdac,scsi_dh_emc,scsi_dh_alua,scsi_dh_hp_sw,scsi_dh,libata,mptspi,
mptscsih,scsi_transport_spi

14.6.2 iSCSI LIO 目標在其他電腦中不可見

如果在目標伺服器上使用防火牆,則必須開啟要用於允許其他電腦看到 iSCSI LIO 目標的 iSCSI 連接埠。如需更多資訊,請參閱第 14.2.1 節 「iSCSI LIO 目標服務啟動和防火牆設定」

14.6.3 iSCSI 流量中的資料封包被丟棄

如果防火牆過於忙碌,就可能會丟棄封包。SUSE 防火牆預設設定為在三分鐘之後丟棄封包。如果您發現 iSCSI 流量封包被丟棄,請考慮將 SUSE 防火牆設定為在過於忙碌時將封包排入佇列,而不是將其丟棄。

14.6.4 將 iSCSI 磁碟區與 LVM 配合使用

當在 iSCSI 目標上使用 LVM 時,請使用本節中的疑難排解提示。

14.6.4.1 檢查在開機時 iSCSI 啟動器是否執行探查

如果設定了 iSCSI 啟動器,請務必啟用開機時探查功能,以便 udev 可以在開機時探查 iSCSI 裝置並設定 LVM 要使用的裝置。

14.6.4.2 檢查在開機時是否執行 iSCSI 目標探查

請記住,udev 會提供裝置的預設設定。確保建立裝置的所有應用程式在開機時啟動,以使 udev 可以在系統啟動時辨識裝置並為它們指定裝置。如果應用程式或服務直到後來才啟動,udev 便無法在開機時按照設定自動建立裝置。

14.6.5 組態檔案設定為手動時會掛接 iSCSI 目標

如果您之前手動修改了 /etc/iscsi/iscsid.conf 組態檔案,那麼,即使將 node.startup 選項設定為手動,Open-iSCSI 啟動時也會掛接目標。

檢查 /etc/iscsi/nodes/TARGET_NAME/IP_ADDRESS,PORT/default 檔案。它包含可以覆寫 /etc/iscsi/iscsid.conf 檔案的 node.startup 設定。使用 YaST 介面將掛接選項設定為手動,還會在 /etc/iscsi/nodes/TARGET_NAME/IP_ADDRESS,PORT/default 檔案中設定 node.startup = manual

14.7 iSCSI LIO 目標術語

備援儲存庫

一個實體儲存物件,可在 iSCSI 端點下提供實際儲存裝置。

CDB (指令描述子區塊)

SCSI 指令的標準格式。CDB 的長度通常為 6、10 或 12 個位元組,但也可以達到 16 個位元組或可變長度。

CHAP (Challenge Handshake 驗證通訊協定)

一種點對點通訊協定 (PPP) 驗證方法,用於向一台電腦確認另一台電腦的身分。連結控制通訊協定 (LCP) 連接兩台電腦並且協商 CHAP 方法之後,驗證程式會將一個隨機處理安全傳送給對等。對等會根據處理安全和私密金鑰發出以雜湊加密的回應。驗證程式會針對它自己計算所得的預期雜湊值驗證雜湊回應,以確認驗證或終止連接。CHAP 定義於 RFC 1994 中。

CID (連接識別碼)

由啟動器產生的 16 位元編號,用於唯一地識別兩個 iSCSI 裝置之間的連接。此編號會在登入階段期間顯示。

端點

iSCSI 目標名稱與 iSCSI TPG (IQN + 標記) 的組合。

EUI (延伸唯一識別碼)

在全球範圍內唯一識別每個裝置的 64 位元編號。其格式由指定公司的唯一 24 位元編號以及該公司指定給所建置的每個裝置的 40 位元編號組成。

執行者

SCSI 工作階段的發出端。一般是控制裝置,例如電腦。

IPS (網際網路通訊協定儲存)

使用 IP 通訊協定在儲存網路中移動資料的一類通訊協定或裝置。FCIP (網際網路通訊協定光纖通道)、iFCP (網際網路光纖通道通訊協定) 和 iSCSI (網際網路 SCSI) 都屬於 IPS 通訊協定。

IQN (iSCSI 合格的名稱)

在全球範圍內唯一識別每個裝置的 iSCSI 名稱格式 (例如:iqn.5886.com.acme.tapedrive.sn‐a12345678)。

ISID (啟動器工作階段識別碼)

由啟動器產生的一個 48 位元編號,用於唯一識別啟動器與目標之間的工作階段。此值在登入過程中建立,然後將與登入 PDU 一起傳送給目標。

MCS (每個工作階段多個連接)

屬於 iSCSI 規格的一部分,它允許在啟動器與目標之間存在多個 TCP/IP 連接。

MPIO (多重路徑 I/O)

一種可在伺服器與儲存之間建立多個資料備援路徑的方法。

網路入口

iSCSI 端點與 IP 位址及 TCP (傳輸控制通訊協定) 連接埠的組合。按照 IANA (Internet Assigned Numbers Authority) 的定義,TCP 連接埠 3260 是 iSCSI 通訊協定的埠號。

SAM (SCSI 架構模型)

使用一般術語說明 SCSI 行為的文件,允許不同類型的裝置透過各種媒體進行通訊。

目標

SCSI 工作階段的接收端,通常是一個裝置,例如磁碟機、磁帶機或掃描器。

目標群組 (TG)

在建立檢視窗時視為同等看待的所有 SCSI 目標連接埠的清單。建立檢視窗可便於進行 LUN (邏輯單位編號) 對應。每個檢視項目都會指定一個目標群組、主機群組和一個 LUN。

目標連接埠

一個 iSCSI 端點與一或多個 LUN 的組合。

目標連接埠群組 (TPG)

IP 位址和 TCP 埠號的清單,用於決定特定 iSCSI 目標將要監聽的介面。

目標工作階段識別碼 (TSID)

由目標產生的一個 16 位元編號,用於唯一識別啟動器與目標之間的工作階段。此值在登入過程中建立,然後將與登入回應 PDU (通訊協定資料單位) 一起傳送給啟動器。

14.8 其他資訊

iSCSI 通訊協定已存在多年,因此有許多將 iSCSI 與 SAN 解決方案進行比較、確立效能基準的評論,還有介紹硬體解決方案的文件。如需詳細資訊,請參閱 http://www.open-iscsi.com/ 上的 Open-iSCSI 專案首頁。

此外,請參閱 iscsiadmiscsid 的 man 頁面,以及範例組態檔案 /etc/iscsid.conf

15 乙太網路光纖通道儲存:FCoE

許多企業資料中心的 LAN 和資料流量都依賴於乙太網路,而他們的儲存基礎架構則依賴於光纖通道網路。開放式乙太網路光纖通道 (FCoE) 啟動器軟體允許具有乙太網路卡的伺服器透過乙太網路連接至光纖通道儲存子系統。而在以前,此連接性僅可供具有光纖通道配接器的系統透過光纖通道光纖使用。FCoE 技術支援網路會聚,降低了資料中心的複雜程度。這可協助您保護在光纖通道儲存基礎架構中的現有投資,並簡化網路管理。

開放式乙太網路光纖通道 SAN
圖 15.1︰ 開放式乙太網路光纖通道 SAN

開放式 FCoE 可讓您在主機上,而不是在主機匯流排配接器上的專屬硬體上執行光纖通道通訊協定。它專用於 10 Gbps (每秒 GB) 乙太網路卡,但是也可用於支援暫停訊框的任何乙太網路卡。啟動器軟體提供了光纖通道通訊協定處理模組以及基於乙太網路的傳輸模組。開放式 FCoE 模組用作 SCSI 的低階驅動程式。開放式 FCoE 傳輸使用 net_device 來傳送和接收封包。資料中心橋接 (DCB) 驅動程式提供 FCoE 的服務品質。

FCoE 是一種封裝通訊協定,它可透過乙太網路連接移動光纖通道通訊協定流量,而不需要變更光纖通道訊框。這使得網路安全和流量管理基礎架構可以如同採用光纖通道一樣利用 FCoE。

如果存在下列情況,您可以選擇在您的企業中部署 FCoE:

  • 您的企業已擁有光纖通道儲存子系統,以及具備光纖通道技能和知識的管理員。

  • 您要在網路中部署 10 Gbps 乙太網路。

本節說明如何在網路中設定 FCoE。

15.1 在安裝期間設定 FCoE 介面

如果在交換器上為伺服器與光纖通道儲存基礎架構之間的連接啟用了 FCoE,則可以透過適用於 SUSE Linux Enterprise Server 的 YaST 來在作業系統安裝期間設定 FCoE 磁碟。某些類型的系統 BIOS 能自動偵測到 FCoE 磁碟,並向 YaST 安裝軟體報告這些磁碟。不過,並非所有類型的 BIOS 都支援 FCoE 磁碟的自動偵測。在此情況下,若要啟用自動偵測,則可以在開始安裝時將 withfcoe 選項新增至核心指令行:

withfcoe=1

偵測到 FCoE 磁碟時,YaST 安裝會在此時提供用於設定 FCoE 例項的選項。在「磁碟啟動」頁面上,選取設定 FCoE 介面以存取 FCoE 組態。如需如何設定 FCoE 介面的相關資訊,請參閱第 15.3 節 「使用 YaST 管理 FCoE 服務」

Image
注意
注意:掛接點支援

開機期間,FCoE 裝置將非同步顯示。雖然 initrd 可保證為根檔案系統正確設定這些裝置,但對於任何其他檔案系統或掛接點 (例如 /usr),並無此類保證。因此,任何系統掛接點 (例如 /usr/var) 都不受支援。若要使用這些裝置,請務必正確同步相應的服務和裝置。

15.2 安裝 FCoE 和 YaST FCoE 用戶端

您可透過在交換器上啟用 FCoE 以連接伺服器的方式,於儲存基礎架構中設定 FCoE 磁碟。如果在安裝 SUSE Linux Enterprise Server 作業系統時 FCoE 磁碟可用,安裝期間會自動安裝 FCoE 啟動器軟體。

如果 FCoE 啟動器軟體和 YaST FCoE 用戶端軟體均未安裝,請使用下列程序透過下面的指令手動安裝它們:

tux > sudo zypper in yast2-fcoe-client fcoe-utils

您也可以使用 YaST 軟體管理員來安裝以上所列套件。

15.3 使用 YaST 管理 FCoE 服務

您可以使用「YaST FCoE 用戶端組態」選項來為光纖通道儲存基礎架構中的 FCoE 磁碟建立、設定和移除 FCoE 介面。若要使用此選項,必須安裝並執行 FCoE 啟動器服務 (fcoemon 精靈) 和「連結層探查通訊協定」代理程式精靈 (llpad),並且必須在支援 FCoE 的交換器上啟用 FCoE 連接。

  1. 啟動 YaST 並選取網路服務 ›  FCoE 用戶端組態

    Image
  2. 服務索引標籤上,可以視需要檢視或修改 FCoE 服務和 Lldpad (「連結層探查協定」代理程式精靈) 服務啟動時間。

    • 啟動 FCoE 服務:: 指定是在伺服器開機時啟動乙太網路光纖通道服務 fcoemon 精靈還是手動啟動。該精靈用於控制 FCoE 介面,並可與 llpad 精靈建立連接。值為開機時(預設) 或手動

    • 啟動 Lldpad 服務:: 指定是在伺服器開機時啟動「連結層探查通訊協定」代理程式 llpad 精靈,還是手動啟動該精靈。llpad 精靈會向 fcoemon 精靈報告資料中心橋接功能和 FCoE 介面組態的相關資訊。值為開機時(預設) 或手動

    如果修改設定,請按一下確定以儲存並套用變更。

  3. 介面索引標籤上,可以檢視伺服器上所有偵測到的網路卡的相關資訊,包括 VLAN 和 FCoE 組態的相關資訊。您還可以建立 FCoE VLAN 介面、變更現有 FCoE 介面的設定或移除 FCoE 介面。

    Image

    請使用 FCoE VLAN 介面欄來確定 FCoE 是否可用:

    介面名稱

    如果將名稱 (例如 eth4.200) 指定給介面,則 FCoE 在交換器上可用,並會為配接器啟動 FCoE 介面。

    未設定組態:

    如果狀態是未設定,則表示在交換器上啟用 FCoE,但是尚未為配接器啟動 FCoE 介面。選取配接器,然後按一下建立 FCoE VLAN 介面以在配接器上啟動介面。

    不可用:

    如果狀態是不可用,則表示因為沒有在交換器上為該連接啟用 FCoE,所以 FCoE 對於配接器不可用。

  4. 若要設定未經設定之支援 FCoE 的配接卡,請選取它,然後按一下建立 FCoE VLAN 介面。對顯示的問題按一下確認。

    該配接卡現在會以某個介面名稱列在 FCoE VLAN 介面欄中。

  5. 若要變更已設定配接卡的設定,請在清單中選取它,然後按一下變更設定

    可設定下列選項:

    FCoE 啟用

    啟用或停用為配接器建立 FCoE 例項。

    需要 DCB

    指定配接卡是否需要資料中心橋接 (通常會需要)。

    自動 VLAN

    指定 fcoemon 精靈是否自動建立 VLAN 介面。

    如果修改設定,請按一下下一步以儲存並套用變更。這些設定會寫入 /etc/fcoe/cfg-ethX 檔案中。fcoemon 精靈會在啟始化時讀取每個 FCoE 介面的組態檔案。

  6. 若要移除已設定的介面,請從清單中選取它。按一下移除介面,然後按一下繼續加以確認。FCoE 介面值會變更為未設定

  7. 組態索引標籤上,可以檢視或修改 FCoE 系統服務的一般設定。您可以從 FCoE 服務程序檔和 fcoemon 精靈中啟用或停用除錯訊息,並可指定是否將訊息傳送至系統記錄。

    Image
  8. 按一下確定以儲存並套用變更。

15.4 使用指令設定 FCoE

  1. 開啟終端機主控台。

  2. 使用 YaST 設定乙太網路的網路介面卡,例如 eth2

  3. 啟動「連結層探查通訊協定」代理程式精靈 (llpad)。

    tux > sudo systemctl start lldpad
  4. 在乙太網路卡上啟用資料中心橋接。

    tux > dcbtool sc eth2 dcb on
      Version:       2
      Command:       Set Config
      Feature:       DCB State
      Port:          eth2
      Status:        Successful
  5. 啟用並設定資料中心橋接的優先程度流程控制 (PFC) 設定。

    tux > sudo dcbtool sc eth<x> pfc e:1 a:1 w:1

    引數設定值為:

    e:<0|1>

    控制功能的啟用。

    a:<0|1>

    控制是否透過資料中心橋接交換通訊協定向對等推廣功能。

    w:<0|1>

    控制功能是否希望根據從對等接收到的回饋變更其操作組態。

  6. 啟用資料中心橋接以接受交換器的 FCoE 優先程度設定。

    tux > sudo dcbtool sc eth2 app:fcoe e:1
      Version:       2
      Command:       Set Config
      Feature:       Application FCoE
      Port:          eth2
      Status:        Successful
  7. 將預設 FCoE 組態檔案複製到 /etc/fcoe/cfg-eth2

    tux > sudo cp /etc/fcoe/cfg-ethx /etc/fcoe/cfg-eth2
  8. 啟動 FCoE 啟動器服務。

    systemctl start fcoe.service
  9. 將「連結層探查通訊協定」代理程式精靈 (llpad) 和 FCoE 啟動器服務設定為開機時啟動。

    tux > systemctl enable llpad fcoe

15.5 使用 FCoE 管理工具管理 FCoE 例項

fcoeadm 公用程式是乙太網路光纖通道 (FCoE) 管理工具。可以在指定網路介面上使用該工具來建立、損毀和重設 FCoE 例項。fcoeadm 公用程式透過通訊端介面將指令傳送給正在執行的 fcoemon 程序。如需 fcoemon 的相關資訊,請參閱 man 8 fcoemon

fcoeadm 公用程式可讓您查詢 FCoE 例項的下列相關資訊:

  • 介面

  • 目標 LUN

  • 連接埠統計資料

fcoeadm 公用程式是 fcoe-utils 套件的一部分。該指令的一般語法如下所示:

fcoeadm
  [-c|--create] [<ethX>]
  [-d|--destroy] [<ethX>]
  [-r|--reset] [<ethX>]
  [-S|--Scan] [<ethX>]
  [-i|--interface] [<ethX>]
  [-t|--target] [<ethX>]
  [-l|--lun] [<ethX>]
  [-s|--stats <ethX>] [<interval>]
  [-v|--version]
  [-h|--help]

如需詳細資料,請參閱 man 8 fcoeadm

範例

fcoeadm -c eth2.101

在 eth2.101 上建立 FCoE 例項。

fcoeadm -d eth2.101

損毀 eth2.101 上的 FCoE 例項。

fcoeadm -i eth3

顯示介面 eth3 上所有 FCoE 例項的相關資訊。如果未指定任何介面,則會顯示所有已建立 FCoE 例項之介面的相關資訊。下面的範例會顯示連接 eth0.201 的相關資訊:

tux > sudo fcoeadm -i eth0.201
  Description:      82599EB 10-Gigabit SFI/SFP+ Network Connection
  Revision:         01
  Manufacturer:     Intel Corporation
  Serial Number:    001B219B258C
  Driver:           ixgbe 3.3.8-k2
  Number of Ports:  1

      Symbolic Name:     fcoe v0.1 over eth0.201
      OS Device Name:    host8
      Node Name:         0x1000001B219B258E
      Port Name:         0x2000001B219B258E
      FabricName:        0x2001000573D38141
      Speed:             10 Gbit
      Supported Speed:   10 Gbit
      MaxFrameSize:      2112
      FC-ID (Port ID):   0x790003
      State:             Online
fcoeadm -l eth3.101

顯示在連接 eth3.101 上探查到的所有 LUN 的詳細資訊。如果未指定任何連接,則會顯示在所有 FCoE 連接上探查到的所有 LUN 的相關資訊。

fcoeadm -r eth2.101

重設 eth2.101 上的 FCoE 例項。

fcoeadm -s eth3 3

以三秒的時間間隔顯示具有 FCoE 例項之特定 eth 3 連接埠的統計資訊。每隔一段時間會顯示一行統計資料。若未指定時間間隔,則使用預設值一秒。

fcoeadm -t eth3

顯示從具有 FCoE 例項之指定 eth3 連接埠探查到的所有目標的相關資訊。每個已探查到的目標後面列出了所有相關聯的 LUN。若未指定例項,則會顯示來自所有具有 FCoE 例項之連接埠的目標。下面的範例顯示來自 eth0.201 連接之目標的相關資訊:

tux > sudo fcoeadm -t eth0.201
  Interface:        eth0.201
  Roles:            FCP Target
  Node Name:        0x200000D0231B5C72
  Port Name:        0x210000D0231B5C72
  Target ID:        0
  MaxFrameSize:     2048
  OS Device Name:   rport-8:0-7
  FC-ID (Port ID):  0x79000C
  State:            Online

LUN ID  Device Name   Capacity   Block Size  Description
------  -----------  ----------  ----------  ----------------------------
    40  /dev/sdqi     792.84 GB      512     IFT DS S24F-R2840-4 (rev 386C)
    72  /dev/sdpk     650.00 GB      512     IFT DS S24F-R2840-4 (rev 386C)
   168  /dev/sdgy       1.30 TB      512     IFT DS S24F-R2840-4 (rev 386C)

15.6 其他資訊

如需相關資訊,請參閱以下文件:

  • 如需開放式 FCoE 服務精靈的相關資訊,請參閱 fcoemon(8) man 頁面。

  • 如需開放式 FCoE 管理工具的相關資訊,請參閱 fcoeadm(8) man 頁面。

  • 如需資料中心橋接組態工具的相關資訊,請參閱 dcbtool(8) man 頁面。

  • 如需「連結層探查協定」代理程式精靈的相關資訊,請參閱 lldpad(8) man 頁面。

  • 如需一般資訊,請參閱 Open-FCoE 首頁:http://www.open-fcoe.org/dokuwiki/start

16 NVMe over Fabric

本章介紹如何設定 NVMe over Fabric 主機和目標。

16.1 綜覽

NVM Express (NVMe) 是有關存取非揮發性儲存 (通常是 SSD 磁碟) 的介面標準。與 SATA 相比,NVMe 支援的速度要高得多,並且延遲更低。

NVMe over Fabric 是用於透過不同網路架構存取 NVMe 儲存的結構。這些網路架構有 RDMA光纖通道 NVMe (FC-NVMe) 等。NVMe over Fabric 的作用類似於 iSCSI。為提高容錯能力,NVMe over Fabric 內建了多重路徑支援。NVMe over Fabric 多重路徑不是以傳統 DM 多重路徑為基礎。

NVMe 主機是連接到 NVMe 目標的機器。NVMe 目標是共用其 NVMe 區塊裝置的機器。

SUSE Linux Enterprise Server 15 SP2 支援 NVMe。提供了可用於 NVMe 區塊儲存及 NVMe over Fabric 目標和主機的核心模組。

若要查看您的硬體是否有任何特殊考量,請參閱第 16.4 節 「特殊硬體組態」

16.2 設定 NVMe over Fabric 主機

若要使用 NVMe over Fabric,必須在目標上使用支援的網路方法。支援的方法包括光纖通道 NVMe 和 RDMA。以下小節介紹如何將主機連接到 NVMe 目標。

16.2.1 安裝指令行用戶端

若要使用 NVMe over Fabric,需要安裝 nvme 指令行工具。請使用 zypper 安裝該工具:

tux > sudo zypper in nvme-cli

使用 nvme --help 可列出所有可用的子指令。我們提供了 nvme 子指令的 man 頁面。執行 man nvme-SUBCOMMAND 可參閱相關的 man 頁面。例如,若要檢視 discover 子指令的 man 頁面,請執行 man nvme-discover

16.2.2 探查 NVMe over Fabric 目標

若要列出 NVMe over Fabric 目標上的可用 NVMe 子系統,您需有探查控制器位址和服務 ID。

tux > sudo nvme discover -t TRANSPORT -a DISCOVERY_CONTROLLER_ADDRESS -s SERVICE_ID

以基礎傳輸媒體 (looprdmafc) 取代 TRANSPORT。以探查控制器的位址取代 DISCOVERY_CONTROLLER_ADDRESS。對於 RDMA,此位址應是 IPv4 位址。以傳輸服務 ID 取代 SERVICE_ID。如果服務以 IP 為基礎 (例如 RDMA),則服務 ID 指定連接埠號碼。對於光纖通道,不需要提供服務 ID。

NVMe 主機只會看到它們有權連接的子系統。

範例:

tux > sudo nvme discover -t rdma -a 10.0.0.1 -s 4420

如需更多詳細資料,請參閱 man nvme-discover

16.2.3 連接 NVMe over Fabric 目標

識別 NVMe 子系統後,可以使用 nvme connect 指令來連接它。

tux > sudo nvme connect -t transport -a DISCOVERY_CONTROLLER_ADDRESS -s SERVICE_ID -n SUBSYSTEM_NQN

以基礎傳輸媒體 (looprdmafc) 取代 TRANSPORT。以探查控制器的位址取代 DISCOVERY_CONTROLLER_ADDRESS。對於 RDMA,此位址應是 IPv4 位址。以傳輸服務 ID 取代 SERVICE_ID。如果服務以 IP 為基礎 (例如 RDMA),則此 ID 指定連接埠號碼。以探查指令找到的所需子系統的 NVMe 合格名稱取代 SUBSYSTEM_NQNNQNNVMe 合格名稱 (NVMe Qualified Name) 的縮寫。NQN 必須是唯一的。

範例:

tux > sudo nvme connect -t rdma -a 10.0.0.1 -s 4420 -n nqn.2014-08.com.example:nvme:nvm-subsystem-sn-d78432

或者,使用 nvme connect-all 連接探查到的所有名稱空間。如需進階用法,請參閱 man nvme-connectman nvme-connect-all

16.2.4 多重路徑

預設會啟用 NVMe 原生多重路徑。若要列印多重路徑裝置的配置,請使用指令 nvme list-subsys。若要停用 NVMe 原生多重路徑,請新增 nvme-core.multipath=N 做為開機參數。

指令 multipath -ll 有相容模式,可顯示 NVMe 多重路徑裝置。

16.3 設定 NVMe over Fabric 目標

16.3.1 安裝指令行用戶端

若要設定 NVMe over Fabric 目標,需要安裝 nvmetcli 指令行工具。請使用 zypper 安裝該工具:

tux > sudo zypper in nvmetcli

上提供了 nvmetclihttp://git.infradead.org/users/hch/nvmetcli.git/blob_plain/HEAD:/Documentation/nvmetcli.txt 的最新文件.

16.3.2 組態步驟

下面的程序舉例說明如何設定 NVMe over Fabric 目標。

組態儲存在樹狀結構中。使用 cd 指令可進行導覽。使用 ls 可列出物件。您可以使用 create 建立新物件。

  1. 啟動 nvmectli 互動式外圍程序:

    tux > sudo nvmetcli
  2. 建立新連接埠:

    (nvmetcli)> cd ports
    (nvmetcli)> create 1
    (nvmetcli)> ls 1/
    o- 1
      o- referrals
      o- subsystems
  3. 建立 NVMe 子系統:

    (nvmetcli)> cd /subsystems
    (nvmetcli)> create nqn.2014-08.org.nvmexpress:NVMf:uuid:c36f2c23-354d-416c-95de-f2b8ec353a82
    (nvmetcli)> cd nqn.2014-08.org.nvmexpress:NVMf:uuid:c36f2c23-354d-416c-95de-f2b8ec353a82/
    (nvmetcli)> ls
    o- nqn.2014-08.org.nvmexpress:NVMf:uuid:c36f2c23-354d-416c-95de-f2b8ec353a82
      o- allowed_hosts
      o- namespaces
  4. 建立新的名稱空間,並在其中設定 NVMe 裝置:

    (nvmetcli)> cd namespaces
    (nvmetcli)> create 1
    (nvmetcli)> cd 1
    (nvmetcli)> set device path=/dev/nvme0n1
    Parameter path is now '/dev/nvme0n1'.
  5. 啟用先前建立的名稱空間:

    (nvmetcli)> cd ..
    (nvmetcli)> enable
    The Namespace has been enabled.
  6. 顯示建立的名稱空間:

    (nvmetcli)> cd ..
    (nvmetcli)> ls
    o- nqn.2014-08.org.nvmexpress:NVMf:uuid:c36f2c23-354d-416c-95de-f2b8ec353a82
      o- allowed_hosts
      o- namespaces
        o- 1
  7. 允許所有主機使用該子系統。只有在安全環境中才可這樣做。

    (nvmetcli)> set attr allow_any_host=1
    Parameter allow_any_host is now '1'.

    或者,可以只允許特定的主機建立連接:

    (nvmetcli)> cd nqn.2014-08.org.nvmexpress:NVMf:uuid:c36f2c23-354d-416c-95de-f2b8ec353a82/allowed_hosts/
    (nvmetcli)> create hostnqn
  8. 列出建立的所有物件:

    (nvmetcli)> cd /
    (nvmetcli)> ls
    o- /
      o- hosts
      o- ports
      | o- 1
      |   o- referrals
      |   o- subsystems
      o- subsystems
        o- nqn.2014-08.org.nvmexpress:NVMf:uuid:c36f2c23-354d-416c-95de-f2b8ec353a82
          o- allowed_hosts
          o- namespaces
            o- 1
  9. 使目標可透過 RDMA 使用:

    (nvmetcli)> cd ports/1/
    (nvmetcli)> set addr adrfam=ipv4 trtype=rdma traddr=10.0.0.1 trsvcid=4420
    Parameter trtype is now 'rdma'.
    Parameter adrfam is now 'ipv4'.
    Parameter trsvcid is now '4420'.
    Parameter traddr is now '10.0.0.1'.

    或者,使目標可透過光纖通道使用:

    (nvmetcli)> cd ports/1/
    (nvmetcli)> set addr adrfam=fc trtype=fc traddr=nn-0x1000000044001123:pn-0x2000000055001123 trsvcid=none

16.3.3 備份和還原目標組態

可使用以下指令在 JSON 檔案中儲存目標組態:

tux > sudo nvmetcli
(nvmetcli)> saveconfig nvme-target-backup.json

若要還原組態,請使用:

(nvmetcli)> restore nvme-target-backup.json

您還可以抹除目前組態:

(nvmetcli)> clear

16.4 特殊硬體組態

16.4.1 綜覽

某些硬體需要特殊的組態才能正常運作。請瀏覽以下章節的標題,確定您是否使用了所提到的任何裝置或廠商。

16.4.2 Broadcom

如果您在使用 Broadcom Emulex LightPulse Fibre Channel SCSI 驅動程式,請在 lpfc 模組的目標和主機中新增核心組態參數:

tux > sudo echo "options lpfc lpfc_enable_fc4_type=3" > /etc/modprobe.d/lpfc.conf

確定 Broadcom 介面卡韌體的版本至少為 11.4.204.33。另請確定已安裝最新版本的 nvme-clinvmetcli 和核心。

若要啟用光纖通道連接埠做為 NVMe 目標,需要額外設定一個模組參數:lpfc_enable_nvmet= COMMA_SEPARATED_WWPNS。請輸入帶有前置 0x 的 WWPN,例如 lpfc_enable_nvmet=0x2000000055001122,0x2000000055003344。系統只會為目標模式設定列出的 WWPN。可將光纖通道連接埠設定為目標啟動器。

16.4.3 Marvell

QLE269x 和 QLE27xx 介面卡上都支援 FC-NVMe。Marvell® QLogic® QLA2xxx 光纖通道驅動程式中預設會啟用 FC-NVMe 支援。

若要確認是否已啟用 NVMe,請執行以下指令:

tux > cat /sys/module/qla2xxx/parameters/ql2xnvmeenable

如果顯示 1,則表明已啟用 NVMe,顯示 0 表示已停用 NVMe。

然後,檢查以下指令的輸出,確定 Marvell 介面卡韌體的版本不早於 8.08.204。

tux > cat /sys/class/scsi_host/host0/fw_version

最後,確定已安裝適用於 SUSE Linux Enterprise Server 的最新版本 ( nvme-cli, QConvergeConsoleCLI) 及核心。例如,您可以執行

root # zypper lu && zypper pchk

來檢查更新和修補程式。

如需安裝的更多詳細資料,請參閱下列 Marvell 使用者指南中的 FC-NVMe 部分:

16.5 更多資訊

如需 nvme 指令功能的更多詳細資料,請參閱 nvme nvme-help

以下連結提供了 NVMe 和 NVMe over Fabric 的簡介:

17 管理裝置的多重路徑 I/O

本章描述如何透過使用多重路徑 I/O (MPIO) 管理伺服器和區塊儲存裝置間多重路徑的容錯移轉和路徑負載平衡。

17.1 瞭解多重路徑 I/O

多重路徑是指伺服器與相同實體或邏輯區塊儲存裝置在伺服器中的主機匯流排介面卡與裝置的儲存控制器之間、跨多重實體路徑進行通訊的能力,通常是在光纖通道 (FC) 或 iSCSI SAN 環境中進行。若有多個通道可用,您還可以與直接連接的儲存建立多個連接。

Linux 多重路徑提供了連接容錯功能並可在各主動連接之間實現負載平衡。設定並執行多重路徑時,會自動隔離並識別裝置連接失敗,並將 I/O 重新路由至替代連接。

常見的連接問題包括介面卡、纜線或控制器錯誤。為裝置設定多重路徑 I/O 後,多重路徑驅動程式將監控裝置間的主動連接。當多重路徑驅動程式偵測到主動路徑的 I/O 錯誤時,會將流量容錯移轉至裝置的指定次要路徑。偏好的路徑復原後,控制將返回至該路徑。

17.2 硬體支援

多重路徑驅動程式和工具支援 SUSE Linux Enterprise Server 適用的所有架構。它們支援大多數儲存陣列。儲存多重路徑裝置的儲存陣列必須支援多重路徑,這樣才能使用多重路徑驅動程式與工具。一些儲存陣列廠商會提供其自己的多重路徑管理工具。請參閱廠商的硬體文件以決定所需設定。

17.2.1 為多重路徑自動偵測儲存陣列

multipath-tools 套件會自動偵測以下儲存陣列:

3PARdata VV
AIX NVDISK
AIX VDASD
APPLE Xserve RAID
COMPELNT Compellent Vol
COMPAQ/HP HSV101、HSV111、HSV200、HSV210、HSV300、HSV400、HSV 450
COMPAQ/HP MSA、HSV
COMPAQ/HP MSA VOLUME
DataCore SANmelody
DDN SAN DataDirector
DEC HSG80
DELL MD3000
DELL MD3000i
DELL MD32xx
DELL MD32xxi
DGC
EMC Clariion
EMC Invista
EMC SYMMETRIX
EUROLOGC FC2502
FSC CentricStor
FUJITSU ETERNUS_DX、DXL、DX400、DX8000
HITACHI DF
HITACHI/HP OPEN
HP A6189A
HP HSVX700
HP LOGICAL VOLUME
HP MSA2012fc、MSA 2212fc、MSA2012i
HP MSA2012sa、MSA2312 fc/i/sa、MCA2324 fc/i/sa、MSA2000s VOLUME
HP P2000 G3 FC|P2000G3 FC/iSCSI|P2000 G3 SAS|P2000 G3 iSCSI
IBM 1722-600
IBM 1724
IBM 1726
IBM 1742
IBM 1745、1746
IBM 1750500
IBM 1814
IBM 1815
IBM 1818
IBM 1820N00
IBM 2105800
IBM 2105F20
IBM 2107900
IBM 2145
IBM 2810XIV
IBM 3303 NVDISK
IBM 3526
IBM 3542
IBM IPR
IBM Nseries
IBM ProFibre 4000R
IBM S/390 DASD ECKD
IBM S/390 DASD FBA
Intel Multi-Flex
LSI/ENGENIO INF-01-00
NEC DISK ARRAY
NETAPP LUN
NEXENTA COMSTAR
Pillar Axiom
PIVOT3 RAIGE VOLUME
SGI IS
SGI TP9100、TP 9300
SGI TP9400、TP9500
STK FLEXLINE 380
STK OPENstorage D280
SUN CSM200_R
SUN LCSM100_[IEFS]
SUN STK6580、STK6780
SUN StorEdge 3510、T4
SUN SUN_6180

一般說來,大多數其他儲存陣列應該都可使用。自動偵測到儲存陣列後,會套用多重路徑的預設設定。如果您需要非預設設定,則必須手動建立並設定 /etc/multipath.conf 檔案。這對不能自動偵測到的硬體也適用。如需更多資訊,請參閱第 17.6 節 「建立或修改 /etc/multipath.conf 檔案」

請考慮以下警告:

17.2.2 經測試支援多重路徑的儲存陣列

下列廠商生產的儲存陣列已在 SUSE Linux Enterprise Server 上經過測試:

EMC
Hitachi
Hewlett-Packard/Compaq
IBM
NetApp
SGI

大多數其他廠商提供的儲存陣列應該也可使用。請參閱廠商文件獲取指導原則。如需 multipath-tools 套件可辨識的預設儲存陣列清單,請參閱第 17.2.1 節 「為多重路徑自動偵測儲存陣列」

17.2.3 需要特定硬體處理器的儲存陣列

從一個路徑到另一個路徑的容錯移轉時需要特殊指令的儲存陣列,或需要特殊非標準錯誤處理的儲存陣列,可能都需要額外的延伸支援。因此,裝置對應程式多重路徑服務已配備用於硬體處理器的插入程式。例如,已針對 EMC CLARiiON CX 陣列系列提供一個此類處理器。

重要
重要:更多資訊

請參閱硬體廠商文件,以確定是否必須安裝硬體處理器以用於裝置對應程式多重路徑。

multipath -t 指令可顯示需要使用特定硬體處理器進行特殊處理之儲存陣列的內部表格。所顯示的清單不是受支援儲存陣列的完整清單。它列出的僅僅是需要特殊處理的陣列,以及 multipath-tools 開發人員在開發該工具期間有存取權限的陣列。

重要
重要:例外

真正支援主動/主動多重路徑的陣列不需要特殊處理,因此 multipath -t 指令不會列出此類陣列。

multipath -t 表格中的清單內容並不表示已在該特定硬體上進行 SUSE Linux Enterprise Server 測試。如需經過測試的儲存陣列清單,請參閱第 17.2.2 節 「經測試支援多重路徑的儲存陣列」

17.3 規劃多重路徑

使用本節中的準則規劃多重路徑 I/O 解決方案。

17.3.1 先決條件

  • 多重路徑在裝置層級進行管理。

  • 您用於多重路徑裝置的儲存陣列必須支援多重路徑。如需詳細資訊,請參閱第 17.2 節 「硬體支援」

  • 只有在伺服器中的主機匯流排配接器和區塊儲存裝置的主機匯流排控制器之間存在多重實體路徑時,才需要設定多重路徑。應按伺服器所見為邏輯裝置設定多重路徑。

  • 對於某些儲存陣列,廠商提供了自己的多重路徑軟體來管理陣列之實體和邏輯裝置的多重路徑。在這種情況下,您應根據廠商的指示設定那些裝置的多重路徑。

  • 在虛擬化環境中使用多重路徑時,將在主機伺服器環境中控制多重路徑。請先設定裝置的多重路徑,然後才能將其指派給虛擬訪客機器。

17.3.2 磁碟管理任務

請先執行以下磁碟管理任務,再嘗試為具有多路徑的實體或邏輯裝置設定多重路徑:

  • 使用協力廠商工具將實體磁碟分割為數個較小的邏輯磁碟。

  • 使用協力廠商工具分割實體磁碟或邏輯磁碟。如果您變更正在執行系統中的分割區,則裝置對應程式多重路徑 (DM-MP) 模組將不會自動偵測並反映這些變更。DM-MPIO 必須重新啟始化,這通常需要重新開機。

  • 使用協力廠商 SAN 陣列管理工具建立並設定硬體 RAID 裝置。

  • 使用協力廠商 SAN 陣列管理工具建立邏輯裝置,例如 LUN。指定陣列所支援的邏輯裝置類型由陣列廠商決定。

17.3.3 軟體 RAID

Linux 軟體 RAID 管理軟體在多重路徑的最上層執行。對於每個具有多重 I/O 路徑的裝置和要用於軟體 RAID 的裝置來說,您必須先設定多重路徑的裝置,然後才能嘗試建立軟體 RAID 裝置。無法自動探查多重路徑裝置。軟體 RAID 無法知曉多重路徑管理是否於後台執行。

如需為現有軟體 RAID 設定多重路徑的相關資訊,請參閱第 17.12 節 「設定現有軟體 RAID 的多重路徑 I/O」

17.3.4 高可用性解決方案

叢集儲存資源的高可用性解決方案在每個節點上之多重路徑服務的基礎上執行。請確定每個節點上 /etc/multipath.conf 檔案中的組態設定在整個叢集中保持一致。

確定多重路徑裝置在所有裝置中的名稱都相同。如需詳細資訊,請參閱第 17.9.1 節 「HA 叢集中的多重路徑裝置名稱」

用於 LAN 鏡像複製裝置的分散式複製區塊裝置 (DRBD) 高可用性解決方案在多重路徑的基礎上執行。對於每個具有多重 I/O 路徑的裝置和要用於 DRDB 解決方案的裝置來說,您必須先設定多重路徑的裝置,然後才能設定 DRDB。

17.3.5 永遠讓 initrd 與系統組態保持同步

使用多重路徑時最重要的一項目要求是,需確認在根檔案系統及系統開機所需的所有其他檔案系統方面,initrd 與已安裝的系統行為一致。如果在系統中啟用了多重路徑,那麼也需要在 initrd 中啟用多重路徑,反之亦然。如需詳細資料,請參閱第 17.5.1 節 「啟用、停用、啟動和停止多重路徑 I/O 服務」

如果 initrd 與系統不同步,系統將無法正常開機,啟動程序將顯示應急外圍程序。如需如何避免或修復此類情況的說明,請參閱第 17.15.2 節 「啟用多重路徑時系統在開機過程中退出到緊急外圍程序」

17.4 多重路徑管理工具

SUSE Linux Enterprise Server 中的多重路徑支援以 Linux 核心的裝置對應程式多重路徑模組及 multipath-tools 使用者空間套件為基礎。使用多裝置管理公用程式 (multipath) 可以檢視多重路徑裝置的狀態。

17.4.1 裝置對應程式多重路徑模組

裝置對應程式多重路徑 (DM-MP) 模組為 Linux 提供了多重路徑功能。DM-MPIO 是在 SUSE Linux Enterprise Server 中實作多重路徑的較好解決方案。它是該產品提供的唯一一個多重路徑選項,完全受 SUSE 支援。

DM-MPIO 可自動設定多重路徑子系統的多種設定。每個裝置最多可設定 8 個路徑。模組支援主動/被動 (一個主動路徑,其他均為被動路徑) 或主動/主動 (所有路徑均為主動路徑,使用輪替式負載平衡) 組態。

DM-MPIO 框架可以採用以下兩種方式進行擴充:

DM-MPIO 的使用者空間元件會自動探查路徑並進行分組,還會自動重新測試路徑,以便在先前失敗的路徑恢復正常時,能自動重新啟用該路徑。這樣會將管理員對生產環境的關注需求降到最低。

DM-MPIO 防範的是裝置路徑中的失敗,而不是裝置本身的失敗。如果其中一個主動路徑遺失 (例如網路卡損壞或光纖纜線被移開),則 I/O 會重新導向到其餘的路徑。如果組態為主動/被動模式,則路徑會容錯移轉到其中一個被動路徑。如果您使用的是輪替式負載平衡組態,則流量會分流到其餘的正常路徑。如果所有主動路徑都失敗,則必須喚醒非主動的次要路徑,因此需經過大約 30 秒的延遲之後才會開始容錯移轉。

如果磁碟陣列有多個儲存處理器,請確保 SAN 交換器已連接到您要存取的 LUN 所屬的儲存處理器。在大多數磁碟陣列中,所有 LUN 都屬於兩個儲存處理器,因此兩個連接都處於主動模式。

注意
注意:儲存處理器

在有些磁碟陣列中,儲存陣列透過儲存處理器來管理流量,因此每次只會顯示一個儲存處理器。一個處理器為主動,另外一個為被動,直到發生了失敗。如果您連接到錯誤的儲存處理器 (路徑為被動的處理器),則可能找不到所需的 LUN,或雖然找到了 LUN,但在嘗試存取時會發生錯誤。

表 17.1︰ 儲存陣列的多重路徑 I/O 功能

儲存陣列的功能

描述

主動/被動控制器

只有一個控制器處於主動狀態,並服務所有的 LUN。次要控制器處於待命狀態。次要控制器也會將 LUN 提供給多重路徑元件,以便作業系統瞭解備援路徑的情況。如果主要控制器失敗,則由次要控制器接管其工作並服務所有 LUN。

在某些陣列中,可將 LUN 指定給不同的控制器。將指定的 LUN 指定給要做為其主動控制器的控制器。每次當一個控制器為任何 LUN 執行磁碟 I/O 時,另一個控制器就為該 LUN 保持待命狀態。另外的那個控制器也會提供路徑,但無法執行磁碟 I/O。使用該 LUN 的伺服器會連接到 LUN 的指定控制器。如果一組 LUN 的主要控制器失敗,則由次要控制器接管其工作並服務所有 LUN。

主動/主動控制器

兩個控制器共享所有 LUN 的負載,可以處理任何 LUN 的磁碟 I/O。如果一個控制器失敗,另一個控制器便會自動處理所有流量。

載入平衡

裝置對應程式多重路徑驅動程式會自動對通過所有主動路徑的流量進行負載平衡控制。

控制器容錯移轉

主動控制器容錯移轉到被動 (或待命) 控制器時,裝置對應程式多重路徑驅動程式會自動啟動主機與待命之間的路徑,使其成為主要路徑。

開機/根裝置支援

SUSE Linux Enterprise Server 10 及更高版本提供對根 (/) 裝置的多重路徑支援。主機伺服器必須連接到開機裝置目前的主動控制器與儲存處理器。

SUSE Linux Enterprise Server 11 及更高版本提供了對 /boot 裝置的多重路徑支援。

裝置對應程式多重路徑會偵測每個路徑,查看有無多重路徑裝置做為獨立的 SCSI 裝置。SCSI 裝置名稱採用的格式為 /dev/sdN,其中 N 是為裝置自動產生的字母,從 a 開始,並隨著裝置的建立依序發佈,例如 /dev/sda/dev/sdb,依此類推。如果裝置數量超過 26 個,則字母將會重複,這樣,/dev/sdz 之後的裝置將命名為 /dev/sdaa/dev/sdab,依此類推。

如果有多個路徑未自動偵測到,則您可以在 /etc/multipath.conf 檔案中手動設定。在您建立並設定 multipath.conf 檔案之前,該檔案並不存在。如需更多資訊,請參閱第 17.6 節 「建立或修改 /etc/multipath.conf 檔案」

17.4.2 多重路徑 I/O 管理工具

套件 multipath-toolskpartx 提供了執行自動路徑探查和分組的工具。它們會週期性地自動測試路徑,這樣,先前失敗的路徑在恢復正常後,便可自動重新啟用。這樣會將管理員對生產環境的關注需求降到最低。

表 17.2︰ multipath-tools 套件中的工具

工具

描述

multipath

對系統進行掃描,找出多重路徑裝置並進行組合。

multipathd

等待對應事件,然後執行 multipath

kpartx

將線性 devmaps 對應到多重路徑裝置中的分割區,這樣能夠建立對裝置中各分割區的多重路徑監控。

mpathpersist

在裝置對應程式多重路徑 devices.ppc 上管理 SCSI 永久保留

17.4.3 對多重路徑裝置使用 MDADM

Udev 是預設的裝置處理器,該系統可透過 Worldwide ID (而不是裝置節點名稱) 自動識別裝置。這解決了 MDADM 與 LVM 的先前版本中組態檔案 (mdadm.conflvm.conf) 無法正確辨識多重路徑裝置的問題。

與 LVM2 一樣,MDADM 也要求透過 ID 而非裝置節點路徑存取裝置。因此,應使用如下指令設定 /etc/mdadm.conf 中的 DEVICE 項目:

DEVICE /dev/disk/by-id/*

若您使用的是使用者易記名稱,請按照以下方式指定路徑,以便在設定多重路徑之後僅掃描裝置對應程式名稱:

DEVICE /dev/disk/by-id/dm-uuid-.*-mpath-.*

17.4.4 multipath 指令

使用 Linux multipath(8) 指令可以設定並管理多重路徑裝置。該指令的一般語法如下所示:

multipath [-v verbosity_level] [-b bindings_file] [-d] [-h|-l|-ll|-f|-F|-B|-c|-q|-r|-w|-W|-t|-T] [-p failover|multibus|group_by_serial|group_by_prio|group_by_node_name] [DEVICENAME]

如需詳細資料,請參閱 man 8 multipath

一般範例

multipath

設定所有多重路徑裝置。

multipath DEVICENAME

設定特定的多重路徑裝置。

使用 /dev/sdb (如 udev 的 $DEVNAME 變數中所示) 這樣的裝置節點名稱,或採用 major:minor 格式取代 DEVICENAME。裝置也可以使用多重路徑對應名稱。

multipath -f

選擇性隱藏多重路徑對應及其對應裝置的分割區。

multipath -d

模擬執行。顯示潛在的多重路徑裝置,但不建立任何裝置,也不更新裝置對應。

multipath -v2 -d

顯示試執行中潛在多重路徑裝置的多重路徑對應資訊。使用 -v2 選項可僅顯示本地磁碟。此詳細層級會列印已建立或已更新的多重路徑名稱,僅用於為 kpartx 等其他工具提供資訊。

如果裝置已存在且沒有變更,則不會輸出內容。使用 multipath -ll 可查看已設定多重路徑裝置的狀態。

multipath -v2 DEVICENAME

設定特定的潛在多重路徑裝置並顯示其多重路徑對應資訊。此詳細層級僅會列印已建立或已更新的多重路徑名稱,用於為 kpartx 等其他工具提供資訊。

如果裝置已存在且沒有變更,則不會輸出內容。使用 multipath -ll 可查看已設定多重路徑裝置的狀態。

使用 /dev/sdb (如 udev 的 $DEVNAME 變數中所示) 這樣的裝置節點名稱,或採用 major:minor 格式取代 DEVICENAME。裝置也可以使用多重路徑對應名稱。

multipath -v3

設定潛在的多重路徑裝置並顯示其多重路徑對應資訊。此詳細層級會列印所有已刪除的路徑、多重路徑和裝置對應。WWID 與 devnode 列入黑名單的裝置都會顯示。

multipath -v3 DEVICENAME

設定特定的潛在多重路徑裝置並顯示其資訊。使用 -v3 選項會顯示完整路徑清單。此詳細層級會列印所有已刪除的路徑、多重路徑和裝置對應。WWID 與 devnode 列入黑名單的裝置都會顯示。

使用 /dev/sdb (如 udev 的 $DEVNAME 變數中所示) 這樣的裝置節點名稱,或採用 major:minor 格式取代 DEVICENAME。裝置也可以使用多重路徑對應名稱。

multipath -ll

顯示所有多重路徑裝置的狀態。

multipath -ll DEVICENAME

顯示指定多重路徑裝置的狀態。

使用 /dev/sdb (如 udev 的 $DEVNAME 變數中所示) 這樣的裝置節點名稱,或採用 major:minor 格式取代 DEVICENAME。裝置也可以使用多重路徑對應名稱。

multipath -F

衝洗所有未使用的多重路徑裝置對應。這會取消解析多個路徑,但不會刪除裝置。

multipath -F DEVICENAME

衝洗指定多重路徑裝置之未使用的多重路徑裝置對應。這會取消解析多個路徑,但不會刪除該裝置。

使用 /dev/sdb (如 udev 的 $DEVNAME 變數中所示) 這樣的裝置節點名稱,或採用 major:minor 格式取代 DEVICENAME。裝置也可以使用多重路徑對應名稱。

multipath -p [ failover | multibus | group_by_serial | group_by_prio | group_by_node_name ]

透過指定下表中所述的其中一個群組規則選項,來設定群組規則:

表 17.3︰ multipath -p 指令的群組規則選項

規則選項

描述

failover

(預設) 每個優先程度群組對應一個路徑。每次只能使用一個路徑。

multibus

所有路徑都在一個優先程度群組中。

group_by_serial

每個偵測到的 SCSI 序號 (控制器節點全球號碼) 對應一個優先程度群組。

group_by_prio

每個路徑優先程度值對應一個優先程度群組。優先程度相同的路徑位於同一個優先程度群組中。優先程度由註標程式決定,在 /etc/multipath.conf 組態檔案中指定為 global、per-controller 或 per-multipath 選項。

group_by_node_name

每個目標節點名稱對應一個優先程度群組。目標節點名稱取自 /sys/class/fc_transport/target*/node_name 位置。

multipath -t

顯示內部硬體表和使用中的多重路徑組態。如需組態參數的詳細資料,請參閱 man multipath

17.4.5 mpathpersist 公用程式

mpathpersist 公用程式可用來管理裝置對應程式多重路徑裝置上的 SCSI 永久保留。該指令的一般語法如下所示:

mpathpersist [options] [device]

如需詳細資料,請參閱 man 8 mpathpersist

將此公用程式與 /etc/multipath.conf 檔案中的服務動作保留金鑰 (reservation_key 屬性) 配合使用,可設定 SCSI 裝置的永久保留。系統預設不會使用該屬性。如果未設定該屬性,multipathd 精靈將不會檢查新探查到的路徑或已重新啟用之路徑的永久保留。

reservation_key <RESERVATION_KEY>

您可以將該屬性新增至 defaults 區段或 multipaths 區段。例如:

multipaths {
  multipath {
    wwid   XXXXXXXXXXXXXXXX
    alias      yellow
    reservation_key  0x123abc
  }
}

為所有適合永久管理的多重路徑裝置設定 reservation_key 參數,然後執行以下指令來重新啟動 multipathd 精靈:

tux > sudo systemctl restart multipathd

設定它之後,您可以在 mpathpersist 指令中指定保留金鑰。

範例

mpathpersist --out --register --param-sark=123abc --prout-type=5 -d /dev/mapper/mpath9

註冊 /dev/mapper/mpath9 裝置的服務動作保留金鑰。

mpathpersist -i -k -d /dev/mapper/mpath9

讀取 /dev/mapper/mpath9 裝置的服務動作保留金鑰。

mpathpersist --out --reserve --param-sark=123abc --prout-type=8 -d /dev/mapper/mpath9

保留 /dev/mapper/mpath9 裝置的服務動作保留金鑰。

mpathpersist -i -s -d /dev/mapper/mpath9

讀取 /dev/mapper/mpath9 裝置的保留狀態。

17.5 設定系統以進行多重路徑

17.5.1 啟用、停用、啟動和停止多重路徑 I/O 服務

若要允許多重路徑服務在開機時啟動,請執行以下指令:

tux > sudo systemctl enable multipathd

若要在執行中系統內手動啟動服務,或是檢查其狀態,請輸入以下其中一個指令:

tux > sudo systemctl start multipathd
tux > sudo systemctl status multipathd

若要在目前的工作階段中停止多重路徑服務,以及停用該服務以便在系統下次開機時不啟動它,請執行以下指令:

tux > sudo systemctl stop multipathd
tux > sudo systemctl disable multipathd
重要
重要:重建 initrd

每次啟用或停用多重路徑服務時,還需要重建 initrd,否則系統可能無法再開機。啟用多重路徑服務時,還需執行以下指令以重建 initrd:

tux > dracut --force --add multipath

停用服務時,則執行以下指令以重建 initrd:

tux > dracut --force -o multipath

(選擇性) 此外,如果您還想確保不會設定多重路徑裝置 (即使手動啟動了多重路徑),請在重建 initrd 之前,將以下幾行新增到 /etc/multipath.conf 的結尾處:

blacklist {
    wwid ".*"
}

17.5.2 準備 SAN 裝置以進行多重路徑

在為 SAN 裝置設定多重路徑 I/O 之前,請視需要執行以下步驟準備 SAN 裝置:

  • 使用廠商工具對 SAN 進行設定並分區。

  • 使用廠商工具設定儲存陣列中主機 LUN 的許可權。

  • 安裝 Linux HBA 驅動程式模組。安裝模組時,驅動程式會自動掃描 HBA 以探查任何擁有存取主機的許可權的 SAN 裝置。驅動程式會將這些裝置提交至主機以供稍後設定之用。

    注意
    注意:無原生多重路徑

    請確定您使用的 HBA 驅動程式沒有啟用原生多重路徑。

    如需更多詳細資料,請參閱廠商的特定指示。

  • 載入驅動程式模組後,探查指定給特定陣列 LUN 或分割區的裝置節點。

  • 如果 SAN 裝置將做為伺服器上的根裝置使用,請依第 17.14.9 節 「根裝置為多重路徑裝置時的 SAN 逾時設定」 中所述修改該裝置的逾時設定。

如果 HBA 驅動程式無法探查到 LUN,可使用 lsscsi 來檢查作業系統是否能正常探查到 SCSI 裝置。如果 HBA 驅動程式無法探查到 LUN,請檢查 SAN 的分區設定。尤其是要檢查 LUN 遮罩是否處於使用中,且 LUN 是否正確地指定給伺服器。

如果 HBA 驅動程式可以探查到 LUN,但不存在相應的區塊裝置,則還需要其他核心參數來變更 SCSI 裝置的掃描行為,如指出 LUN 沒有連續編號。如需相關資訊,請參閱 SUSE 知識庫中的 TID 3955167:Troubleshooting SCSI (LUN) Scanning Issues (SCSI (LUN) 掃描問題疑難排解),網址為 https://www.suse.com/support/kb/doc.php?id=3955167

17.5.3 分割多重路徑裝置

不建議對含有多個路徑的裝置進行磁碟分割,但這項操作是受支援的。使用 kpartx 工具無需重新開機即可在多重路徑裝置中建立分割區。在嘗試使用 YaST 中的分割程式功能或使用協力廠商分割工具設定多重路徑之前,也可以製做裝置的分割區。

多重路徑裝置是裝置對應程式裝置。雖然使用指令行工具 (例如 parted、kpartx 或 fdisk) 可以修改裝置對應程式裝置,但並不一定會產生更新其他層所需的 udev 事件。分割裝置對應程式裝置之後,您應該檢查多重路徑對應,確保已對應裝置對應程式裝置。如果未對應它們,您可以重新對應多重路徑裝置,或將伺服器重新開機,以取得多重路徑對應中的所有新分割區。

多重路徑裝置上一個分割區的裝置對應程式裝置不同於一個獨立裝置。使用整個裝置建立 LVM 邏輯磁碟區時,必須指定不包含分割區的裝置。如果您將多重路徑分割區指定為 LVM 邏輯磁碟區的目標裝置,則 LVM 會認為基礎實體裝置已分割,導致建立失敗。如果您需要細分 SAN 裝置,可以拆分 SAN 裝置上的 LUN,並將每個 LUN 做為獨立的多重路徑裝置顯示給伺服器。

17.6 建立或修改 /etc/multipath.conf 檔案

在您建立 /etc/multipath.conf 檔案之前,該檔案並不存在。multipathd 精靈執行時會自動套用預設多重路徑裝置設定,除非您建立多重路徑組態檔案並進行個人化設定。

重要
重要:測試及永久性套用 /etc/multipath.conf 中的變更

每次建立或修改 /etc/multipath.conf 檔案時,都不會在儲存檔案後自動套用變更。這樣,您便可以在提交變更之前,先進行試執行以驗證這些變更。若對修改後的設定滿意,便可依照第 17.6.4 節 「套用 /etc/multipath.conf 檔案變更以更新多重路徑對應」中所述來更新多重路徑對應。

17.6.1 建立 /etc/multipath.conf 檔案

  1. 使用以下指令,從一組一般性組態設定著手:

    multipath -T > /etc/multipath.conf

    如此會為目前硬體建立所有相關設定。

  2. 將建立檔案 /etc/multipath.conf。請務必檢查該檔案的以下區段是否與您的組態相符:

    裝置 參考 SAN 的廠商文件瞭解正確的設定。請注意,不同的 SAN 需要單獨的 device 區段。

    blacklist 此區段需要包含機器的所有非多重路徑裝置。如需詳細資訊,請參閱第 17.8 節 「將非多重路徑裝置列入黑名單」

    如果需要,請新增更多區段至組態檔案。如需簡要介紹,請參閱第 17.6.2 節 「/etc/multipath.conf 檔案中的區段」。執行 man 5 multipath.conf 時會有更多詳細資料可用。

  3. 完成後,請儲存 /etc/multipath.conf 並依照第 17.6.3 節 「驗證 /etc/multipath.conf 檔案中的多重路徑設定」中所述測試您的設定。

  4. 成功驗證組態後,請依照第 17.6.4 節 「套用 /etc/multipath.conf 檔案變更以更新多重路徑對應」中所述套用組態。

17.6.2 /etc/multipath.conf 檔案中的區段

/etc/multipath.conf 檔案由下列區段構成。如需詳細資料,請參閱 man 5 multipath.conf

defaults

多重路徑 I/O 的一般預設設定。如果在相應的裝置或多重路徑區段中未提供值,則會使用這些值。如需更多資訊,請參閱第 17.7 節 「設定輪詢、排入佇列和錯誤回復的預設規則」

blacklist

列出因不是多重路徑候選而要丟棄的裝置名稱。裝置可透過其裝置節點名稱 (devnode)、WWID (wwid)、廠商或產品字串 (device) 來識別。您一般可能會忽略非多重路徑裝置,例如 hpsafdhdmddmsrscdstramrawloop。如需更多資訊和範例,請參閱第 17.8 節 「將非多重路徑裝置列入黑名單」

blacklist_exceptions

列出即使不在黑名單上也要被視為多重路徑候選之裝置的裝置名稱。裝置可透過其裝置節點名稱 (devnode)、WWID (wwid)、廠商或產品字串 (device) 來識別。您必須使用黑名單中所用之相同關鍵字來指定排除的裝置。例如,如果在黑名單中將 devnode 關鍵字用於裝置,則要使用 devnode 關鍵字來排除黑名單例外中的某些裝置。您無法使用 devnode 關鍵字將裝置列入黑名單,也無法使用 wwid 關鍵字排除其中某些裝置。如需更多資訊和範例,請參閱第 17.8 節 「將非多重路徑裝置列入黑名單」

multipaths

指定個別多重路徑裝置的設定。除了不支援個別設定的設定以外,這些值會覆寫組態檔案之 defaultsdevices 區段中所指定的內容。

devices

指定個別儲存控制器的設定。這些值會覆寫組態檔案之 defaults 區段中所指定的值。如果使用預設不支援的儲存陣列,則可以建立 devices 子區段來指定其預設設定。如果關鍵字允許,可以用個別多重路徑裝置的設定覆寫這些值。

如需資訊,請參閱以下章節:

17.6.3 驗證 /etc/multipath.conf 檔案中的多重路徑設定

每次建立或修改 /etc/multipath.conf 檔案時,都不會在儲存檔案後自動套用變更。您可以在更新多重路徑對應之前,先執行設定的試執行來驗證多重路徑設定。

在伺服器命令提示字元中輸入

tux > sudo multipath -v2 -d

此指令會掃描裝置,然後顯示提交變更時設定將產生的效果。假設在您修改 /etc/multipath.conf 檔案並進行試執行時,multipathd 精靈已使用舊 (或預設) 的多重路徑設定執行。如果變更可接受,請繼續執行下一步。

輸出類似下方所列:

26353900f02796769
[size=127 GB]
[features="0"]
[hwhandler="1    emc"]

\_ round-robin 0 [first]
  \_ 1:0:1:2 sdav 66:240  [ready ]
  \_ 0:0:1:2 sdr  65:16   [ready ]

\_ round-robin 0
  \_ 1:0:0:2 sdag 66:0    [ready ]
  \_ 0:0:0:2 sdc   8:32   [ready ]

路徑會分為不同的優先程度群組。每次只有一個優先程度群組處於主動狀態。若要塑造主動/主動組態,所有路徑都必須分在相同的群組。若要塑造主動/被動組態,不應同時處於主動狀態的路徑要放置於幾個不同的優先程度群組中。這通常會在裝置探查時自動進行。

輸出會顯示順序、群組中用來平衡 I/O 的排程規則,以及各優先程度群組的路徑。對於每個路徑,會顯示其實體位址 (host:bus:target:lun)、裝置節點名稱、主要和次要的裝置編號和狀態。

透過在試執行中使用 -v3 詳細層級,可以查看所有已刪除的路徑、多重路徑和裝置對應。WWID 與裝置節點列入黑名單的裝置都會顯示。

下面的範例顯示了有兩個 Qlogic HBA 連接至 Xiotech Magnitude 3000 SAN 之 64 位元 SLES 11 SP2 伺服器上的 -v3 輸出。為精簡範例,省略了一些多重項目。

tux > sudo multipath -v3 d
dm-22: device node name blacklisted
< content omitted >
loop7: device node name blacklisted
< content omitted >
md0: device node name blacklisted
< content omitted >
dm-0: device node name blacklisted
sdf: not found in pathvec
sdf: mask = 0x1f
sdf: dev_t = 8:80
sdf: size = 105005056
sdf: subsystem = scsi
sdf: vendor = XIOtech
sdf: product = Magnitude 3D
sdf: rev = 3.00
sdf: h:b:t:l = 1:0:0:2
sdf: tgt_node_name = 0x202100d0b2028da
sdf: serial = 000028DA0014
sdf: getuid= "/lib/udev/scsi_id --whitelisted --device=/dev/%n" (config file default)
sdf: uid = 200d0b2da28001400 (callout)
sdf: prio = const (config file default)
sdf: const prio = 1
[...]
ram15: device node name blacklisted
[...]
===== paths list =====
uuid              hcil    dev dev_t pri dm_st  chk_st  vend/prod/rev
200d0b2da28001400 1:0:0:2 sdf 8:80  1   [undef][undef] XIOtech,Magnitude 3D
200d0b2da28005400 1:0:0:1 sde 8:64  1   [undef][undef] XIOtech,Magnitude 3D
200d0b2da28004d00 1:0:0:0 sdd 8:48  1   [undef][undef] XIOtech,Magnitude 3D
200d0b2da28001400 0:0:0:2 sdc 8:32  1   [undef][undef] XIOtech,Magnitude 3D
200d0b2da28005400 0:0:0:1 sdb 8:16  1   [undef][undef] XIOtech,Magnitude 3D
200d0b2da28004d00 0:0:0:0 sda 8:0   1   [undef][undef] XIOtech,Magnitude 3D
params = 0 0 2 1 round-robin 0 1 1 8:80 1000 round-robin 0 1 1 8:32 1000
status = 2 0 0 0 2 1 A 0 1 0 8:80 A 0 E 0 1 0 8:32 A 0
sdf: mask = 0x4
sdf: path checker = directio (config file default)
directio: starting new request
directio: async io getevents returns 1 (errno=Success)
directio: io finished 4096/0
sdf: state = 2
[...]

17.6.4 套用 /etc/multipath.conf 檔案變更以更新多重路徑對應

multipathd 正在執行時,對 /etc/multipath.conf 檔案所做的變更無法生效。進行變更後,儲存並關閉該檔案,然後執行以下指令以套用變更並更新多重路徑對應:

  1. 套用組態變更:

    tux > sudo multipathd reconfigure
  2. 在系統中執行 dracut -f 重新建立 initrd 影像,然後重新開機以使變更生效。

17.6.5 產生 WWID

為了在不同的路徑上識別裝置,多重路徑使用每部裝置的全球通用識別碼 (WWID)。如果兩個裝置路徑的 WWID 相同,則假定它們代表同一部裝置。除非有絕對的理由,否則建議不要變更產生 WWID 的方法。如需詳細資料,請參閱 man multipath.conf

17.7 設定輪詢、排入佇列和錯誤回復的預設規則

多重路徑 I/O 的目的是在儲存系統與伺服器之間提供連接容錯。需要的預設行為視伺服器是獨立伺服器還是高可用性叢集中的節點而定。

如果您為獨立伺服器設定了多重路徑 I/O,no_path_retry 設定可使伺服器作業系統在盡可能長的時間內不收到 I/O 錯誤。它將訊息排入佇列,直到多重路徑容錯移轉發生並提供有效的連接為止。

為高可用性叢集中的節點設定多重路徑 I/O 時,您希望多重路徑報告 I/O 故障以觸發資源容錯移轉,而不是等待多重路徑容錯移轉得以解決。在叢集環境中,您必須修改 no_path_retry 設定,以確保在與儲存系統的連接中斷時,叢集節點會收到與叢集驗證程序相關的 I/O 錯誤 (建議設為 heartbeat 容錯的 50%)。此外,您還希望將多重路徑 I/O 錯誤回復設為手動,以避免因路徑故障而造成資源的乒乓效應。

/etc/multipath.conf 檔案應包含 defaults 區段,您可在其中指定輪詢、排入佇列和錯誤回復的預設行為。如果 device 區段中沒有指定此欄位,系統會為該 SAN 組態套用預設設定。

以下各項是已編譯的預設設定。除非您透過建立並設定個人化的 /etc/multipath.conf 檔案來覆寫這些值,否則將會使用它們。

defaults {
  verbosity 2
#  udev_dir is deprecated in SLES 11 SP3
#  udev_dir              /dev
  polling_interval      5
#  path_selector default value is service-time in SLES 11 SP3
#  path_selector         "round-robin 0"
  path selector         "service-time 0"
  path_grouping_policy  failover
#  getuid_callout is deprecated in SLES 11 SP3 and replaced with uid_attribute
#  getuid_callout        "/lib/udev/scsi_id --whitelisted --device=/dev/%n"
#  uid_attribute is new in SLES 11 SP3
  uid_attribute         "ID_SERIAL"
  prio                  "const"
  prio_args             ""
  features              "0"
  path_checker          "tur"
  alias_prefix          "mpath"
  rr_min_io_rq          1
  max_fds               "max"
  rr_weight             "uniform"
  queue_without_daemon  "yes"
  flush_on_last_del     "no"
  user_friendly_names   "no"
  fast_io_fail_tmo      5
  bindings_file         "/etc/multipath/bindings"
  wwids_file            "/etc/multipath/wwids"
  log_checker_err       "always"

  retain_attached_hw_handler  "no"
  detect_prio           "no"
  failback              "manual"
  no_path_retry         "fail"
  }

如需設定輪詢、排入佇列和錯誤回復規則的相關資訊,請參閱第 17.10 節 「設定路徑容錯移轉規則與優先程度」 中的下列參數:

修改 /etc/multipath.conf 檔案後,必須在系統上執行 dracut -f 重新建立 initrd,然後重新啟動伺服器,變更才會生效。如需詳細資料,請參閱第 17.6.4 節 「套用 /etc/multipath.conf 檔案變更以更新多重路徑對應」

17.8 將非多重路徑裝置列入黑名單

/etc/multipath.conf 檔案可能包含 blacklist 區段,其中會列出所有非多重路徑裝置。您可以透過 WWID (wwid 關鍵字)、裝置名稱 (devnode 關鍵字) 或裝置類型 (device 區段) 將裝置列入黑名單。您還可以使用 blacklist_exceptions 區段,對透過 blacklist 區段中所用的正規表示式列入黑名單的一些裝置啟用多重路徑。

注意
注意:慣用的加入黑名單方法

將裝置加入黑名單的慣用方法是透過 WWID 或透過廠商和產品進行。建議不要透過 devnode 加入黑名單,因為裝置節點可能會發生變化,因此對長久識別裝置無幫助。

警告
警告:multipath.conf 中的規則運算式

/etc/multipath.conf 中的規則運算式一般情況下會運作。僅在與通用字串比對時,它們才會運作。不過,多重路徑的標準組態已包含許多裝置和廠商的規則運算式。將這些規則運算式與其他規則運算式比對並不會運作。請務必僅與執行 multipath -t 後所顯示的字串比對。

您一般可能會忽略非多重路徑裝置,例如 hpsafdhdmddmsrscdstramrawloop。例如,本地 SATA 硬碟和隨身碟沒有多重路徑。如果您希望 multipath 忽略單路徑裝置,請將它們加入 blacklist 區段中。

注意
注意:相容性

關鍵字 devnode_blacklist 已被關鍵字 blacklist 取代。

在 SUSE Linux Enterprise Server 12 中使用 glibc 提供的正規表示式。若要與任意字串相符,現在必須使用「.*」,而不是僅使用「*」

例如,若要將本地裝置與 hpsa 驅動程式中的所有陣列列入黑名單,以免受到多重路徑的管理,則 blacklist 區段應為:

blacklist {
      wwid "26353900f02796769"
      devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*"
      devnode "^sd[a-z][0-9]*"
}

您也可以只將驅動程式中的分割區 (而不是整個陣列) 列入黑名單。例如,您可以使用以下正規表示式,只將 cciss 驅動程式中的分割區而非整個陣列列入黑名單:

blacklist {
      devnode "^cciss!c[0-9]d[0-9]*[p[0-9]*]"
}

您可以在 blacklist 中新增 device 區段,並使用 vendorproduct 關鍵字,按特定裝置類型列入黑名單。

blacklist {
      device {
           vendor  "DELL"
           product ".*"
       }
}

您可以使用 blacklist_exceptions 區段,對透過 blacklist 區段中所用的正規表示式列入黑名單的一些裝置啟用多重路徑。您可以透過 WWID (wwid 關鍵字)、裝置名稱 (devnode 關鍵字) 或裝置類型 (device 區段) 新增例外。您必須以將相應裝置列入黑名單的相同方式指定例外。也就是說,wwid 例外適用於 wwid 黑名單,devnode 例外適用於 devnode 黑名單,而裝置類型例外適用於裝置類型黑名單。

例如,如果您擁有來自不同廠商的裝置類型,可以針對所需的裝置類型啟用多重路徑。在 blacklist 區段中將所有廠商的裝置類型列入黑名單,然後在 blacklist_exceptions 區段中新增 device 區段,針對所需的裝置類型啟用多重路徑。

blacklist {
      devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st|sda)[0-9]*"
      device {
           vendor  "DELL"
           product ".*"
       }
}

blacklist_exceptions {
      device {
           vendor  "DELL"
           product "MD3220i"
       }
}

您還可以使用 blacklist_exceptions 僅針對特定裝置啟用多重路徑。例如:

blacklist {
      wwid ".*"
}

blacklist_exceptions {
        wwid "3600d0230000000000e13955cc3751234"
        wwid "3600d0230000000000e13955cc3751235"
}

修改 /etc/multipath.conf 檔案後,必須在系統上執行 dracut -f 重新建立 initrd,然後重新啟動伺服器,變更才會生效。如需詳細資料,請參閱第 17.6.4 節 「套用 /etc/multipath.conf 檔案變更以更新多重路徑對應」

重新開機之後,當您發出 multipath -ll 指令時,這些本地裝置應不再列於多重路徑對應中。

注意
注意:使用 find_multipaths 選項

SUSE Linux Enterprise Server 12 SP2 開始,多重路徑工具支援 /etc/multipath.confdefaults 區段內的 find_multipaths 選項。簡而言之,此選項會阻止多重路徑和 multipathd 為只有單個路徑的裝置設定多重路徑對應 (如需詳細資料,請參閱 man 5 multipath.conf)。如此,在某些組態中,管理員就無需為本地 SATA 磁碟等建立黑名單項目。

雖然使用 find_multipaths 選項看似很方便,但也有其弊端。它使得系統開機複雜化且速度變慢,因為對於發現的每部裝置,開機邏輯都需要等到探查了所有裝置之後才能確定裝置是否存在第二個路徑。此外,當一些路徑已關閉或在開機期間不可視時可能會出現問題 — 可能會錯誤地將裝置偵測為單路徑裝置並啟動,導致以後新增更多路徑的操作失敗。

find_multipaths 會將 /etc/multipath/wwids 中所列的具有相符 WWID 的所有裝置視為多重路徑裝置。請注意,第一次啟用 find_multipaths 時不會產生任何效果,除非刪除或編輯了 /etc/multipath/wwids,因為所有先前存在的多重路徑對應 (包括單路徑對應) 都列於該 wwids 檔案中。在具有多重路徑根檔案系統的 SAN-boot 系統中,請務定 /etc/multipath/wwids 在初始 RAM 磁碟與檔案系統之間保持同步。

總而言之,雖然在某些情況下使用 find_multipaths 可能很方便,但 SUSE 仍建議使用正確設定了黑名單和黑名單例外的預設組態。

17.9 設定使用者易記的名稱或別名

多重路徑裝置可透過其 WWID、使用者易記的名稱或您為其指定的別名來識別。/dev/sdn/dev/dm-n 格式的裝置節點名稱可在重新開機時變更,並且每次可能都會指定給不同的裝置。裝置的 WWID、使用者易記的名稱和別名在重新開機期間始終不變,因此是識別裝置的最好方法。

重要
重要:建議使用永久的名稱

由於以 /dev/sdn/dev/dm-n 形式表示的裝置節點名稱會在系統重新開機時變更,因此最好使用其 WWID 來參考多重路徑裝置。此外,您還可以使用對應至 WWID 的使用者易記名稱或別名,以便在重新開機時唯一識別裝置。

下表介紹了 /etc/multipath.conf 檔案中可用於裝置的裝置名稱類型。如需 multipath.conf 設定的範例,請參閱 /usr/share/doc/packages/multipath-tools/multipath.conf.synthetic 檔案。

表 17.4︰ 多重路徑裝置名稱類型比較

名稱類型

描述

WWID (預設)

序列 WWID (全球識別碼) 是多重路徑裝置的識別碼,保證其全球唯一,永不變更。多重路徑中使用的預設名稱是邏輯單位的 ID,就是 /dev/disk/by-id 目錄中存放的 ID。例如,WWID 為 3600508e0000000009e6baa6f609e7908 的裝置列為 /dev/disk/by-id/scsi-3600508e0000000009e6baa6f609e7908

使用者易記

/dev/mapper 目錄中的「裝置對應程式多重路徑」裝置名稱還參考了邏輯單位的 ID。這些多重路徑裝置名稱是使用者易記名稱,採用的格式為 /dev/mapper/mpathN,例如 /dev/mapper/mpath0。這些名稱是唯一且永久的,因為它們使用 /var/lib/multipath/bindings 檔案來追蹤 UUID 與易記名稱之間的關聯。

別名

別名是管理員為多重路徑裝置指定的全域唯一名稱。別名會置換 WWID 及使用者易記的 /dev/mapper/mpathN 名稱。

如果您使用的是 user_friendly_names,請不要將別名設為 mpathN 格式。否則可能會與自動指定的使用者易記名稱產生衝突,導致提供的裝置節點名稱不正確。

/etc/multipath.conf 檔案中的全域多重路徑 user_friendly_names 選項用於啟用或停用對多重路徑裝置使用易記名稱的功能。如果將它設定為 no (預設值),多重路徑會使用 WWID 做為裝置的名稱。如果將它設定為 yes,多重路徑會使用 /var/lib/multipath/bindings 檔案,在 /dev/mapper 目錄中以 mpath<N> 格式為裝置指定一個永久的唯一名稱。/etc/multipath.conf 檔案中的 bindings file 選項可用於指定 bindings 檔案的替代位置。

/etc/multipath.conf 檔案中的全域多重路徑 alias 選項用於明確地為裝置指定名稱。如果為多重路徑裝置設定了別名,則會使用別名而不是 WWID 或易記名稱。

在下列情況下,使用 user_friendly_names 選項可能會產生問題:

根裝置正在使用多重路徑:

如果系統根裝置正在使用多重路徑,而您使用了 user_friendly_names 選項,則會將 /var/lib/multipath/bindings 檔案中的使用者易記設定包含在 initrd 中。如果您之後變更儲存設定,例如新增或移除裝置,則 initrd 中的繫結設定會與 /var/lib/multipath/bindings 中的繫結設定不符。

警告
警告:繫結不相符項目

initrd/var/lib/multipath/bindings 之間的繫結不符會導致將錯誤的掛接點指定給裝置,進而造成檔案系統損毀及資料遺失。

為了避免此問題發生,建議您對系統根裝置使用預設 WWID 設定。請勿將別名用於系統根裝置。裝置名稱將會不同,因此使用別名會使您失去透過核心指令行順利關閉多重路徑的功能。

從另一個分割區掛接 /var:

user_friendly_names 組態檔案的預設位置是 /var/lib/multipath/bindings。如果 /var 資料不在系統根設備上,而是從另一個分割區掛接,則設定多重路徑時無法獲取 bindings 檔案。

請確定 /var/lib/multipath/bindings 檔案位於系統根設備上,並且多重路徑可以找到它。例如,可以按如下所示操作:

  1. /var/lib/multipath/bindings 檔案移至 /etc/multipath/bindings

  2. 將 /etc/multipath.confdefaults 區段中的 bindings_file 選項設定為這個新位置。例如:

    defaults {
                   user_friendly_names yes
                   bindings_file "/etc/multipath/bindings"
    }
initrd 中存在多重路徑:

即使系統根裝置不在多重路徑上,initrd 中也有可能包含多重路徑。例如,如果系統根裝置位於 LVM 上,便可能會出現這種情況。如果您使用 user_friendly_names 選項並且 initrd 中存在多重路徑,則應該使用參數 multipath=off 開機,以免發生問題。

這會在系統開機期間於 initrd 中停用多重路徑。系統開機之後,boot.multipathmultipathd 開機程序檔便能啟用多重路徑。

HA 叢集中的多重路徑:

如需詳細資料,請參閱第 17.9.1 節 「HA 叢集中的多重路徑裝置名稱」

若要啟用使用者易記名稱或指定別名:

  1. 使用 root 權限在文字編輯器中開啟 /etc/multipath.conf 檔案。

  2. (選擇性) 修改 /var/lib/multipath/bindings 檔案的位置。

    替代路徑必須是系統根裝置上可存取的位置,並且多重路徑必須能夠找到它。

    1. /var/lib/multipath/bindings 檔案移至 /etc/multipath/bindings

    2. 將 /etc/multipath.confdefaults 區段中的 bindings_file 選項設定為這個新位置。例如:

      defaults {
                user_friendly_names yes
                bindings_file "/etc/multipath/bindings"
      }
  3. (選擇性,但不建議) 啟用使用者易記的名稱:

    1. 取消 Defaults 區段及其結束括號的註解。

    2. 取消 user_friendly_names option 的註解,然後將「否」值變更為「是」。

      例如:

      ## Use user-friendly names, instead of using WWIDs as names.
      defaults {
        user_friendly_names yes
      }
  4. (選擇性) 在 multipath 區段中使用 alias 選項,為裝置指定您自己的名稱。

    例如:

    ## Use alias names, instead of using WWIDs as names.
    multipaths {
           multipath {
                   wwid           36006048000028350131253594d303030
                   alias             blue1
           }
           multipath {
                   wwid           36006048000028350131253594d303041
                   alias             blue2
           }
           multipath {
                   wwid           36006048000028350131253594d303145
                   alias             yellow1
           }
           multipath {
                   wwid           36006048000028350131253594d303334
                   alias             yellow2
           }
    }
    重要
    重要:WWWID 與 WWN 的比較

    /etc/multipath.conf 檔案中定義裝置別名時,請確定使用的是每個裝置的 WWID (例如 3600508e0000000009e6baa6f609e7908) 而不是其 WWN,後者會以 0x 取代裝置 ID 的第一個字元,例如 0x600508e0000000009e6baa6f609e7908

  5. 儲存變更,然後關閉檔案。

  6. 修改 /etc/multipath.conf 檔案後,必須在系統上執行 dracut -f 重新建立 initrd,然後重新啟動伺服器,變更才會生效。如需詳細資料,請參閱第 17.6.4 節 「套用 /etc/multipath.conf 檔案變更以更新多重路徑對應」

若要直接使用整個 LUN (例如,若您使用 SAN 功能分割您的儲存區),可為 mkfs/etc/fstab、您的應用程式等使用 /dev/disk/by-id/xxx 名稱。分割的裝置會將 _part<n> 附加到裝置名稱中,例如 /dev/disk/by-id/xxx_part1

/dev/disk/by-id 目錄中,多重路徑對應裝置會以裝置的 dm-uuid* 名稱或別名 (如果在 /etc/multipath.conf 檔案中為它指定了別名) 表示。scsi-wwn- 裝置名稱表示裝置的實體路徑。

17.9.1 HA 叢集中的多重路徑裝置名稱

請執行下列操作,來確定多重路徑裝置名稱在所有裝置中都相同:

  • 使用 UUID 及別名來確保多重路徑裝置名稱在叢集中的所有節點上都保持一致。別名在所有節點中必須是唯一的。將 /etc/multipath.conf 檔案從該節點複製到叢集中所有其他節點的 /etc/ 目錄下。

  • 使用多重路徑對應裝置的連結時,請確定在 /dev/disk/by-id 目錄中指定 dm-uuid* 名稱或別名,而不是裝置的固定路徑例項。如需更多資訊,請參閱第 17.9 節 「設定使用者易記的名稱或別名」

  • user_friendly_names 組態選項設為 no 以將其停用。使用者易記的名稱對於某個節點而言是唯一的,但是叢集中的每個節點可能無法為裝置指定相同的使用者易記名稱。

注意
注意:使用者易記名稱

如果您確實需要使用使用者易記名稱,則可以執行下列操作,強制系統定義的使用者易記名稱在叢集中的所有節點上都保持一致:

  1. 在一個節點上的 /etc/multipath.conf 檔案中:

    1. user_friendly_names 組態選項設為 yes 以將其啟用。

      多重路徑會使用 /var/lib/multipath/bindings 檔案,在 /dev/mapper 目錄中以 mpath<N> 格式為裝置指定一個永久的唯一名稱。

    2. (選擇性) 設定 /etc/multipath.conf 檔案之 defaults 區段中的 bindings_file 選項,以指定 bindings 檔案的替代位置。

      預設位置為 /var/lib/multipath/bindings

  2. 設定節點上的所有多重路徑裝置。

  3. /etc/multipath.conf 檔案從該節點複製到叢集中所有其他節點的 /etc/ 目錄下。

  4. bindings 檔案從該節點複製到叢集中所有其他節點上的 bindings_file 路徑中。

  5. 修改 /etc/multipath.conf 檔案後,必須在系統上執行 dracut -f 重新建立 initrd,然後重新啟動節點,變更才會生效。如需詳細資料,請參閱第 17.6.4 節 「套用 /etc/multipath.conf 檔案變更以更新多重路徑對應」。這適用於所有受影響的節點。

17.10 設定路徑容錯移轉規則與優先程度

在 Linux 主機上,若一個儲存控制器有多個路徑,則每個路徑會顯示為獨立的區塊裝置,導致單個 LUN 有多個區塊裝置。裝置對應程式多重路徑服務會偵測到多個路徑具有同一個 LUN ID,然後會使用該 ID 建立新的多重路徑裝置。例如,若主機上有兩個 HBA 透過未分區的光纖通道交換器連接至具有兩個連接埠的某個儲存控制器,則該主機會探查到四個區塊裝置,即 /dev/sda/dev/sdb/dev/sdc/dev/sdd。裝置對應程式多重路徑服務會建立單個區塊裝置 /dev/mpath/mpath1,由它來透過以上 4 個基礎區塊裝置重新路由 I/O。

本節說明如何指定容錯移轉的規則及如何設定路徑的優先程度。請注意,修改 /etc/multipath.conf 檔案後,必須在系統上執行 dracut -f 重新建立 initrd,然後重新啟動伺服器,變更才會生效。如需詳細資料,請參閱第 17.6.4 節 「套用 /etc/multipath.conf 檔案變更以更新多重路徑對應」

17.10.1 設定路徑容錯移轉規則

搭配 -p 選項使用 multipath 指令可設定路徑容錯移轉規則:

tux > sudo multipath DEVICENAME -p POLICY

用以下其中一個規則選項取代 POLICY

表 17.5︰ multipath -p 指令的群組規則選項

規則選項

描述

failover

(預設) 每個優先程度群組對應一個路徑。

multibus

所有路徑都在一個優先程度群組中。

group_by_serial

每個偵測到的序號對應一個優先程度群組。

group_by_prio

每個路徑優先程度值對應一個優先程度群組。優先程度由註標程式決定,在 /etc/multipath.conf 組態檔案中指定為 global、per-controller 或 per-multipath 選項。

group_by_node_name

每個目標節點名稱對應一個優先程度群組。目標節點名稱取自 /sys/class/fc_transport/target*/node_name 位置。

17.10.2 設定容錯移轉優先程度

您必須在 /etc/multipath.conf 檔案中手動輸入裝置的容錯移轉優先程度。/usr/share/doc/packages/multipath-tools/multipath.conf.annotated 檔案中提供了所有設定與選項的範例。

17.10.2.1 瞭解優先程序群組與屬性

優先程度群組是進入相同實體 LUN 的路徑集合。依預設,I/O 以輪替方式發佈到群組的所有路徑。multipath 指令會根據 SAN 的 path_grouping_policy 設定,在該 SAN 中自動為每個 LUN 建立優先程度群組。multipath 指令會將群組中路徑的數量乘以群組的優先程度,來決定哪個群組為主要群組。計算值最高的群組為主要群組。主要群組中的所有路徑都失敗時,計算值次高的優先程度群組成為主動群組。

路徑優先程度是指定給路徑的整數值。值越大,優先程度越高。系統使用了外部程式來指定每個路徑的優先程度。對於指定的裝置,優先程度相同的路徑屬於同一個優先程度群組。

prio 設定在 /etc/multipath.conf 檔案的 defaults{}devices{} 區段中使用。當為 multipaths{) 區段中的個別 multipath 定義指定該設定時,系統會靜默地將其忽略。prio 行會指定優先程度排序器。如果優先程度排序器需要引數,您可以在另一行上使用 prio_args 關鍵字來指定該引數。

Defaults 或 Devices 區段的 PRIO 設定

prio

指定要呼叫以取得路徑優先程度值的優先程度排序程式。系統會將每個路徑群組的權數加總,以判斷發生故障時要使用的下一個路徑群組。

如果指定的優先程度排序器需要引數,請使用 prio_args 關鍵字進行指定。

如果未指定任何 prio 關鍵字,則所有路徑的優先程度均相等。預設設定為 const,且 prio_args 設定沒有值。

prio "const"
prio_args ""

優先程度排序器範例如下:

優先程度排序程式

描述

alua

根據 SCSI-3 ALUA 設定產生路徑優先程度。

const

為所有路徑產生相同的優先程度。

emc

為 EMC 陣列產生路徑優先程度。

hdc

為 Hitachi HDS Modular 儲存陣列產生路徑優先程度。

hp_sw

為主動/待命模式下的 Compaq/HP 控制器產生路徑優先程度。

ontap

為 NetApp 陣列產生路徑優先程度。

random

為每個路徑產生隨機優先程度。

rdac

為 LSI/Engenio RDAC 控制器產生路徑優先程度。

weightedpath

依據您在 prio_args 的引數中指定的加權值產生路徑優先程度。

path_latency

依據延遲演算法產生路徑優先程度,您可以透過 prio_args 關鍵字來設定該演算法。

prio_args 引數

這些是需要引數的優先程度排序器的引數。大多數 prio 程式都不需要引數。沒有預設值。該值取決於 prio 設定以及優先程度排序器是否需要以下任何引數:

weighted

需要格式為 [hbtl|devname|serial|wwn] REGEX1 PRIO1 REGEX2 PRIO2... 的值

規則運算式必須採用 SCSI H:B:T:L 格式,例如 1:0:.:. 和 *:0:0:.,並帶有權數值,其中 H、B、T 和 L 分別代表裝置的主機、匯流排、目標以及 LUN ID。例如:

prio "weightedpath"
prio_args "hbtl 1:.:.:. 2 4:.:.:. 4"
devname

Regex 為裝置名稱格式。例如:sda、sd.e

serial

Regex 為序號格式。例如:.*J1FR.*324。請使用 multipathd show paths format %z 指令查詢您的序號。(multipathd show wildcards 會顯示所有 format 萬用字元。)

alua

如果為某部裝置 (alua exclusive_pref_bit) 設定了 exclusive_pref_bit,那麼設定了 preferred path 的路徑將永遠在其自身的路徑群組中。

path_latency

如果遠端儲存陣列和本地儲存陣列使用的是相同類型的硬體,則可使用 path_latency 調整這兩個陣列之間的延遲。遠端陣列上的延遲通常更高,因此您可以微調延遲,使兩個陣列的時間更接近。這需要格式為 io_num=20 base_num=10 的值組。

io_num 是連續傳送到目前路徑的讀取 IO 數,用於計算平均路徑延遲。有效值為 2 到 200 的整數。

base_num 是對數的底數,用於分割不同的優先程度排名。有效值為 2 到 10 的整數。最大平均延遲值為 100s,最小值為 1us。例如,如果 base_num=10,則路徑將被分組為路徑延遲 <=1us、(1us, 10us]、(10us, 100us]、(100us, 1ms]、(1ms, 10ms]、(10ms, 100ms]、(100ms, 1s]、(1s, 10s]、(10s, 100s] 或 >100s 的優先程度群組

多重路徑屬性

多重路徑屬性用於控制裝置的多重路徑 I/O 行為。您可以將屬性指定為所有多重路徑裝置的預設值。此外,還可以指定僅套用至指定多重路徑裝置的屬性,方法是在多重路徑組態檔案的 multipaths 區段中為該裝置建立一個項目。

user_friendly_names

指定是使用全球 ID (WWID) 還是使用 /var/lib/multipath/bindings 檔案為多重路徑裝置指定格式為 /dev/mapper/mpathN、永久且唯一的別名。

此選項可以在 devices 區段和 multipaths 區段中使用。

描述

no

(預設) 使用 /dev/disk/by-id/ 位置中所顯示的 WWID。

yes

自動產生易記名稱做為多重路徑裝置的別名來取代實際的 ID。

failback

指定是否監控失敗路徑的復原狀況,並指出失敗路徑恢復使用後群組進行錯誤回復所花的時間。

失敗路徑復原後,系統會依據此設定將該路徑重新新增到啟用了多重路徑的路徑清單中。多重路徑會評估優先程度群組,並在主要路徑的優先程度高於次要群組時,變更主動優先程度群組。

描述

manual

(預設) 不監控失敗路徑的復原狀況。管理員會執行 multipath 指令來更新已啟用的路徑與優先程度群組。

followover

僅當路徑群組的第一個路徑處於使用中狀態時,才執行自動錯誤回復。這可以防止某個節點在另一個節點已要求容錯移轉時自動錯誤回復。

immediate

某路徑復原後,立即啟用該路徑。

N

某路徑復原後,等待 N 秒後再啟用此路徑。指定一個大於 0 的整數值。

對於叢集環境中的多重路徑,建議將錯誤回復設為 manual,以防止多重路徑容錯移轉發生乒乓效應。

failback "manual"
重要
重要:確認

請務必向儲存系統廠商確認錯誤回復設定。不同的儲存系統可能需要不同的設定。

no_path_retry

指定路徑失敗時要採取的行為。

描述

N

指定在 multipath 停止佇列且使路徑失敗之前的重試次數。指定一個大於 0 的整數值。

在叢集中,您可以指定值「0」來防止排入佇列,並允許資源進行容錯移轉。

fail

指定立即失敗 (不排入佇列)。

queue

永不停止佇列 (在路徑恢復正常之前始終排入佇列)。

在叢集中作業時,建議在 /etc/multipath.conf 檔案中將重試設定設為 fail0。這會導致儲存連接中斷時,讓資源進行容錯移轉。否則,該訊息會排入佇列,而不會發生資源容錯移轉。

no_path_retry "fail"
no_path_retry "0"
重要
重要:確認

請務必向儲存系統廠商確認重試設定。不同的儲存系統可能需要不同的設定。

path_checker

決定路徑的狀態。

描述

directio

讀取具有直接 I/O 的第一個磁區,這對於 DASD 裝置非常有用。在 systemd 記錄中記錄失敗訊息 (請參閱Book “管理指南”, Chapter 17 “journalctl:查詢 systemd 日誌”)。

tur

將 SCSI 測試單元就緒指令發送至裝置。這是較佳設定 (若 LUN 支援)。若指令失敗,將不會在 systemd 記錄日誌中填入訊息。

CUSTOM_VENDOR_VALUE

有些 SAN 廠商會提供自訂 path_checker 選項:

  • cciss_tur:: 檢查 HP 智慧型儲存陣列的路徑狀態。

  • emc_clariion:: 查詢 EMC Clariion EVPD 的 0xC0 頁以決定路徑狀態。

  • hp_sw:: 檢查包含主動/待命韌體之 HP 儲存陣列的路徑狀態 (Up、Down 或 Ghost)。

  • rdac:: 檢查 LSI/Engenio RDAC 儲存控制器的路徑狀態。

path_grouping_policy

指定由指定控制器代管之多重路徑裝置的路徑分組規則。

描述

failover

(預設) 每個優先程度群組指定一個路徑,以便每次只使用一個路徑。

multibus

所有有效的路徑均屬於一個優先程度群組。流量透過群組中的所有主動路徑來保持負載平衡。

group_by_prio

每個路徑優先程度值對應一個優先程度群組。優先程度相同的路徑位於同一個優先程度群組中。優先程度由外部程式指定。

group_by_serial

路徑根據 SCSI 目標序號 (控制器節點 WWN) 來分組。

group_by_node_name

每個目標節點名稱指定一個優先程度群組。目標節點名稱取自 /sys/class/fc_transport/target*/node_name 中。

path_selector

指定用於負載平衡的 path-selector 演算法。

描述

round-robin 0

用於平衡優先程度群組中所有主動路徑之間的流量的負載平衡演算法。

queue-length 0

與 least-pending 選項類似,是一個可平衡多個路徑上進行中的 I/O 數量的動態負載平衡器。

service-time 0

(預設值) 可根據延遲情況來平衡多個路徑上之 I/O 的服務時間導向型負載平衡器。

pg_timeout

指定路徑群組逾時處理。不能指定任何值,已設定了內部預設值。

polling_interval

指定一個路徑檢查週期結束與下一個路徑檢查週期開始之間的時間 (以秒為單位)。

指定一個大於 0 的整數值。預設值為 5。請務必向儲存系統廠商確認 polling_interval 設定。不同的儲存系統可能需要不同的設定。

rr_min_io_rq

在切換至目前路徑群組中的下一個路徑之前,使用基於申請的 device-mapper-multipath 指定路由至某個路徑之 I/O 申請的數量。

指定一個大於 0 的整數值。預設值為 1。

rr_min_io_rq "1"
rr_weight

指定用於計算路徑權重的方式。

描述

uniform

(預設) 所有路徑都擁有相同的輪替權數。

priorities

每個路徑的權重由路徑的優先程度乘以 rr_min_io_rq 設定來確定。

uid_attribute

提供唯一路徑識別碼的 udev 屬性。預設值為 ID_SERIAL

17.10.2.2 設定輪替式負載平衡

所有路徑都處於主動狀態。I/O 設定為在移至序列中的下一個開啟路徑之前需經過秒數的時間或數個 I/O 異動。

17.10.2.3 設定單一路徑容錯移轉

優先程度最高 (設定值最低) 的單一路徑對流量而言是主動路徑。其他路徑可用於容錯移轉,但只有在發生容錯移轉時才會使用。

17.10.2.4 將 I/O 路徑分組以使用輪替式負載平衡

具有相同優先程度的多個路徑都歸入主動群組。該群組中的所有路徑都失敗時,裝置會容錯移轉至優先程度次高的群組。群組中的所有路徑以輪替式負載平衡方式共享流量負載。

17.10.3 報告目標路徑群組

使用 SCSI 報告目標連接埠群組 (sg_rtpg(8)) 指令。如需資訊,請參閱 sg_rtpg(8) 的線上文件。

17.11 設定根裝置的多重路徑 I/O

SUSE Linux Enterprise Server 中的 /boot/root 可以使用並支援裝置對應程式多重路徑 I/O (DM-MPIO)。此外,YaST 安裝程式中的 YaST 磁碟分割程式支援在安裝期間啟用多重路徑。

17.11.1 安裝時啟用多重路徑 I/O

若要在多重路徑裝置上安裝作業系統,在安裝時必須執行多重路徑軟體。在系統安裝過程中,multipathd 精靈不會自動啟動。您可以使用 YaST 磁碟分割程式中的設定多重路徑選項來啟動。

17.11.1.1 在主動/主動多重路徑儲存 LUN 上安裝時啟用多重路徑 I/O

  1. 安裝期間,在建議的分割方式螢幕上選擇進階磁碟分割程式

  2. 選取硬碟主圖示,按一下設定按鈕,然後選取設定多重路徑

  3. 啟動多重路徑。

    YaST 即會開始重新掃描磁碟,然後顯示可用的多重路徑裝置 (例如 /dev/disk/by-id/dm-uuid-mpath-3600a0b80000f4593000012ae4ab0ae65)。之後所有的處理步驟都應使用此裝置。

  4. 下一步繼續安裝。

17.11.1.2 在主動/被動多重路徑儲存 LUN 上安裝時啟用多重路徑 I/O

在系統安裝過程中,multipathd 精靈不會自動啟動。您可以使用 YaST 磁碟分割程式中的設定多重路徑選項來啟動。

若要在主動/被動多重路徑儲存 LUN 上安裝時啟用多重路徑 I/O:

  1. 安裝期間,在建議的分割方式螢幕上選擇進階磁碟分割程式

  2. 選取硬碟主圖示,按一下設定按鈕,然後選取設定多重路徑

  3. 啟動多重路徑。

    YaST 即會開始重新掃描磁碟,然後顯示可用的多重路徑裝置 (例如 /dev/disk/by-id/dm-uuid-mpath-3600a0b80000f4593000012ae4ab0ae65)。之後所有的處理步驟都應使用此裝置。記下裝置路徑與 UUID,稍後會用到。

  4. 下一步繼續安裝。

  5. 所有設定都設好且安裝完成後,YaST 即會開始寫入開機載入程式資訊,並顯示重新啟動系統的倒數計時。請按一下停止按鈕停止倒數計時,然後按 CtrlAltF5 存取主控台。

  6. 使用主控台確定是否在 /boot/grub/device.map 檔案中為 hd0 項目輸入了被動路徑。

    執行此動作非常必要,因為安裝程序無法區分主動路徑與被動路徑。

    1. 輸入以下指令,將根裝置掛接至 /mnt

      tux > sudo mount /dev/disk/by-id/UUID;_part2 /mnt

      例如,輸入:

      tux > sudo mount /dev/disk/by-id/dm-uuid-mpath-3600a0b80000f4593000012ae4ab0ae65_part2 /mnt
    2. 輸入以下指令,將開機裝置掛接至 /mnt/boot

      tux > sudo mount /dev/disk/by-id/UUID_part1 /mnt/boot

      例如,輸入:

      tux > sudo mount /dev/disk/by-id/dm-uuid-mpath-3600a0b80000f4593000012ae4ab0ae65_part2 /mnt/boot
    3. /mnt/boot/grub/device.map 檔案中,確定 hd0 項目是否指向被動路徑,然後執行下列其中一項動作:

      • 主動路徑:: 不需要執行任何動作。跳過所有剩餘的步驟,按 CtrlAltF7 返回 YaST 圖形環境,然後繼續安裝。

      • 被動路徑:: 必須變更組態並重新安裝開機載入程式。

  7. 如果 hd0 項目指向被動路徑,請變更組態並重新安裝開機載入程式:

    1. 在主控台提示符處輸入以下指令:

                mount -o bind /dev /mnt/dev
                mount -o bind /sys /mnt/sys
                mount -o bind /proc /mnt/proc
                chroot /mnt
    2. 在主控台中執行 multipath -ll,然後檢查輸出以尋找主動路徑。

      被動路徑會有 ghost 標記。

    3. /boot/grub/device.map 檔案中,將 hd0 項目變更為主動路徑並儲存變更,然後關閉檔案。

    4. 輸入以下指令,重新安裝開機載入程式:

      grub-install /dev/disk/by-id/UUID_part1 /mnt/boot

      例如,輸入:

      grub-install /dev/disk/by-id/dm-uuid-mpath-3600a0b80000f4593000012ae4ab0ae65_part2 /mnt/boot
    5. 輸入下列指令:

      exit
      umount /mnt/*
      umount /mnt
  8. CtrlAltF7 返回 YaST 圖形環境。

  9. 按一下確定繼續執行安裝的重新開機作業。

17.11.2 對現有根裝置啟用多重路徑 I/O

  1. 將 Linux 安裝為僅有單個路徑處於主動狀態,最好是磁碟分割程式中列出了 by-id 符號連結的路徑。

  2. 使用安裝期間所用的 /dev/disk/by-id 路徑來掛接裝置。

  3. 開啟或建立 /etc/dracut.conf.d/10-mp.conf 並新增以下行 (請注意前置空格):

    force_drivers+=" dm-multipath"
  4. 對於 IBM Z,請在執行 dracut 之前先編輯 /etc/zipl.conf 檔案,以 /etc/fstab 中使用的 by-id 資訊變更 zipl.conf 中的 by-path 資訊。

  5. 執行 dracut -f 以更新 initrd 影像。

  6. 對於 IBM Z,請在執行 dracut 之後執行 zipl

  7. 重新載入伺服器。

17.11.3 在根裝置上停用多重路徑 I/O

multipath=off 新增至核心指令行。這可以透過 YaST 開機載入程式模組來完成。開啟開機載入程式安裝 ›  核心參數,並將參數新增至兩個指令行。

這只會影響根裝置,而不會影響所有其他裝置。

17.12 設定現有軟體 RAID 的多重路徑 I/O

理想狀況下,您應該先設定裝置的多重路徑,然後再將它們當成軟體 RAID 裝置的元件使用。如果您在建立任何軟體 RAID 裝置後再新增多重路徑,則系統重新開機時可能會先啟動 multipath 服務,然後再啟動 DM-MPIO 服務,導致 RAID 可能會無法使用多重路徑。您可以使用本節所述的程序,讓多重路徑針對多先前存在的軟體 RAID 執行。

例如,在下列情況中,您可能需要設定軟體 RAID 中裝置的多重路徑:

  • 如果在執行全新安裝或升級期間建立新的軟體 RAID,將其做為磁碟分割設定的一部分。

  • 如果將軟體 RAID 中的裝置當成成員裝置或備品之前未設定裝置以進行多重路徑。

  • 如果透過將新的 HBA 配接器新增至伺服器,或擴充 SAN 中的儲存子系統來擴展您的系統。

注意
注意:假設條件

下列指示假設軟體 RAID 裝置為 /dev/mapper/mpath0,這是核心可辨識的裝置名稱。它會假設您已依照第 17.9 節 「設定使用者易記的名稱或別名」所述在 /etc/multipath.conf 檔案中啟用了使用者易記的名稱。

請務必修改適用於軟體 RAID 的設備名稱的指示。

  1. 開啟終端機主控台。

    請在下列步驟中使用此主控台輸入指令,除非導向到其他位置。

  2. 如果目前已掛接或正在執行任何軟體 RAID 裝置,請對每個裝置輸入以下指令來卸載並停止裝置。

    tux > sudo umount /dev/mapper/mpath0
    tux > sudo mdadm --misc --stop /dev/mapper/mpath0
  3. 輸入以下指令停止 md 服務:

    tux > sudo systemctl stop mdmonitor
  4. 輸入以下指令啟動 multipathd 精靈:

    tux > systemctl start multipathd
  5. 啟動多重路徑服務之後,驗證軟體 RAID 的元件裝置是否列在 /dev/disk/by-id 目錄中。請執行下列其中一個步驟:

    • 裝置已列出:: 裝置名稱現在應該有連至裝置對應程式多重路徑裝置名稱的符號連結,如 /dev/dm-1

    • 裝置未列出:: 輸入以下指令來衝洗和重新探查裝置,強制多重路徑服務辨識裝置:

      tux > sudo multipath -F
      tux > sudo multipath -v0

      裝置現在應該列於 /dev/disk/by-id 中,並擁有連至其裝置對應程式多重路徑裝置名稱的符號連結。例如:

      lrwxrwxrwx 1 root root 10 2011-01-06 11:42 dm-uuid-mpath-36006016088d014007e0d0d2213ecdf11 -> ../../dm-1
  6. 輸入以下指令重新啟動 mdmonitor 服務和 RAID 裝置:

    tux > sudo systemctl start mdmonitor
  7. 輸入以下指令檢查軟體 RAID 的狀態:

    tux > sudo mdadm --detail /dev/mapper/mpath0

    RAID 的元件裝置應與其裝置對應程式多重路徑裝置名稱相符,這些裝置名稱在 /dev/disk/by-id 目錄中列為裝置的符號連結。

  8. 如果根 (/) 裝置或其任何部分 (例如 /var/etc/log) 位於 SAN 上,並且需要使用多重路徑開機,請重建 initrd

    tux > dracut -f --add-multipath
  9. 重新開機伺服器以套用變更。

  10. 檢查 RAID 狀態,以驗證軟體 RAID 陣列是否正確地顯示在多重路徑裝置頂部。輸入

    tux > sudo mdadm --detail /dev/mapper/mpath0

    例如:

    Number Major Minor RaidDevice State
    0 253 0 0 active sync /dev/dm-0
    1 253 1 1 active sync /dev/dm-1
    2 253 2 2 active sync /dev/dm-2
注意
注意:將 mdadm 用於多重路徑裝置

mdadm 工具要求以 ID 而非裝置節點路徑存取裝置。如需詳細資訊,請參閱第 17.4.3 節 「對多重路徑裝置使用 MDADM」

17.13 在多重路徑裝置上使用 LVM2

使用多重路徑時,資源的所有路徑都顯示為裝置樹狀結構中的裝置。依預設,LVM 會檢查裝置樹狀結構中任何裝置的頂層是否存在多重路徑裝置。如果 LVM 在頂層找到了多重路徑裝置,它會假設該裝置是多重路徑元件,並忽略 (基礎) 裝置。這很可能是您期望的行為,但也可以在 /etc/lvm/lvm.conf 中變更此行為。如果將 multipath_component_detection 設定為 0,LVM 會掃描多重路徑元件裝置。lvm.conf 中的預設項目是:

    # By default, LVM2 will ignore devices used as component paths
    # of device-mapper multipath devices.
    # 1 enables; 0 disables.
    multipath_component_detection = 1

17.14 最佳實務

17.14.1 掃描新裝置而不重新開機

如果已將您的系統設定為啟用多重路徑,而您稍後需要將儲存新增到 SAN,則可以使用 rescan-scsi-bus.sh 程序檔掃描新的裝置。依預設,此程序檔會掃描所有 HBA 的一般 LUN 範圍。該指令的一般語法如下所示:

tux > sudo rescan-scsi-bus.sh [options] [host [host ...]]

對於大多數儲存子系統,該程序檔都可在不使用任何選項的情況下成功執行。不過,在某些特殊情況下,可能需要使用一或多個選項。如需詳細資料,請執行 rescan-scsi-bus.sh --help

警告
警告:EMC PowerPath 環境

在 EMC PowerPath 環境中,請勿使用作業系統隨附的 rescan-scsi-bus.sh 公用程式或 HBA 廠商程序檔來掃描 SCSI 匯流排。為了避免潛在的檔案系統損毀,EMC 要求您遵循 EMC PowerPath for Linux 的廠商文件中提供的程序來操作。

使用以下程序掃描裝置,以便在不將系統重新開機的情況下使這些裝置適用於多重路徑。

  1. 在儲存子系統中,使用廠商的工具來配置裝置並更新其存取控制設定,以允許 Linux 系統存取新的儲存。如需詳細資料,請參閱廠商提供的文件。

  2. 掃描主機的所有目標,以使 Linux 核心的 SCSI 子系統的中間層級可辨識其新裝置。在終端機主控台提示符處輸入

    tux > sudo rescan-scsi-bus.sh

    根據您的設定,您可能需要搭配選用參數執行 rescan-scsi-bus.sh。如需詳細資料,請參閱 rescan-scsi-bus.sh --help

  3. 請在 systemd 記錄中檢查掃描進度 (如需詳細資料,請參閱Book “管理指南”, Chapter 17 “journalctl:查詢 systemd 日誌”)。在終端機主控台提示符處輸入:

    tux > sudo journalctl -r

    此指令會顯示記錄的最後幾行。例如:

    tux > sudo journalctl -r
    Feb 14 01:03 kernel: SCSI device sde: 81920000
    Feb 14 01:03 kernel: SCSI device sdf: 81920000
    Feb 14 01:03 multipathd: sde: path checker registered
    Feb 14 01:03 multipathd: sdf: path checker registered
    Feb 14 01:03 multipathd: mpath4: event checker started
    Feb 14 01:03 multipathd: mpath5: event checker started
    Feb 14 01:03:multipathd: mpath4: remaining active paths: 1
    Feb 14 01:03 multipathd: mpath5: remaining active paths: 1
    [...]
  4. 重複上述步驟,以新增通過 Linux 系統中連接至新裝置的其他 HBA 配接器的路徑。

  5. 執行 multipath 指令辨識可設定 DM-MPIO 組態的裝置。在終端機主控台提示符處輸入

    tux > sudo multipath

    您現在可以設定新裝置以進行多重路徑了。

17.14.2 掃描新分割的裝置而不重新開機

使用本節中的範例,可以在不重新開機的情況下偵測新增的多重路徑 LUN。

警告
警告:EMC PowerPath 環境

在 EMC PowerPath 環境中,請勿使用作業系統隨附的 rescan-scsi-bus.sh 公用程式或 HBA 廠商程序檔來掃描 SCSI 匯流排。為了避免潛在的檔案系統損毀,EMC 要求您遵循 EMC PowerPath for Linux 的廠商文件中提供的程序來操作。

  1. 開啟終端機主控台。

  2. 掃描主機的所有目標,以使 Linux 核心的 SCSI 子系統的中間層級可辨識其新裝置。在終端機主控台提示符處輸入

    tux > rescan-scsi-bus.sh

    根據您的設定,您可能需要搭配選用參數執行 rescan-scsi-bus.sh。如需詳細資料,請參閱 rescan-scsi-bus.sh --help

  3. 輸入以下指令驗證裝置是否已探查到 (例如連結是否具有一個新的時戳):

    tux > ls -lrt /dev/dm-*

    也可以輸入以下指令在 /dev/disk/by-id 中驗證裝置:

    tux > ls -l /dev/disk/by-id/
  4. 輸入以下指令驗證新裝置是否顯示在記錄中:

    tux > sudo journalctl -r
  5. 使用文字編輯器在 /etc/multipath.conf 檔案中新增裝置的新別名定義,如 data_vol3

    例如,如果 UUID 為 36006016088d014006e98a7a94a85db11,請進行下列變更:

    defaults {
         user_friendly_names   yes
      }
    multipaths {
         multipath {
              wwid    36006016088d014006e98a7a94a85db11
              alias  data_vol3
              }
      }
  6. 輸入以下指令建立裝置的分割區表:

    tux > fdisk /dev/disk/by-id/dm-uuid-mpath-<UUID>

    以裝置 WWID 取代 UUID,例如 36006016088d014006e98a7a94a85db11

  7. 輸入以下指令觸發 udev:

    tux > sudo echo 'add' > /sys/block/DM_DEVICE/uevent

    例如,若要為 dm-8 上的分割區產生裝置對應程式裝置,請輸入:

    tux > sudo echo 'add' > /sys/block/dm-8/uevent
  8. 在裝置 /dev/disk/by-id/dm-uuid-mpath-UUID_partN 上建立檔案系統。根據您選擇的檔案系統,您可以使用下列指令之一實現此目的:mkfs.btrfs mkfs.ext3mkfs.ext4mkfs.xfs。如需詳細資料,請參閱相應的 man 頁面。以實際 UUID 和分割區編號取代 UUID_partN,例如 36006016088d014006e98a7a94a85db11_part1。

  9. 輸入以下指令為新分割區建立標籤:

    tux > sudo tune2fs -L LABELNAME /dev/disk/by-id/dm-uuid-UUID_partN

    以實際 UUID 和分割區編號取代 UUID_partN,例如 36006016088d014006e98a7a94a85db11_part1。以您選擇的標籤取代 LABELNAME

  10. 輸入以下指令以重新設定 DM-MPIO,使其讀取別名:

    tux > sudo multipathd -k'reconfigure'
  11. 輸入以下指令驗證 multipathd 是否可辨識裝置:

    tux > sudo multipath -ll
  12. 使用文字編輯器在 /etc/fstab 檔案中新增掛接項目。

    此時,您在上一步中建立的別名在 /dev/disk/by-label 目錄中尚不存在。為 /dev/dm-9 路徑新增一個掛接項目,然後在下次重新開機到以下項目之前變更該項目

    LABEL=LABELNAME
  13. 建立要做為掛接點的目錄,然後掛接裝置。

17.14.3 檢視多重路徑 I/O 狀態

查詢多重路徑 I/O 狀態會輸出多重路徑對應的目前狀態。

multipath -l 選項會顯示上次執行路徑檢查程式後目前的路徑狀態。該選項不會執行路徑檢查程式。

multipath -ll 選項會執行路徑檢查程式,更新路徑資訊,然後顯示目前的狀態資訊。此指令永遠都會顯示路徑狀態的最新資訊。

tux > sudo multipath -ll
3600601607cf30e00184589a37a31d911
[size=127 GB][features="0"][hwhandler="1 emc"]

\_ round-robin 0 [active][first]
  \_ 1:0:1:2 sdav 66:240  [ready ][active]
  \_ 0:0:1:2 sdr  65:16   [ready ][active]

\_ round-robin 0 [enabled]
  \_ 1:0:0:2 sdag 66:0    [ready ][active]
  \_ 0:0:0:2 sdc  8:32    [ready ][active]

它會針對每個裝置顯示裝置的 ID、大小、功能和硬體處理器。

在探查裝置時,裝置的路徑會自動分到不同的優先程度群組。每次只有一個優先程度群組處於主動狀態。對於主動/主動組態,所有路徑都屬於同一個群組。對於主動/被動組態,被動路徑位於另外的優先程度群組中。

指令會顯示每個群組的下列資訊:

  • 用於平衡群組內 I/O 的排程規則,如輪替式

  • 該群組是處於主動、已停用還是已啟用狀態

  • 該群組是否為第一個 (優先程度最高) 群組

  • 群組內包含的路徑

指令會顯示每個路徑的下列資訊:

  • 實體位址,格式為 HOST:BUS:TARGET:LUN,例如 1:0:1:2

  • 裝置節點名稱,如 sda

  • Major:minor 號碼

  • 裝置的狀態

17.14.4 在出錯狀況下管理 I/O

如果所有路徑同時失敗,您可能需要啟用 queue_if_no_path 設定多重路徑,以將 I/O 排入佇列。如果不啟用,I/O 便會在所有路徑都失敗時立即失敗。在驅動程式、HBA 或光纖出現假性錯誤,且這類錯誤會導致所有路徑遺失的特定情況下,應將 DM-MPIO 設定為將所有 I/O 排入佇列,且永不向上傳播錯誤。

在叢集中使用多重路徑裝置時,您可以選擇停用 queue_if_no_path。如此,系統就不會將 I/O 排入佇列,而是自動使路徑失效,並會將 I/O 錯誤升級,產生叢集資源容錯移轉。

啟用 queue_if_no_path 會導致 I/O 在有路徑重新啟用之前無限期地排入佇列,因此請確定 multipathd 正在執行,且對您的情況有效。否則,在重新開機或手動返回到容錯移轉以取代佇列之前,I/O 可能會無限期地擱置於受影響的多重路徑裝置中。

若要測試案例,請執行下列步驟:

  1. 開啟終端機主控台。

  2. 輸入以下指令啟動裝置 I/O 的佇列功能而非容錯移轉:

    tux > sudo dmsetup message DEVICE_ID 0 queue_if_no_path

    以裝置的 ID 取代 DEVICE_ID。0 值代表磁區,當不需要磁區資訊時使用。

    例如,輸入:

    tux > sudo dmsetup message 3600601607cf30e00184589a37a31d911 0 queue_if_no_path
  3. 輸入以下指令返回到裝置 I/O 的容錯移轉:

    tux > sudo dmsetup message DEVICE_ID 0 fail_if_no_path

    此指令會立即使所有排入佇列的 I/O 失敗。

    以裝置的 ID 取代 DEVICE_ID。例如,輸入:

    tux > sudo dmsetup message 3600601607cf30e00184589a37a31d911 0 fail_if_no_path

若要對所有路徑都失敗的情況設定佇列 I/O,請執行下列步驟:

  1. 開啟終端機主控台。

  2. 在文字編輯器中開啟 /etc/multipath.conf 檔案。

  3. 取消預設區段及其結束括號的註解,然後新增 default_features 設定,如下所示:

    defaults {
      default_features "1 queue_if_no_path"
    }
  4. 修改 /etc/multipath.conf 檔案後,您必須執行 dracut -f 在系統中重新建立 initrd,然後重新開機以使變更生效。

  5. 當您準備好返回到裝置 I/O 的容錯移轉時,請輸入:

    tux > sudo dmsetup message MAPNAME 0 fail_if_no_path

    以裝置對應的別名或裝置 ID 取代 MAPNAME。0 值代表磁區,當不需要磁區資訊時使用。

    此指令會立即使所有排入佇列的 I/O 失敗,並將錯誤傳播到呼叫應用程式。

17.14.5 解決擱置的 I/O

如果所有路徑同時失敗,且 I/O 雖已排入佇列卻被擱置時,請執行下列步驟:

  1. 在終端機主控台提示符處輸入以下指令:

    tux > sudo dmsetup message MAPNAME 0 fail_if_no_path

    以裝置的正確裝置 ID 或對應的別名取代 MAPNAME。0 值代表磁區,當不需要磁區資訊時使用。

    此指令會立即使所有排入佇列的 I/O 失敗,並將錯誤傳播到呼叫應用程式。

  2. 輸入下列指令重新啟動佇列:

    tux > sudo dmsetup message MAPNAME 0 queue_if_no_path

17.14.6 設定 IBM Z 裝置的預設設定

對包含多重路徑功能的 IBM Z 裝置進行的測試表明,應將 dev_loss_tmo 參數設定為無限 (2147483647),將 fast_io_fail_tmo 參數設定為 5 秒。若您使用的是 IBM Z 裝置,請依照以下方式修改 /etc/multipath.conf 檔案以指定這些值:

defaults {
       dev_loss_tmo 2147483647
       fast_io_fail_tmo 5
}

dev_loss_tmo 參數設定將某個多重路徑連結標記為失敗之前需等待的秒數。若該路徑失敗,則目前在該路徑上的所有 I/O 都會失敗。預設值會因所用的裝置驅動程式而有所不同。若要使用驅動程式的內部逾時,請將值設定為零 (0)。也可以將其設定為「infinity」或 2147483647,如此會將其設定為最大值 2147483647 秒 (68 年)。

fast_io_fail_tmo 參數設定偵測到連結問題後將 I/O 確定為失敗之前需等待的時間。到達該驅動程式的 I/O 都會失敗。如果 I/O 排在擁堵的佇列中,則未到 dev_loss_tmo 時間且佇列未疏通之前 I/O 不會失敗。

如果您修改了 /etc/multipath.conf 檔案,只有在您更新多重路徑對應或 multipathd 精靈 (systemctl restart multipathd) 重新啟動後,變更才會套用。

17.14.7 將多重路徑用於 NetApp 裝置

將多重路徑用於 NetApp 裝置時,建議在 /etc/multipath.conf 檔案中進行如下設定:

  • 為 NetApp 裝置全域設定下列參數的預設值:

    max_fds max
    queue_without_daemon no
  • 在硬體表中為 NetApp 裝置設定下列參數的預設值:

    dev_loss_tmo infinity
    fast_io_fail_tmo 5
    features "3 queue_if_no_path pg_init_retries 50"

17.14.8 將 --noflush 用於多重路徑裝置

在多重路徑裝置上執行時,應始終使用 --noflush 選項。

例如,在執行表格重新載入的程序檔中,應使用 --noflush 選項進行恢復,以確保所有重要 I/O 不會被衝洗,因為您需要多重路徑拓樸資訊。

load
resume --noflush

17.14.9 根裝置為多重路徑裝置時的 SAN 逾時設定

所有路徑都已失敗並已從系統移除時,多重路徑裝置上包含根目錄 (/) 的系統可能會停止,因為系統會收到儲存子系統 (例如光纖通道儲存陣列) 發出的 dev_loss_tmo 逾時通知。

如果系統裝置設定了多個路徑,且多重路徑 no_path_retry 設定處於啟用狀態,您應相應地修改儲存子系統的 dev_loss_tmo 設定,以確保在所有路徑失效的情況下不會移除任何裝置。強烈建議您將 dev_loss_tmo 的值設為等於或大於多重路徑中 no_path_retry 設定的值。

建議按如下方式設定儲存子系統的 dev_los_tmo

<dev_loss_tmo> = <no_path_retry> * <polling_interval>

其中,以下定義適用於多重路徑值:

  • no_path_retry 定義多重路徑 I/O 嘗試多少次後路徑視為遺失並停止將 I/O 排入佇列。

  • polling_interval 是執行路徑檢查的時間間隔 (以秒為單位)。

每個多重路徑值都應在 /etc/multipath.conf 組態檔案中設定。如需更多資訊,請參閱第 17.6 節 「建立或修改 /etc/multipath.conf 檔案」

17.15 MPIO 疑難排解

本節說明 MPIO 的一些已知問題和可能的解決方案。

17.15.1 在多重路徑裝置上安裝 GRUB2

在具有 Btrfs 的傳統 BIOS 系統上,grub2-install 可能會失敗,並顯示許可權遭拒。若要解決此問題,請確定 /boot/grub2/SUBDIR/ 子磁碟區是以讀寫 (rw) 模式掛接的。SUBDIR 可以是 x86_64-efii386-pc

17.15.2 啟用多重路徑時系統在開機過程中退出到緊急外圍程序

在開機過程中,系統退出到緊急外圍程序,並顯示類似如下的訊息:

[  OK  ] Listening on multipathd control socket.
         Starting Device-Mapper Multipath Device Controller...
[  OK  ] Listening on Device-mapper event daemon FIFOs.
         Starting Device-mapper event daemon...
         Expecting device dev-disk-by\x2duuid-34be48b2\x2dc21...32dd9.device...
         Expecting device dev-sda2.device...
[  OK  ] Listening on udev Kernel Socket.
[  OK  ] Listening on udev Control Socket.
         Starting udev Coldplug all Devices...
         Expecting device dev-disk-by\x2duuid-1172afe0\x2d63c...5d0a7.device...
         Expecting device dev-disk-by\x2duuid-c4a3d1de\x2d4dc...ef77d.device...
[  OK  ] Started Create list of required static device nodes ...current kernel.
         Starting Create static device nodes in /dev...
[  OK  ] Started Collect Read-Ahead Data.
[  OK  ] Started Device-mapper event daemon.
[  OK  ] Started udev Coldplug all Devices.
         Starting udev Wait for Complete Device Initialization...
[  OK  ] Started Replay Read-Ahead Data.
         Starting Load Kernel Modules...
         Starting Remount Root and Kernel File Systems...
[  OK  ] Started Create static devices
[*     ] (1 of 4) A start job is running for dev-disk-by\x2du...(7s / 1min 30s)
[*     ] (1 of 4) A start job is running for dev-disk-by\x2du...(7s / 1min 30s)

...

Timed out waiting for device dev-disk-by\x2duuid-c4a...cfef77d.device.
[DEPEND] Dependency failed for /opt.
[DEPEND] Dependency failed for Local File Systems.
[DEPEND] Dependency failed for Postfix Mail Transport Agent.
Welcome to emergency shell
Give root password for maintenance
(or press Control-D to continue):

在下列情況下,可能會發生此問題:

程序 17.1︰ 應急外圍程序:將檔案系統加入黑名單

如果根檔案系統不在多重路徑上,卻啟用了多重路徑,則需要此修復。在此類設定中,多重路徑會嘗試為未列入黑名單的所有裝置設定其路徑。由於具有根檔案系統的裝置已掛接,它對於多重路徑而言是無法存取的,因而會導致路徑設定失敗。您可以在 /etc/multipath.conf 中將根裝置列入黑名單來正確設定多重路徑,從而修復此問題。

  1. 在緊急外圍程序中執行 multipath -v2,並確定根檔案系統的裝置。指令將產生類似如下的輸出:

    root # multipath -v2
    Dec 18 10:10:03 | 3600508b1001030343841423043300400: ignoring map

    | : 之間的字串是列入黑名單所需的 WWID。

  2. 開啟 /etc/multipath.conf 並新增以下內容:

    blacklist {
      wwid "WWWID"
    }

    以您在上一步中擷取的 ID 取代 WWWID。如需詳細資訊,請參閱第 17.8 節 「將非多重路徑裝置列入黑名單」

  3. CtrlD 離開緊急外圍程序並將伺服器重新開機。

程序 17.2︰ 應急外圍程序:重建 initrd

如果 initrd 與系統之間的多重路徑狀態 (已啟用或已停用) 不相同,則需要執行此修復程序。若要修復此問題,請重建 initrd

  1. 如果已在系統中啟用多重路徑,請透過以下指令重建支援多重路徑的 initrd:

    tux > dracut --force --add multipath

    如果已在系統中停用多重路徑,請透過以下指令重建支援多重路徑的 initrd:

    tux > dracut --force -o multipath
  2. CtrlD 離開緊急外圍程序並將伺服器重新開機。

程序 17.3︰ 應急外圍程序:重建 initrd

如果 initrd 不包含用於存取網路連接儲存的驅動程式,則需要此修復。例如,如果系統是在沒有多重路徑的情況下安裝的,或者當新增或更換相應硬體時,就可能需要執行此修復程序。

  1. 將所需的驅動程式新增至檔案 /etc/dracut.conf.d/01-dist.conf 中的變數 force_drivers。例如,如果系統包含由 hpsa 驅動程式存取的 RAID 控制器,且多重路徑裝置連接至 qla23xx 驅動程式所存取的 QLogic 控制器,則此項目應為:

    force_drivers+="hpsa qla23xx"
  2. 使用以下指令重建 initrd

    tux > dracut -f --add-multipath
  3. 為了防止在連接網路儲存失敗時系統開機進入應急模式,建議將掛接選項 _netdev 新增到 /etc/fstab 中的相應項目。

  4. CtrlD 離開緊急外圍程序並將伺服器重新開機。

17.15.3 升級到多重路徑 0.4.9 或更高版本後個別裝置的 PRIO 設定失敗

從版本 0.4.9 開始,多重路徑工具使用 /etc/multipath.conf 檔案中 defaults{}devices{} 區段內的 prio 設定。當關鍵字 prio 是為 multipaths{) 區段中的個別 multipath 定義而指定時,它會無訊息式地忽略該關鍵字。

多重路徑工具 0.4.8 允許 multipaths{) 區段內個別 multipath 定義中的 prio 設定置換 defaults{}devices{} 區段內的 prio 設定。

17.15.4 升級到 multipath-tools-0.4.9 或更高版本後使用引數的 PRIO 設定失敗

multipath-tools-0.4.8 升級到 multipath-tools-0.4.9 後,/etc/multipath.conf 檔案中的 prio 設定對於需要引數的優先程度排序器將會損壞。在 multipath-tools-0.4.9 中,prio 關鍵字用於指定優先程度排序器,prio_args 關鍵字則用於為需要引數的優先程度排序器指定引數。以前,優先程度排序器及其引數都在同一 prio 行上指定。

例如,在 multipath-tools-0.4.8 中,下行用於指定優先程度排序器,並且在同一行中指定其引數。

prio "weightedpath hbtl [1,3]:.:.+:.+ 260 [0,2]:.:.+:.+ 20"

升級到 multipath-tools-0.4.9 或更高版本後,該指令會導致錯誤。訊息類似下方所列:

<Month day hh:mm:ss> | Prioritizer 'weightedpath hbtl [1,3]:.:.+:.+ 260
[0,2]:.:.+:.+ 20' not found in /lib64/multipath

若要解決此問題,請使用文字編輯器修改 /etc/multipath.conf 檔案中的 prio 行。建立兩行,在 prio 行上指定優先程度排序器,並在其下的 prio_args 行上指定優先程度排序器引數:

prio "weightedpath"
prio_args "hbtl [1,3]:.:.+:.+ 260 [0,2]:.:.+:.+ 20"

執行 sudo systemctl restart multipathd 重新啟動 multipathd 精靈以使變更生效。

17.15.5 技術資訊文件

如需有關在 SUSE Linux Enterprise Server 上對多重路徑 I/O 問題進行疑難排解的資訊,請參閱 SUSE 知識庫中的下列技術資訊文件 (TID):

18 透過 NFSv4 管理存取控制清單

除了針對使用者、群組和其他人 (ugo) 的簡單讀取、寫入、執行 (rwx) 旗標之外,Linux 中的各存取控制清單 (ACL) 之間沒有統一的標準。控制能力相對較好的一個選擇是 POSIX 從未正式標準化的《Draft POSIX ACLs》(POSIX ACL 草稿)。另一個選擇是 NFSv4 ACL,它們設計為 NFSv4 網路檔案系統的一部分,目的是為 Linux 上的 POSIX 系統與 Microsoft Windows 上的 WIN32 系統之間提供合理的相容性。

NFSv4 ACL 不能完全正確實作 Draft POSIX ACL,因此未在 NFSv4 用戶端上對應 ACL 存取權 (例如使用 setfacl)。

使用 NFSv4 時,無法使用 Draft POSIX ACL (即使是在模擬環境中),必須直接使用 NFSv4 ACL;換言之,雖然 setfacl 可以在 NFSv3 上運作,但不能在 NFSv4 上運作。為了能夠在 NFSv4 檔案系統上使用 NFSv4 ACL,SUSE Linux Enterprise Server 提供了 nfs4-acl-tools 套件,套件中包含下列各項:

  • nfs4-getfacl

  • nfs4-setfacl

  • nfs4-editacl

它們的運作方式與用於檢查和修改 NFSv4 ACL 的 getfaclsetfacl 類似。僅當 NFS 伺服器上的檔案系統提供對 NFSv4 ACL 的全面支援時,這些指令才起作用。雖然某些存取控制項目 (ACE) 的特定組合可能在用戶端中不可用,但用戶端上執行的程式都將受到伺服器所實作之任何限制的影響。

不支援在輸出 NFS 伺服器本地掛接 NFS 磁碟區。

其他資訊

如需相關資訊,請參閱「Introduction to NFSv4 ACLs」(NFSv4 ACL 簡介,網址為 http://wiki.linux-nfs.org/wiki/index.php/ACLs#Introduction_to_NFSv4_ACLs)。