iSCSI是一个基于网络映射存储设备的技术方案。利用iSCSI可以很方便的通过网络映射远程驱动器,且能实现较为底层的操作。本文服务端和客户端均使用Debian10系统。

iSCSI正常工作需要使用服务端上的860和3260端口,在公网上使用时需要注意做好安全性设置。本文仅在局域网运行,该局域网可以是实际的局域网,也可以是使用tinc、zerotier等构建的虚拟局域网(虚拟局域网使用时,如果服务端具有公网IP,同样需要注意安全性配置问题)。
以下操作均在Debian10上进行,且需要root权限。服务端IP为10.20.20.1,客户端IP为10.20.20.2。

服务端配置

首先安装服务端(target),使用apt安装tgt即可。

apt-get update
apt-get install tgt

被映射的设备可以是一个文件(raw格式,需要提前分配所有空间。如果希望随存储容量增加,可以使用qcow2格式,挂载后以硬盘或分区的方式提供),或一个硬盘设备,也可以是一个分区或分卷。
此处假设是一个分卷设备,分卷路径为/dev/mapper/vg_iscsi-lv_iscsi1,则cd到/etc/tgt/conf.d中,新建一个配置文件,文件名以conf为后缀即可(/etc/tgt/targets.conf中默认包括了include /etc/tgt/conf.d/*.conf)。

<target iqn.2021-06.top.ayahuasec:iscsi1>
    backing-store /dev/mapper/vg_iscsi-lv_iscsi1
    initiator-address 10.20.20.2
</target>

其中,target后跟一个唯一路径,便于客户端区分,通常为iqn.[YYYY-MM].[reversed_domain_name]:[device_name]的形式。backing-store为被映射的设备路径。initiator-address为接受的客户端IP(可以不指定,则任何IP均可连接)。配置文件中可以设置用户名和密码,此处不进行该设置。
之后重启tgt服务即可。

service tgt restart

客户端配置

首先安装客户端管理工具,使用apt安装open-iscsi即可。

apt-get update 
apt-get install open-iscsi 

之后尝试与target连接,并获取服务端上的设备信息。其中10.20.20.1为服务端IP。

iscsiadm -m discovery -t st -p 10.20.20.1

运行成功后,服务端信息将会被保存在本地,可以通过iscsiadm查看:

iscsiadm -m node

上述命令指定--login参数后就会登录上一步扫描到的所有设备。

iscsiadm -m node --login 

如果有多个target,可以登录特定的target,指定在服务端配置中填写的路径即可。

iscsiadm -m node -T iqn.2021-06.top.ayahuasec:iscsi1 -p 10.20.20.1:3260 --login

运行成功后,通过iscsiadm -m session命令可以查看目前所有登录的设备,同时目标硬盘就会映射为一个本地的硬盘设备,通过fdisk -l可以查看本地所有设备,其中iSCSI远程设备会显示Disk model: VIRTUAL-DISK。之后就可以像一个本地硬盘一样对它进行操作。
如果需要让登录过的设备在下次重启后能够自动重新登录,则修改/etc/iscsi/iscsid.conf中的node.startup = manual项,将其修改为auto即可。
值得注意的是,与其他本地设备一样,Linux上对iSCSI远程设备已默认利用剩余内存空闲启用了buffer和cache,本身无需进行调整已可获得较好的性能。
对于内存较小、硬盘较大的客户端,可以通过bcache进一步提高性能。可参考使用tinc、NFS、qemu-nbd、bcache搭建的一套Linux上的远程硬盘方案进行搭建。由于公网上网络设备会明显慢于本地设备,可以关闭sequential_cutoff以要求所有数据均尽可能缓存在本地。
如果需要断开iSCSI设备,可以通过以下命令断开所有已连接的target:

iscsiadm -m node -U all

也可以指定断开某个target:

iscsiadm -m node -T iqn.2021-06.top.ayahuasec:iscsi1 -p 10.20.20.1:3260 --logout

注意,在断开之前,需尽可能确保数据已经传输完毕,即先umount被挂载的设备,并通过sync命令将内存中的数据同步到硬盘,然后再断开iSCSI设备。

标签: Linux, Debian

添加新评论