對於儲存空間不足除了本體主機加裝硬碟之外,也可以透過像是網路芳鄰(CIFS)或是網路磁碟機(NFS)將檔案或資料儲存到其他設備上,不過有些軟體會要求需要一整顆硬碟才能使用,此時就需要 iSCSI 的幫助了。
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
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
2
3
|
[root@serverb ~]# mkfs.xfs /dev/sda1
meta-data=/dev/sda1 isize=512 agcount=4, agsize=3276736 blks
...output omitted...
|
- 創建掛載目錄
1
|
[root@serverb ~]# mkdir -p /shares
|
- 設定 /etc/fstab 開機自動掛載
1
2
3
|
[root@serverb ~]# cat >> /etc/fstab << EOF
> /dev/sda1 /shares xfs defaults,_netdev 0 0
> EOF
|
Warning
囿於是網路設備,請務必加上 _netdev ,確保網路已經透過systemd帶起來後才去掛載該設備,否則開機時將會失敗進入緊急模式。
- 將所有設備掛載上去並檢查
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 後執行下列步驟
- 登出 target
- 刪除自動登入資料
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 持續使用,如要回收再利用記得清除其內容。