跳至內容
出自 Arch Linux 中文维基

LIO[失效連結 2022-12-31](LinuxIO)是從 Linux 2.6.38 開始內置在內核的 iSCSI 目標。

安裝

Linux 從 3.1 版本開始自帶 iSCSI 目標框架。

需要用到的兩個內核模塊為 target_core_modiscsi_target_mod,應已內置在內核中,並會自動加載。

強烈建議使用開放分支版本的包:targetcli-fbAURpython-rtslib-fbAURpython-configshell-fb

啟動/啟用python-rtslib-fbAUR 安裝的 target.service 來加載需要的模塊,載入配置並加載之前保存的 iSCSI 目標配置。

targetcli

root 身份運行 targetcli status 來查看使用中配置的相關信息。

你可以使用 targetcli 來創建完整配置文件,具體信息可參考 targetcli(8)

交互式配置終端會自動為你填充大部分名稱和參數,但你也可以自行指定配置信息。 在終端內的任何時候,你都可以輸入 help 來查看當前的可用命令。

提示:在該終端內,你可以使用 tab 進行命令補全,也可以使用 cd 來查看並選擇路徑。

在啟動目標後(步驟參考上方),你可以通過

# targetcli

進入到交互式配置終端。

在該終端下,選定一個塊設備(此處以 /dev/disk/by-id/md-name-nas:iscsi 為例):

/backstores/block> create md_block0 /dev/disk/by-id/md-name-nas:iscsi
注意:你可以使用任意塊設備,也可以使用 RAID 和 LVM 卷。如果你打算使用 fileio 而不是塊存儲對象,也可以指定一個文件。

然後創建一個 iSCSI 限定名稱(IQN)和目標門戶組(TPG):

...> cd /iscsi
/iscsi> create
注意:如果要自行指定 IQN,可在 create 後加上想要的名稱。

接下來讓 LIO 使用你指定的塊設備作為目標的後端存儲(backstore):

注意:你可以通過 cd 進入到你環境下的 <iqn>/tpg1 路徑。
.../tpg1> cd luns
.../tpg1/luns> create /backstores/block/md_block0

然後創建一個門戶(portal),這將創建一個守護進程來監聽上行連接:

.../luns/lun0> cd ../../portals
.../portals> create

Targetcli 將匯報 LIO 監聽的 IP 及埠(默認為 0.0.0.0(所有地址))。 你至少需要將 IP 提供給客戶端,埠應為標準的 3260 埠。

為了讓客戶端/發起方能夠連接到目標,你需要將發起端的 IQN 加入到目標的配置中:

...> cd ../../acls
.../acls> create iqn.2005-03.org.open-iscsi:SERIAL

你應使用發起端的 IQN,而不是照抄 iqn.2005-03.org.open-iscsi:SERIAL 到命令中。 一般可以在 /etc/iscsi/initiatorname.iscsi 找到 IQN。 你需要對每一個用到該目標的發起端都進行該操作。 Targetcli 會自動將創建的 LUN 映射到最近創建的 ACL 下。

注意:你可以修改自動映射的 LUN,也可以修改其讀寫權限。具體信息可在該步驟時輸入 help create 來查看。

確認配置起效後,最後一步是保存配置:

...> cd /
/> saveconfig

這一步將把配置保存在 /etc/target/saveconfig.json 文件內。 你現在就可以安全地啟動和停止 target.service 了,不用擔心丟失配置。

提示:你可以在使用 saveconfig 時將文件名作為參數傳入,也可以使用 clearconfig 清空所有配置。

認證

目標默認啟用 CHAP 認證。 你可以選擇配置一個密碼,也可以禁用認證。

禁用認證

在 targetcli 中進入到目標的路徑下(例如 /iscsi/iqn.../tpg1),然後:

.../tpg1> set attribute authentication=0
警告:設置該參數後,知道任一發起方 IQN 的人都可以連接到該目標。建議僅用於測試或家庭環境中。

配置憑據

在 targetcli 中進入到目標的具體 ACL 路徑下(例如 /iscsi/iqn.../tpg1/acls/iqn.../),然後:

...> get auth

這將顯示當前的認證憑據。

...> set auth userid=<username in target>
...> set auth password=<password in target>
...> set auth mutual_userid=<username in initiator>  (optional)
...> set auth mutual_password=<password in initiator>  (optional)

前兩個欄位是目標的用戶名和密碼,發起方會使用該信息登錄到目標。後兩個欄位(以「mutual_」開頭)是發起方的用戶名和密碼(注意,所有發起方都使用同一個用戶名和密碼)。這兩個是可選參數,用於確保發起方僅接受已授權的目標的連接。

小技巧

  • 可以使用 targetcli sessions 查看當前開啟的會話。

參考