Linux iSCSI 設定及存取使用

  1. 先檢查套件資訊,在 iSCSI Server 這台上要安裝的套件是 targetcli 這個套件,若是沒有裝或在 repository 中沒有的話記得 yum update 一下.

Server 端

查詢套件 targetcli

[code lang=”bash”]# yum info targetcli[/code]

yum_info_targetcli

安裝套件 targetcli 及啟動服務

[code lang=”bash”] # yum -y install targetcli [/code]

 

yum_install_targetcli

[code lang=”bash”] # systemctl enable target.service
# systemctl start target.service[/code]

systemctl_enable_start_target

列出目前可用的 block storage, 當然若是不想用 block storage 做為 iSCSI 的磁碟,當然也可以用其它幾種

[code lang=”bash”] # lsblk[/code]
list_blkstorage

可透過查詢 man targetcli 在 BACKSTORES 章節中有說明,目前支援 FILEIO、BLOCK、PSCSI 及 RAMDISK 4 種,以下說明示範使用 BLOCK及 FILEIO 。

targetcli_support_backstores

執行 targetcli 交談式介面進行設定

[code lang=”bash”] # targetcli[/code]
targetcli_interactive

[code lang=”bash”]
/> backstores/block create name=my_iscsi1 dev=/dev/sdb
/> backstores/fileio create name=my_iscsi2 file_or_dev=/iscsi_fileio.dsk size=10G
/> iscsi/ create wwn=iqn.2017-07.example.com:iscsi1
/> iscsi/iqn.2017-07.example.com:iscsi1/tpg1/acls create wwn=iqn.2017-07.example.com:desktop1
/> iscsi/iqn.2017-07.example.com:iscsi1/tpg1/luns create lun=0 storage_object=/backstores/block/my_iscsi1
/> iscsi/iqn.2017-07.example.com:iscsi1/tpg1/luns create lun=1 storage_object=/backstores/fileio/my_iscsi2
[/code]

targetcli_interactive_create

exit 跳出交談式介面後會自動將設定檔存在 /etc/target/saveconfig.json 以便下次再進入時會自動讀取,若是要完整清除此設定,可以執行

[code lang=”bash”] # targetcli clearconfig confirm=True [/code]

還有一個要注意的是要確定在 Server 端的 TCP 3260 (iscsi port)在防火牆上有允許開啟,如果用 firewalld 則可以用下列指令開啟

[code lang=”bash”] # firewall-cmd –add-ports=3260/tcp –permanent [/code]

用 iptables/NetFilter 則用這個指令去開啟

[code lang=”bash”] # iptables -t filter -A INPUT -p tcp –dport 3260 -j ACCEPT [/code]

確認一下防火牆有開啟
iptables_iscsi_server_enable

Client 端

安裝套件 iscsi-initiator-utils

[code lang=”bash”] # yum -y install iscsi-initiator-utils [/code]

修改 initiatorname 及啟動服務 iscsid

記錄下你在 iSCSI Server 中 ACL 的設定,在這個範例中我是用 iqn.2017-07.example.com:desktop1 , 將這個值填入 /etc/iscsi/initiatorname.iscsi 中,指令及畫面如下:

[code lang=”bash”] # vi /etc/iscsi/initiatorname.iscsi[/code]
client_iscsi_initiatorname

[code lang=”bash”] # systemctl enable iscsid
# systemctl start iscsid[/code]

如果到這都沒有問題,理論上 iscsid 應該可以透過下面指令去 discovery 及 login iSCSI 去取得 iSCSI server 分享出的 block storage, 其中 -T 參數要帶的是你在 iSCSI Server 中分享出的 iSCSI Target 的 WWN,用 -l 去登入,登入成功後可以用 lsblk 去看到目前就多了 iscsi 掛載上來的二個 block storage.

[code lang=”bash”] # iscsiadm -m discovery -t sendtargets -p 192.168.161.160:3260
# iscsiadm -m node -T iqn.2017-07.example.com:iscsi1 -p 192.168.161.160:3260 -l[/code]
iscsi_client_discovery_and_connected

立刻進行 make file system 後查詢 UUID,這邊我們會將 UUID 寫到 /etc/fstab 中讓系統在重開機時也會一併掛載上來.

[code lang=”bash”] # mkfs.xfs /dev/sdb
# mkfs.xfs /dev/sdc
# blkid[/code]

client_block_storage_mkfs_blkid_query

修改 /etc/fstab 改好存檔後先用 mount -a 測試一下,記得因為 iscsid 在開機過程中可能網路還未啟動,為了避免開機過程中掛載失敗而卡住,記得在第4個欄位中加上 _netdev 參數宣告這個是網路掛載的硬碟,待開機程序完成後再掛載,還有記得你要掛載的目的地也要存在(/mnt/iscsi1 & /mnt/iscsi2).

client_iscsi_fstab

client_mounta_test_mount

如果都可以掛載成功就大功告成,試試 Desktop 重開機,確定重開機後也有成功掛載

補充

  • 將 iSCSI Server 的 target 設定備份存檔

[code lang=”bash”] # targetcli saveconfig test.config [/code]

iscsi_server_save_config

  • 要還原 iSCSI 設定時只要下下面這個指令即可清除原有設定並讀進備份的設定檔, 讀取後記得重啟 target.service

[code lang=”bash”]# targetcli restoreconfig test.config clear_existing=True[/code]

在 Client 中若是 iSCSI 設定已保留下來但和實際上不一致,記得將 iscsi 及 iscsid 服務停掉後 將 /var/lib/iscsi 下的檔案都刪掉後,啟動 iscsi 及 iscsid 服務後再進行一次 discovery 及 connect 的動作.

[code lang=”bash”] # systemctl stop iscsi
# systemctl stop iscsid
# rm -rf /var/lib/iscsi/*
# systemctl start iscsi
# systemctl start iscsid
# iscsiadm -m discovery -t sendtargets -p 192.168.161.160:3260
# iscsiadm -m node -T iqn.2017-07.example.com:iscsi1 -p 192.168.161.160:3260 -l[/code]

 

WWN/iqn 說明

targetcli 說明

Author: