13.2 設定 iSCSI 目標

SUSE® Linux Enterprise Server 隨附一個由 Ardis iSCSI 目標演進而來的開放原始碼 iSCSI 目標解決方案。使用 YaST 即可完成基本設定,但如果要充分利用 iSCSI 的優點,就必須用手動設定。

13.2.1 準備儲存空間

iSCSI 目標組態會將現有區塊設備輸出到 iSCSI 啟動器中。您必須準備要用於目標設備的儲存空間,方法是使用 YaST 中的磁碟分割程式來設定未格式化的分割區或設備,或從指令行對設備進行磁碟分割。

重要: 將某個設備或分割區設定為 iSCSI 目標後,您將無法再透過其本地路徑直接存取它。請勿在建立時為其指定掛接點。

分割設備

  1. root 使用者身分登入,然後開啟 YaST。

  2. 選取系統 > 磁碟分割程式

  3. 按一下繼續顯示關於使用磁碟分割程式的警告。

  4. 按一下新增建立分割區,但不對其進行格式化,也不進行掛接。

    iSCSI 目標能夠以 Linux、Linux LVM 或 Linux RAID 檔案系統 ID 來使用未格式化的分割區。

    1. 選取主分割區,然後按下一步

    2. 指定要使用的空間大小,然後按下一步

    3. 選取不格式化,然後指定檔案系統 ID 類型。

    4. 選取不掛接

    5. 按一下完成

  5. 對稍後要用做 iSCSI LUN 的所有區域重複步驟 4

  6. 按一下接受保留變更,然後關閉 YaST。

對虛擬環境中的設備進行磁碟分割

您可以使用 Xen 訪客伺服器做為 iSCSI 目標伺服器。您必須為客體虛擬機器指定要用於 iSCSI 儲存設備的儲存空間,然後在客體環境內以虛擬磁碟的方式存取該空間。每個虛擬磁碟可以是實體區塊設備,如整個磁碟、分割區或磁碟區,也可以是檔案備份磁碟影像,其中虛擬磁碟是 Xen 主機伺服器中較大實體磁碟上的一個影像檔案。為獲得最佳效能,請從實體磁碟或分割區建立所有虛擬磁碟。為訪客虛擬機器設定虛擬磁碟後,啟動訪客伺服器,然後依照與實體伺服器相同的程序將新的空白虛擬磁碟設定為 iSCSI 目標設備。

檔案備份磁碟影像建立在 Xen 主機伺服器上,然後會指定給 Xen 訪客伺服器。依預設,Xen 會將檔案備份磁碟影像儲存到 /var/lib/xen/images/vm 名稱目錄中,其中 vm 名稱為虛擬機器的名稱。

例如,若要建立大小為 4GB 的磁碟影像 /var/lib/xen/images/vm_one/xen-0,請先確認該目錄已存在,然後再建立影像本身。

  1. root 使用者的身分登入主機伺服器。

  2. 在終端機主控台提示符處,輸入下列指令

    mkdir -p /var/lib/xen/images/vm_one
    dd if=/dev/zero of=/var/lib/xen/images/vm_one/xen-0 seek=1M bs=4096 count=1
    
  3. 將檔案系統影像指定給 Xen 組態檔案中的訪客虛擬機器。

  4. root 使用者身分登入訪客伺服器,然後依照分割設備 中的程序使用 YaST 設定虛擬區塊設備。

13.2.2 使用 YaST 建立 iSCSI 目標

  1. 開啟 YaST,並以 root 使用者身分登入。

  2. 選取網路服務 > iSNS 目標

    YaST 會開啟至「iSCSI 目標綜覽」頁面的服務索引標籤中

  3. 服務啟動區域中選取下列其中一項:

    • 開機時: 以後伺服器重新開機時自動啟動啟動器服務。

    • 手動 (預設): 手動啟動服務。

  4. 如果您是使用 iSNS 通告目標,請選取iSNS 存取控制核取方塊,然後輸入 IP 位址。

  5. 若需要,可開啟防火牆埠以允許從遠端電腦存取伺服器。

    1. 選取在防火牆中開啟埠核取方塊。

    2. 指定要開啟連接埠的網路介面,方法是按一下防火牆細節,選取該網路介面旁的核取方塊將其啟用,然後按一下確定接受設定。

  6. 若需要驗證才能連接到此伺服器上設定的目標設備,請選取全域索引標籤,取消選取無驗證以啟用驗證,然後指定內送和外送驗證所需的身分證明。

    系統預設會啟用無驗證選項。您可以指定內送驗證、外送驗證,或針對內送和外送兩個方向的驗證。您也可以將多組使用者名稱與密碼新增至內送驗證下的清單中,為內送驗證指定多組身分證明。

  7. 設定 iSCSI 目標設備。

    1. 選取目標索引標籤。

    2. 若尚未清除 iSCSI 範例目標,請從清單中將其選取並刪除,然後按一下繼續確認刪除。

    3. 按一下新增以新增新的 iSCSI 目標。

      iSCSI 目標會自動顯示為未格式化的分割區或區塊設備,並完成「目標」和「識別碼」字段。

    4. 您可以接受此設定,也可以瀏覽並選取另一個空間。

      您也可以分割空間以在設備上建立 LUN,只需按一下新增並指定分配給該 LUN 的磁區。若需要為這些 LUN 設定其他選項,請選取進階設定

    5. 下一步

    6. 對要建立的每個 iSCSI 目標設備重複步驟 7.c步驟 7.e

    7. (選擇性) 在服務索引標籤中,按一下儲存將設定之 iSCSI 目標的相關資訊輸出到檔案。

      這樣,稍後為資源使用者提供此資訊便會更為方便。

    8. 按一下完成建立設備,然後按一下重新啟動 iSCSI 軟體堆疊。

若要設定 iSCSI 目標,請在 YaST 中執行iSCSI 目標模組。組態分為三個索引標籤:在服務索引標籤中,選取啟動模式和防火牆設定。如果要從遠端機器存取 iSCSI 目標,請選取開啟防火牆中的連接埠。若 iSNS 伺服器應管理探查與存取控制,請啟用iSNS 存取控制,然後輸入 iSNS 伺服器的 IP 位址。您不能使用主機名稱,而是必須使用 IP 位址。如需 iSNS 相關的詳細資訊,請閱讀節 12.0, iSNS for Linux

全域索引標籤提供 iSCSI 伺服器的設定。此處所設定的驗證將用來探查服務,而不是用於存取目標。如果不想將存取僅限於搜索,請使用無驗證

如果需要驗證,就必須考慮兩種可能性。一種是啟動程式必須證明它有許可權,可以在 iSCSI 目標上執行探查。這是藉由內送驗證來完成。另一種可能性是 iSCSI 目標必須向啟動程式證明它就是預期的目標。因此,iSCSI 目標也可以提供使用者名稱和密碼。這是藉由外送驗證來完成。RFC 3720 提供了有關驗證的詳細資訊。

目標是在目標索引標籤中定義。使用新增可建立新的 iSCSI 目標。第一個對話方塊會詢問要輸出的設備相關資訊。

目標

目標行有類似下列固定語法:

iqn.yyyy-mm.<reversed domain name>

開頭一定是 iqn。yyyy-mm 則採用目標啟用時的日期格式。如需更多有關命名慣例的資訊,請參閱 RFC 3722

Identifier

識別碼可自由選取。它應該遵循某些機制,使系統結構更為一致。

LUN

數個 LUN 可以指定給一個目標。若要執行此操作,請在目標索引標籤中選取目標,然後按一下編輯。然後,向現有的目標新增新的 LUN。

路徑

新增要輸出的區塊設備或檔案系統影像的路徑。

下一個功能表可設定目標的存取限制。組態非常類似探查驗證的組態。在這裡,您至少必須設定內送驗證。

下一步會完成新目標的組態,讓您回到目標索引標籤的綜覽頁面。最後按一下完成啟動變更。

13.2.3 手動設定 iSCSI 目標

/etc/ietd.conf 中設定 iSCSI 目標。這個檔案在 Target 宣告之前的所有參數都是供檔案全域使用。這部分的驗證資訊具有特殊意義 — 它不是全域的,而只用於探查 iSCSI 目標。

如果您可以存取 iSNS 伺服器,則應先設定檔案以告知目標有關此伺服器的資訊。iSNS 伺服器的位址必須始終以 IP 位址提供。您無法指定伺服器的 DNS 名稱。此功能的組態如下︰

iSNSServer 192.168.1.111
iSNSAccessControl no

此組態可確保 iSCSI 目標使用 iSNS 伺服器進行註冊,這樣就可為啟動程式提供探查。如需有關 iSNS 的詳細資訊,請參閱節 12.0, iSNS for Linux。iSNS 探查的存取控制不受支援。只需保持「無 iSNS 存取控制」。

所有直接的 iSCSI 驗證都可以在兩個方向上完成。iSCSI 目標可要求 iSCSI 啟動程式使用 IncomingUser 進行驗證,這可以新增許多次。iSCSI 啟動器也可以要求 iSCSI 目標進行驗證。這時應使用 OutgoingUser。兩者語法相同:

IncomingUser <username> <password>
OutgoingUser <username> <password>

驗證後面接著一或多個目標定義。請為每個目標新增 Target 區段。此區段的開頭固定是 Target 識別碼,後面接著邏輯單位編號的定義:

Target iqn.yyyy-mm.<reversed domain name>[:identifier]
          Lun 0 Path=/dev/mapper/system-v3
          Lun 1 Path=/dev/hda4
          Lun 2 Path=/var/lib/xen/images/xen-1,Type=fileio

Target 行中,yyyy-mm 是目標啟用時的日期,而且 identifier 可以自由選取。如需更多有關命名慣例的資訊,請參閱 RFC 3722。本例中輸出三個不同的區塊設備。第一個區塊設備是邏輯磁碟區 (請參閱節 4.0, LVM 組態),第二個是 IDE 分割區,第三個是本地檔案系統中可用的影像。這些對 iSCSI 啟動程式而言都像是區塊設備。

啟用 iSCSI 目標前,請在 Lun 定義後至少新增一個 IncomingUser。它會執行此目標所用的驗證。

若要啟用所有變更,請用 rcopen-iscsi restart 重新啟動 iscsitarget 精靈。檢查 /proc 檔案系統中的組態:

cat /proc/net/iet/volume
tid:1 name:iqn.2006-02.com.example.iserv:systems
        lun:0 state:0 iotype:fileio path:/dev/mapper/system-v3
        lun:1 state:0 iotype:fileio path:/dev/hda4
        lun:2 state:0 iotype:fileio path:/var/lib/xen/images/xen-1

還有許多其他選項可控制 iSCSI 目標的行為。如需詳細資訊,請參閱 ietd.conf 線上文件。

/proc 檔案系統中也會顯示作用中工作階段。針對每個連接的啟動程式,/proc/net/iet/session 中會新增一個額外的項目:

cat /proc/net/iet/session
tid:1 name:iqn.2006-02.com.example.iserv:system-v3
   sid:562949957419520 initiator:iqn.2005-11.de.suse:cn=rome.example.com,01.9ff842f5645
      cid:0 ip:192.168.178.42 state:active hd:none dd:none
   sid:281474980708864 initiator:iqn.2006-02.de.suse:01.6f7259c88b70
      cid:0 ip:192.168.178.72 state:active hd:none dd:none

13.2.4 使用 ietadm 設定線上目標

如有必要變更 iSCSI 目標組態,您必須重新啟動目標,才能使在組態檔案中所做的變更生效。可惜的是,在這個過程中,所有作用中工作階段都會被中斷。若要維持不受干擾的操作,除了在主要組態檔案 /etc/ietd.conf 中進行變更之外,您還要使用 ietadm 管理公用程式手動變更目前組態。

若要建立擁有 LUN 的 iSCSI 目標,請先更新您的組態檔案。增加的項目可為:

Target iqn.2006-02.com.example.iserv:system2
          Lun 0 Path=/dev/mapper/system-swap2
          IncomingUser joe secret

若要手動設定這個組態,請執行下列步驟:

  1. 使用 ietadm --op new --tid=2 --params Name=iqn.2006-02.com.example.iserv:system2 指令建立新目標。

  2. 使用 ietadm --op new --tid=2 --lun=0 --params Path=/dev/mapper/system-swap2 建立邏輯單位。

  3. 使用 ietadm --op new --tid=2 --user --params=IncomingUser=joe,Password=secret 設定這個目標上的使用者名稱和密碼組合。

  4. 使用 cat /proc/net/iet/volume 檢查組態。

您也可以刪除作用中連線。首先,使用 cat /proc/net/iet/session 指令檢查所有作用中連線。如下所示:

cat /proc/net/iet/session
tid:1 name:iqn.2006-03.com.example.iserv:system
        sid:281474980708864 initiator:iqn.1996-04.com.example:01.82725735af5
                cid:0 ip:192.168.178.72 state:active hd:none dd:none

若要刪除工作階段 ID 為 281474980708864 的工作階段,請使用 ietadm --op delete --tid=1 --sid=281474980708864 --cid=0 指令。請注意,這樣會使用戶端系統無法存取設備,而且存取這個設備的程序可能會暫停。

ietadm 也可用來變更各種組態參數。使用 ietadm --op show --tid=1 --sid=0 可取得全域變數清單。輸出會類似以下資訊:

InitialR2T=Yes
ImmediateData=Yes
MaxConnections=1
MaxRecvDataSegmentLength=8192
MaxXmitDataSegmentLength=8192
MaxBurstLength=262144
FirstBurstLength=65536
DefaultTime2Wait=2
DefaultTime2Retain=20
MaxOutstandingR2T=1
DataPDUInOrder=Yes
DataSequenceInOrder=Yes
ErrorRecoveryLevel=0
HeaderDigest=None
DataDigest=None
OFMarker=No
IFMarker=No
OFMarkInt=Reject
IFMarkInt=Reject

所有這些參數均可輕鬆變更。例如,如果要將最大連線數變更為 2,請使用

ietadm --op update --tid=1 --params=MaxConnections=2. 

/etc/ietd.conf 檔案中,關聯行應該類似 MaxConnections 2

警告: 透過 ietadm 公用程式所做的變更對系統並非永久有效。這些變更如果不加入 /etc/ietd.conf 組態檔案,則會在下次重新開機時丟失。根據您網路的 iSCSI 使用情況,這可能會導致嚴重的問題。

ietadm 公用程式還有其他許多選項可供使用。使用 ietadm -h 可找到綜覽。該處的縮寫為目標 ID (tid)、工作階段 ID (sid) 和連線 ID (cid)。您也可以在 /proc/net/iet/session 找到這些資訊。