Contents

Linux - 存取 iSCSI Target

對於儲存空間不足除了本體主機加裝硬碟之外,也可以透過像是網路芳鄰(CIFS)或是網路磁碟機(NFS)將檔案或資料儲存到其他設備上,不過有些軟體會要求需要一整顆硬碟才能使用,此時就需要 iSCSI 的幫助了。

練習環境
可以使用 HowHow 的創建 Lab 練習環境,來實作存取 iSCSI Target 操作,使用方式請參閱 HowHow 網站 - Linux 練習 Lab 第二版

1. iSCSI 簡述

iSCSI 是一種基於 TCP/IP 協議上並藉由網路發送 SCSI 指令,可以藉由網路方式將一整顆硬碟分享給 Client 端並作為儲存區域網路(SAN),對於客戶端來說看到的就一整顆完整的硬碟,而非是一般 NAS或是 CIFS 上分享的檔案目錄,在生產環境中 LAN 區域網路中使用 iSCSI 為避免網路頻寬上瓶頸,最好具備 10G 乙太網路,才能發揮最好的性能。


2. 如何創建 iSCSI Target

請參閱 HowHow - 提供 iSCSI 儲存 文章來創建。


3. 存取 iSCSI Target 步驟

1
2
3
4
使用 ServerB 為 Initiator Clinet 範例:
    1. IQN : iqn.2023-02.com.example:serverb
    2. 網路介面為 : 192.168.0.11
    3. 使用 /shares 為掛載點並且開機自動掛載

3.1. 安裝 iscsiadm 套件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
[root@serverb ~]# yum install iscsi-initiator-utils -y | grep Installed -B 5
Transaction Summary
================================================================================
Install  3 Packages

Total download size: 579 k
Installed size: 2.4 M
--
  Running scriptlet: iscsi-initiator-utils-6.2.1.4-4.git095f59c.el8.x86_6   3/3
  Verifying        : iscsi-initiator-utils-6.2.1.4-4.git095f59c.el8.x86_6   1/3
  Verifying        : iscsi-initiator-utils-iscsiuio-6.2.1.4-4.git095f59c.   2/3
  Verifying        : isns-utils-libs-0.99-1.el8.x86_64                      3/3
...output omitted...

3.2. 設定網路介面

可以使用 eth3 網路介面卡設定 IP,其步驟如下 :

關於如何使用 nmcli 操作方式可以參閱 HowHow 的網路管理工具 - NetworkManager 文章

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[root@serverb ~]# ip -4 a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    altname enp1s0
    inet 172.25.250.12/24 brd 172.25.250.255 scope global dynamic noprefixroute eth0
       valid_lft 399sec preferred_lft 399sec
[root@serverb ~]# nmcli con add con-name eth3 ipv4.method manual ipv4.addresses 192.168.0.11/24 autoconnect yes ifname eth3 type ethernet
Connection 'eth3' (f1186555-b6c9-449a-8bf6-262fce10d869) successfully added.
[root@serverb ~]# nmcli con up eth3
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/75)
[root@serverb ~]# ip -4 a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    altname enp1s0
    inet 172.25.250.12/24 brd 172.25.250.255 scope global dynamic noprefixroute eth0
       valid_lft 391sec preferred_lft 391sec
5: eth3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    altname enp13s0
    inet 192.168.0.11/24 brd 192.168.0.255 scope global noprefixroute eth3
       valid_lft forever preferred_lft forever

3.3. 設定 Initiator 的 IQN ,並檢視目前的所有設備

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
[root@serverb ~]# cat > /etc/iscsi/initiatorname.iscsi << EOF
  InitiatorName=iqn.2023-02.com.example:serverb
  EOF
  
[root@serverb ~]# lsblk
NAME           MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
vda            252:0    0   10G  0 disk
├─vda1         252:1    0  100M  0 part /boot/efi
├─vda2         252:2    0 1000M  0 part /boot
├─vda3         252:3    0  8.9G  0 part
│ └─rocky-root 253:0    0  8.9G  0 lvm  /
└─vda4         252:4    0    1M  0 part
vdb            252:16   0   50G  0 disk
vdc            252:32   0   50G  0 disk
vdd            252:48   0   50G  0 disk

3.4. 探索網路上的 Target

1
2
[root@serverb ~]# iscsiadm -m discovery -t st -p 192.168.0.10:3260
192.168.0.10:3260,1 iqn.2023-02.com.example:servera
NOTE
如果已經執行探索後發現 Client Initiator 的 IQN設定錯誤,需要編輯其 /etc/iscsi/initiatorname.iscsi 檔案,然後手動重新啟動 iscsid 服務。

3.5. 登入其網路上提供 Target ,並檢視目前的所有設備

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
[root@serverb ~]#  iscsiadm -m node -T iqn.2023-02.com.example:servera -l
Logging in to [iface: default, target: iqn.2023-02.com.example:servera, portal: 192.168.0.10,3260]
Login to [iface: default, target: iqn.2023-02.com.example:servera, portal: 192.168.0.10,3260] successful.

[root@serverb ~]# lsblk
NAME           MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda              8:0    0   50G  0 disk
vda            252:0    0   10G  0 disk
├─vda1         252:1    0  100M  0 part /boot/efi
├─vda2         252:2    0 1000M  0 part /boot
├─vda3         252:3    0  8.9G  0 part
│ └─rocky-root 253:0    0  8.9G  0 lvm  /
└─vda4         252:4    0    1M  0 part
vdb            252:16   0   50G  0 disk
vdc            252:32   0   50G  0 disk
vdd            252:48   0   50G  0 disk
Tip
將可以看到 /dev/sda 一整顆硬碟已經在上面。

4. 切割硬碟分區及掛載

  1. 切割硬碟分區
1
2
3
4
5
6
7
[root@serverb ~]# fdisk /dev/sda

Welcome to fdisk (util-linux 2.32.1).
...output omitted...
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
  1. 格式化
1
2
3
[root@serverb ~]# mkfs.xfs /dev/sda1
meta-data=/dev/sda1              isize=512    agcount=4, agsize=3276736 blks
...output omitted...
  1. 創建掛載目錄
1
[root@serverb ~]# mkdir -p /shares
  1. 設定 /etc/fstab 開機自動掛載
1
2
3
[root@serverb ~]# cat >> /etc/fstab << EOF
> /dev/sda1               /shares                 xfs     defaults,_netdev 0 0
> EOF
Warning
囿於是網路設備,請務必加上 _netdev ,確保網路已經透過systemd帶起來後才去掛載該設備,否則開機時將會失敗進入緊急模式。
  1. 將所有設備掛載上去並檢查
1
2
3
4
[root@serverb ~]# mount -a
[root@serverb ~]# df -h /shares
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1        50G  390M   50G   1% /shares

5. 取消掛載

當如果要取消其掛載,須 umount 後執行下列步驟

  1. 登出 target
  2. 刪除自動登入資料
1
2
3
4
[root@serverb ~]#  iscsiadm -m node -T iqn.2023-02.com.example:servera -u
Logging out of session [sid: 2, target: iqn.2023-02.com.example:servera, portal: 192.168.0.10,3260]
Logout of [sid: 2, target: iqn.2023-02.com.example:servera, portal: 192.168.0.10,3260] successful.
[root@serverb ~]#  iscsiadm -m node -T iqn.2023-02.com.example:servera -o delete

6. 小結

iscsiadm 套件可以幫助使用者容易的探索到期網路上所提供的 Target ,透過格式化掛載後,對於主機來說就是一顆真實的硬碟,不過 iSCSI 性質是 Read、Write One,一但一個人使用就要維持此 Target 持續使用,如要回收再利用記得清除其內容。



如果你還沒有註冊 Like Coin,你可以在文章最下方看到 Like 的按鈕,點下去後即可申請帳號,透過申請帳號後可以幫我的文章按下 Like,而 Like 最多可以點五次,而你不用付出任何一塊錢,就能給我寫這篇文章的最大的回饋!