Open-iSCSI - Arch Linux 中文维基

跳至內容

# Open-iSCSI

出自 Arch Linux 中文维基
翻譯狀態：

- 本文（或部分內容）譯自 Open-iSCSI，最近一次同步於 2023-12-12，若英文版本有所更改，則您可以幫助同步與翻譯更改的內容。
- 您可以在 ArchWiki 的對應頁面找到本文翻譯的原始修訂歷史。
- 本文可能與英文原文存在出入。

本文講述如何通過 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.iscsi` 和 `iscsid.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

分類：​

- 存儲
- 網絡

Open-iSCSI
新增話題