alpine搭建iscsi并挂载到windows
想玩玩war thunder,但是主机硬盘空间不足哩大悲~
下了81GB的完整客户端到samba上后发现,BattlEye直接显示路径不存在,
其中原因也比较简单,BattlEye作为一种游戏防作弊引擎,会尝试对整个机器进行扫描,
其中包括可疑硬件外设(防DMA硬件直接修改内存)、以及所有硬盘,这些操作很大一部分要求程序以管理员权限运行。
而Windows官方的samba支持为了安全考虑,禁止其它用户访问到当前用户挂载的samba硬盘,就算是管理员也不行。
微软提供的解决方案是以特殊的管理员身份去挂载samba,但这样一来反而会出现新的问题,我正常的用户又访问不到samba挂载的硬盘了。
经过n番折腾终于还是放弃samba协议了QAQ。
还好互联网冲浪比较早又比较频繁,知道一个早期协议能解决这扩展游戏盘的需求。
iSCSI协议
iSCSI协议挂载的硬盘能在Windows上被识别为本地原生磁盘,这种协议比较特殊,IETF组织在早期设立的网络储存标准之一。
它依赖IP进行寻址,客户端叫做Initiator,服务端叫做Target。
优点很明显:
- 原生挂载,不会被识别成网络硬盘而是本地插入的硬盘
- 读写上限很高,前提你设置得当,待会会提到设置问题
- 兼容性极好,作为早期最有名的网络存储协议,Windows、Linux肯定没问题,甚至很多Unix-Like都有支持。
但缺点同样明显:
- 不支持多机器同时读写/多target支持也会必定导致读写速度大幅下降
- Windows在部分重启的情况下难以自行重连,必须手动断开再刷新连接
- 其中大量配置术语会涉及储存专业领域,晦涩难懂(本来就是给中小型企业提供通用服务的协议)
刚好我正在折腾一台带PVE的服务器,PVE官方alpine linux的CT模板又刚好只需要3.32MB,又小又轻便,docker是整不了,用来做iSCSI服务器就是再合适不过了。
iSCSI协议在alpine linux的基础配置
配置好一台基础的alpine linux LXC容器,保证容器能正常与其它机器通信,随后先安装好targetcli软件包,终端输入每行后回车:
apk update
apk add targetcli
rc-update add targetcli
service targetcli start接下来从终端进入到targetcli软件自己的shell里,终端输入后回车:
targetcli看到提示信息与最后的待输入框
/>即意味着进入到targetcli shell里,其中不同于linux原生shell,仅部分指令可用。ls查看目录会扩展为正常shell下tree命令一样的树状文件目录结构列出。
接下来有三种方式,一个我们看到能直接用于读存文件的磁盘,对于用户来说可以抽象为这四部分:
物理磁盘硬件 <- 磁盘厂家主控 <- 分区表(MBR/GPT)<- 文件系统(NTFS/FAT32/exFAT/ext4/xfs/btrfs)
还有一部分是一般人基本不会在意的分区标识说明,有些系统会对这些标识说明作特殊处理。
而在iSCSI协议下设置时磁盘就在符合上面后两抽象层的前提下,允许将前面物理硬件和主控的部分进行替换,分为三种方案:
- 整块物理磁盘(无分区表/无文件系统)
- 单个磁盘分区
- 单个文件
这三种方案从上往下,性能从物理磁盘限制上限依次变差。
这里用第三种方式单个文件做演示:
/> cd backstores/
/backstores> cd fileio
/backstores/fileio> create disk01 /tmp/disk01.img 10G最后的/tmp/disk01.img可以是任意磁盘文件,下面创建iSCSI target:
/backstores/fileio> cd ../..
/> iscsi/ create接下来会输出创建的iSCSI target信息:
Created target iqn.2003-01.org.linux-iscsi.alpine-hp-01.x8664:sn.159f1aa77319.
Created TPG 1.
Global pref auto_add_default_portal=true
Created default portal listening on all IPs (0.0.0.0), port 3260.这里会以iqn.2003-01.org.linux-iscsi.alpine-hp-01.x8664:sn.159f1aa77319原教程的WWN地址做演示。
如果有ipv6,执行:
/> iscsi/iqn.2003-01.org.linux-iscsi.alpine-hp-01.x8664:sn.159f1aa77319/tpg1/portals/ create ::0 3260下面创建LUN:
/> iscsi/iqn.2003-01.org.linux-iscsi.alpine-hp-01.x8664:sn.159f1aa77319/tpg1/luns create /backstores/fileio/disk01
/> iscsi/iqn.2003-01.org.linux-iscsi.alpine-hp-01.x8664:sn.159f1aa77319/tpg1/acls create wwn=iqn.2005-03.org.open-iscsi:a3beddeaf977最后添加ACL访问控制,下面iqn.2005-03.org.open-iscsi:a3beddeaf977的部分需要替换为自己要连接Initiator的机器WWN:
/> iscsi/iqn.2003-01.org.linux-iscsi.alpine-hp-01.x8664:sn.159f1aa77319/tpg1/acls create wwn=iqn.2005-03.org.open-iscsi:a3beddeaf977服务端就配置好了,Windows可以自行从“iSCSI发起程序”应用直接连接。
参考原文链接:
John Siu 博客 | Alpine iSCSI 目标
Linux iSCSI Target (TCM) - Alpine Linux
IP网络存储iSCSI的概念与工作原理 - 星火撩原 - 博客园
iSCSI 存储网络完整指南 | 谢先斌的博客
iSCSI存储协议详解 - LeeHang - 博客园
ISCSI/LIO - ArchWiki
iSCSI - 維基百科,自由的百科全書
标签:life, programing