使用Docker 开启ISCSI 功能参考教程
一、 引用教程:
感谢以上三位大佬的支持:
tgt项目地址:https://github.com/fujita/tgt
stgt项目地址:https://github.com/wtnb75/docker-stgt
老K修改后的项目地址:https://github.com/bilibili-koryking/iscsi-docker
二、 实际操作
第一步建立一个文件夹,用于存放ISCSI镜像文件,并获得原始地址,名字随你心意:
第二步拉取所需镜像: koryking/iscsi-docker
方法很多可以用镜像仓库,也可以用shh进行拉取
参考SHH拉取命令:docker pull koryking/iscsi-docker
第三步,建立iscsi磁盘存储
方案一:在iscsi文件夹内建立一个img的镜像文件(适用于适用img文件)
这步只能用命令行,建立命令:
sudo -i #然后会有输入密码
cd /vol1/1000/ISCSI #此处为你建立img镜像文件位置
qemu-img create -f raw virtual_disk.img 100G #这句话命令是建立一个名字叫virtual_disk的img文件 虚拟硬盘大小100G 可以根据你自己需求修改
方案二:使用整个硬盘做镜像:
物理挂载准备
1.检查磁盘状态
如上所说必须要是当前未使用状态的盘,因为初次挂载到pc会对其进行格式化,已使用的盘直接进行物理挂载会在重启NAS后app端显示存储池损毁。
PS:如果后面跟着操作的时候不小心挂载错了,不要重启,不要重启,不要重启,马上备份数据,还有得救。
2.**找到未使用状态盘的设备名称**
ssh中输入lsblk查看,下图sdb分了两个区,我们先找到他的大存储分区(看SIZE列的大小),比如这里就是sdb2,这个大分区没有创建子分区(看树结构有没有下层分区)且后面没有创建挂载点(看MOUNTPOINTS列有没有挂载路径),则sdb就是未被使用的硬盘设备,其他sda,nvme0n1的大分区都创建了一个或多个挂载点,这种就是已经创建了存储池的盘,至于nvme1n1(6800以上使用m2做系统盘的机型,名称可能会根据你插入m2的数量变化)或者mmcblk0(老绿联云,极空间,4800等使用emmc的机型)这种创建了p1,p2,p3,p4...的,这个是系统盘,千万,千万,千万不要动。
3.**磁盘分区**
我这里未使用的盘是sdb,则对应的设备路径就是/dev/sdb,执行fdisk /dev/sdb,各位小伙伴则用自己找到的盘名替换这里的sdb。
PS:如果准备整盘挂载,那就无需进行磁盘分区,直接记住/dev/sd(a,b,c...替换成你自己未使用盘的设备名)就行了。
fdisk /dev/sdb
因为sdb2已经占用了所有的空间,我们需要先将sdb2分区的空间释放出来,执行完fdisk /dev/sdb后,我们会进入fdisk工具中,先输入d(表示我们要删除分区),在输入2(表示删除第2个分区,也就是sdb2),再输入w(保存操作并推出fdisk工具,如果上面步骤有输入错了的,这里输入q,表示直接退出,不保存操作)。
执行lsblk看下,sdb下,只剩下一个分区了,这个分区是磁盘系统分区,可以按照上面的操作给删掉也可以不管他,反正15g也无所谓。
继续执行fdisk /dev/sdb,进入fdisk工具,先输入n(表示创建分区),再输入2(表示创建一个新的第2分区也就是sdb2,如果之前删掉了sdb1,则这里输入1),下面输入的32000000(表示这个分区的起始块序号,可以不输入直接回车或者使把提示的默认块序号复制粘贴进去),21251757055(表示结束的块序号,一个块512个字节大小,根据自己想要分区的空间大小,自己算下应该是多少),如果有红字提示什么签名,直接输入y确认。继续n创建分区,直到分完所有块,输入w保存并退出fdisk工具。
再次执行lsblk,可以看到已经多了两个分区了,将准备挂载的分区名称都记下(比如这里就是/dev/sdb2,/dev/sdb3),到这一步物理磁盘挂载准备就做完了,如果无需虚拟磁盘挂载则直接跳转到第4章节查看部署步骤,如果也需要虚拟磁盘挂载那就继续按顺序查看。
第四步,运行docker
可以考虑适用SHH输入以下命令:
docker create \
--net host \ #网络模式host,不然需要映射3260端口
--name iscsi-docker \ #镜像名字,按你喜欢的来
--restart unless-stopped \ #启动管理
--privileged \ # privileged管理模式
-v /run/lvm:/run/lvm \#映射管理文件路径
-v /lib/modules:/lib/modules \#映射管理文件路径
-v /sys/kernel/config:/sys/kernel/config \#影射管理文件路径
-v /dev:/dev \#映射磁盘给iscsi的用这句,不然删除
-v /vol1/1000/ISCSI:/virtual_disk \#映射img虚拟磁盘的用这句不然删除,前半句是宿主机文件路径:docker内文件路径
-e targetname=koryking11 \ #iscsi服务名字按你喜欢的该
-e lundev1=/dev/sda1 \#如果用磁盘的保留这句,多个磁盘多个命令行,每行改数字1.2.3.4…
-e lundev1=/virtual_disk/virtual_disk.img \#如果用虚拟盘 用这句 多个磁盘多个命令行,并要设多个磁盘img文件,改数字1.2.3.4…
-e ip_address=192.168.x.0/24 \#设置为你的IP网段
koryking/iscsi-docker:latest
第五步:到你需要iscsi的电脑上挂载磁盘并使用