iSCSI相当于把服务端上的磁盘挂载到客户端上,并且能够被客户端识别为本地磁盘来使用。

图中的D盘就是其他主机上的硬盘。

服务端配置

提供磁盘空间的设备。我这里是ubuntu系统。

安装tgt服务

sudo apt update
sudo apt install tgt

修改tgt配置:

vim /etc/tgt/conf.d/iscsi.conf

按照需求进行添加:

<target iqn.2024-01.example.com:lun1>
     backing-store /dev/sdb #这里是提供给其它设备的磁盘或者分区,注意,这里要求这个空间没有被使用,并且也没用被系统挂载
     initiator-address 192.168.1.20 #设置只允许这个IP进行连接
     incominguser user password #设置单向验证的用户名与密码,即对方连接时需要输入的用户名和密码
     outgoinguser target secretpass #这是 iSCSI 目标(Target)在向客户端发起连接时使用的身份验证信息
</target>

使用fdisk -l 可以查看当前主机磁盘。注意,必须是未被使用的。

如果没有未被使用的分区,可以参考下面的将普通文件作为存储设备

内网使用时下面的两个身份验证其实都不用设置。

设置好之后重启tgt服务

sudo systemctl restart tgt

客户端配置

注意,这里需要windows专业版的系统。

搜索iSCSI发起程序,打开

输入服务端的IP地址,点击快速连接

如果没有设置验证用户名密码则直接点击连接即可

如果设置了,则需要打开高级,设置用户名与密码

连接成功后,打开磁盘管理

就可以看到一块新的磁盘

然后右击点击新的磁盘进行初始化,分区即可。

我这里已经分好区了。

常见问题

iSCSI显示已连接,但是磁盘管理中却没有新的磁盘

说明这块磁盘被占用了,看看是不是被linux系统挂载了,如果是则需要取消挂载。

sudo umount /dev/目标磁盘

将普通文件作为存储设备

如果没有空闲的分区,可以使用dd创建普通文件,然后将普通文件作为存储设备。

sudo dd if=/dev/zero of=/path/to/iscsi_image bs=1G count=300

这个命令会创建一个300G的普通文件。

更改配置文件的/dev/sdb/path/to/iscsi_image

<target iqn.2024-01.example.com:lun1>
     backing-store /path/to/iscsi_image #这里是提供给其它设备的磁盘或者分区,注意,这里要求这个空间没有被使用,并且也没用被系统挂载
     initiator-address 192.168.1.20 #设置只允许这个IP进行连接
     incominguser user password #设置单向验证的用户名与密码,即对方连接时需要输入的用户名和密码
     outgoinguser target secretpass #这是 iSCSI 目标(Target)在向客户端发起连接时使用的身份验证信息
</target>