iSCSI的配置笔记

自打离开前公司,已经好久没有折腾过iSCSI了,毕竟家里没有光纤到桌面,无线太慢也不稳定,不合适用这货。

最近因为想玩一下Tensoflow,但是家里的服务器跑的是FreeBSD,而TF并没有提供FreeBSD的版本。我试图自己编译一个FreeBSD版本,但可耻滴失败了,只好装一个虚拟机来跑Linux。

家里也不是没有Linux,但是一台Cubieboard2跑的是ARM版的Linux,TF也不支持,另外一台跑Linux桌面的笔记本又不常开。只能用虚拟机凑和了,反正只是用来远程在jupyter里学习TF的用法,真要跑什么计算还是得开那台笔记本来算——虽然这个性能也一般。

当然也有想过再配一台高性能的机器,但是现在内存太贵了……哭,只能先缓缓,等真有需要时再配吧。

为了让这个虚拟机更灵活地使用硬盘空间,只给了它划了一个小的系统盘,把大部分数据内容还是放在FreeBSD服务器里。但如何连接二者是个问题。

本来是想用NFS的,但是研究了一番感觉不太方便,SAMBA就更不用说了,想来想去还是得用起ZFS+iSCSI这个大杀器。

服务端的配置很简单,不多说,参考我之前的文章《用FreeBSD10搭建基于ZFS的iSCSI服务》。

客户端的安装如下:

(说明:我原本是在虚拟机装的Alpine Linux,所以下面以它为例,但后来发现TF也不支持Alpine,因为它需要glibc,不兼容Alpine的musl,只好重装成Ubuntu Server 16.04 LTS了,没有本质的区别,无非是把apk add命令换成apt install命令而已)

apk add open-iscsi
service iscsid start
iscsiadm -m discovery -t st -p 192.168.x.x

其中 192.168.x.x 为 iSCSI target (这里即FreeBSD服务器)的地址。正常应该显示target的信息,如果发生什么什么 not found 的错误,则需要看一下这个配置:

/etc/iscsi/initiatorname.iscsi

里面是一个例子target,为你实际的target或者注释掉即可解决

然后就可以操作target了:

# 连接target
iscsiadm -m node -T iqn.2017-10.com.yours:target0 -p 192.168.x.x -l
# 断开连接
iscsiadm -m node -T iqn.2017-10.com.yours:target0 -p 192.168.x.x -u
# 显示已经连接的targets
iscsiadm -m -node
# 删除连接过的target
iscsiadm -m node -o delete -T iqn.2017-10.com.yours:target0 -p 192.168.x.x
# 设置target为自动连接(不过建议还是按前文所说修改配置文件更可靠)
iscsiadm -m node -T iqn.2017-10.com.yours:target0 -p 192.168.x.x --op update -n node.startup -v automatic

连接上target以后就可以把它当一个新的磁盘来使用了。注意,是一个磁盘,不是一个分区更不是一个目录,所以首先就是需要创建分区并格式化:

# 创建分区
fdisk /dev/sdx
# 格式化分区为ext4
mkfs.ext4 /dev/sdx1
# 取得分区的UUID
blkid /dev/sdx1
# 修改/etc/fstab自动mount
UUID=uuid /var/local/vdisk      ext4    _netdev,errors=remount-ro 0 0

手动或自动mount以后即可使用这个新盘了。

如果如前文所说,将taget配置在ZFS中的话,这个盘还可以享受所有ZFS功能。

推送到[go4pro.org]