Open-iSCSI

出自 Arch Linux 中文维基

本文講述如何通過 Open-iSCSI initiator 訪問 iSCSI 目標。

注意: iSCSI 是加密的,不建議通過不安全的信道進行數據傳輸。

安裝[編輯 | 編輯原始碼]

安裝 open-iscsi 包。

注意: 舊版的 Linux-iSCSI initiator 已經於2005年4月合併進 Open-iSCSI 。不要和 linux-iscsi.org 搞混了,這個是 LIO 目標的網站。

概覽[編輯 | 編輯原始碼]

下圖顯示各組件是如何協同工作的。更詳細的版本參見:Open-iSCSI 模塊(已過時)

 +--------------------------------------------------------+             
 | Targets & Sessions configuration files and directories |             
 +--------------------------------------------------------+             
                                                                       
 +--------------------------+     +----------------------------------+ 
 | iscsiadm                 |     | iscsid: iSCSI daemon             | 
 |                          |     |                                  | 
 |  * Command line tool     |<--->|  * Implements Session management | 
 |  * Manages database of   |     |  * Communicates with iscsiadm    | 
 |    sessions and targets  |     |    and iscsi kernel modules      | 
 +--------------------------+     +---------------+------------------+ 
                                                  |                    
 User space                                       |                    
- - - - - - - - - - - - - - - - - - - - - - - - - | - - - - - - - - - -
 Kernel                                           v                    
         +-----------------------------------------------------------+ 
         | kernel modules: scsi_transport_iscsi, iscsi_tcp, libiscsi | 
         +-----------------------------------------------------------+ 

來自 Open-iSCSI README

配置持久化由一套文件及目錄樹實現,一共包括在兩個目錄中:

注意:open-iscsi 2.1.9-2 開始,數據庫主目錄由 /etc/iscsi/ 變更為 /var/lib/iscsi/。這一遷移過程不是自動的,需要先斷開所有目標並停止服務,手動遷移後再重新連接。另外,需檢查文件系統權限。

/etc/iscsi/ 應只包含 initiatorname.iscsiiscsid.conf

  • 發現目錄 /var/lib/iscsi/send_targets:包含由目標地址命名的目錄
  • 節點目錄 /var/lib/iscsi/nodes:包含由特定設備的 ION(ISCSI Unique Name)命名的目錄

配置[編輯 | 編輯原始碼]

啟動服務[編輯 | 編輯原始碼]

iscsid 由一個 systemd 單元來管理。

啟動 iscsid.service 或是 iscsid.socket

ISCSI Qualified Name (IQN)[編輯 | 編輯原始碼]

IQN 被用於識別每個設備。

Open-ISCSI 將它的 initiator IQN 存放於 /etc/iscsi/initiatorname.iscsi 文件中,格式為 InitiatorName=iqn

在安裝過程中會生成初始 IQN,如果你想生成新的 IQN,可以使用 iscsi-iname 工具來輸出新的 IQN。

認證[編輯 | 編輯原始碼]

如果 ISCSI 目標要求 initiator 進行認證,則需要更新配置文件(/etc/iscsi/iscsid.conf)的內容。

下列參數用於驗證從 initiator 到目標的登錄會話:

node.session.auth.authmethod = CHAP
node.session.auth.username = initiators_username
node.session.auth.password = initiators_password

如果目標啟用了雙向驗證,則需要額外修改下列參數:

node.session.auth.username_in = targets_username
node.session.auth.password_in = targets_password

如果目標需要驗證才能獲取節點清單(少數情況下出現),則需要額外修改下列參數:

discovery.sendtargets.auth.authmethod = CHAP
discovery.sendtargets.auth.username = initiators_username
discovery.sendtargets.auth.password = initiators_password

如果目標啟用了雙向驗證,則需要額外修改下列參數:

discovery.sendtargets.auth.username_in = targets_username
discovery.sendtargets.auth.password_in = targets_password
警告: 不能出現兩個一樣的密碼,意味着上述配置中需要四個不同的密碼。
注意: 驗證數據存放在按節點區分的配置文件中。要更新這些數據,可以打開 /var/lib/iscsi/nodes/iqn.node-name/node-ip-address,port,1/default 並按需添加或編輯選項。[1]

發現目標[編輯 | 編輯原始碼]

向目標請求節點清單:

# iscsiadm --mode discovery --portal target_ip --type sendtargets

成功後,節點和目標的信息會保存到你的 initiator 中。

手動添加目標[編輯 | 編輯原始碼]

# iscsiadm -m node --target targetname --portal target_ip -o new

可以在服務器不允許發現時使用該方法。

刪除廢舊目標[編輯 | 編輯原始碼]

# iscsiadm -m discovery -p target_ip -o delete

登錄到有效的目標[編輯 | 編輯原始碼]

# iscsiadm -m node -L all

或者,登錄到指定目標

# iscsiadm -m node --targetname=targetname --login

登出:

# iscsiadm -m node -U all

信息[編輯 | 編輯原始碼]

對於運行中的會話

# iscsiadm -m session -P 3

上面命令輸出的最後一行會顯示連接到的設備名,比如

Attached scsi disk sdd State: running

對於已知節點

# iscsiadm -m node

在線修改卷大小[編輯 | 編輯原始碼]

如果 iscsi 塊設備包含一個分區表,則不能在線修改卷大小。這種情況下必須首先卸載文件系統,然後再調整相關分區的大小。

  1. 重新掃描當前會話中的活動節點。
    # iscsiadm -m node -R
  2. 在多路徑環境中,也必須重新掃描多路徑下的卷信息。
    # multipathd -k"resize map sdx"
  3. 完成後再調整文件系統大小。
    # resize2fs /dev/sdx

提示[編輯 | 編輯原始碼]

檢查已連接的 iSCSI 設備[編輯 | 編輯原始碼]

可以用下列命令檢查已連接的 iSCSI 設備在 /dev/ 設備樹中的位置:

$ ls -l /dev/disk/by-path/ip-*

啟動時登錄到目標[編輯 | 編輯原始碼]

要在啟動時登錄到目標,需啟用 iscsi.service 服務,並確保節點的配置(/var/lib/iscsi/nodes/iqn.node-name/node-ip-address,port)中包含 node.startup = automatic 一項。

注意: systemd 單元名稱為 iscsi.service,而不是 iscsid.service[2]

排障[編輯 | 編輯原始碼]

客戶端 IQN[編輯 | 編輯原始碼]

你可能需要在服務端(target)的賬戶配置中添加客戶端的 IQN(位於 /etc/iscsi/initiatorname.iscsi)。

調試 iSCSI daemon[編輯 | 編輯原始碼]

可以使用如下命令以調試模式運行 iSCSI daemon(確保已停止 iscsid.service):

# iscsid -d 8 -c /etc/iscsi/iscsid.conf -i /etc/iscsi/initiatorname.iscsi -f