P2_iSCSI配置之Docker一键部署
[!NOTE]
书接上回 P1_部署一个iSCSI服务端,将NAS空间挂载成真正的电脑硬盘 - DUTYC博客 ,在本地宿主机部署了iSCSI服务,但是配置过程过于繁琐,且对生产环境来讲有比较大的风险,这一次我们使用docker容器来部署,减轻工作量.部分教程参考自Docker实战-ISCSI_docker iscsi-CSDN博客
1.环境准备
1.1安装docker
首先,确保你的系统软件包是最新的。打开终端并运行以下命令:
在安装新版本的 Docker 之前,需要设置 Docker 的官方稳定仓库。
1 2 3 4 5 6 7
| sudo yum install -y yum-utils
sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo
|
现在你可以从设置好的稳定仓库中安装最新版本的 Docker 引擎了:
1
| sudo yum install docker-ce docker-ce-cli containerd.io
|
如果有多个 Docker 版本可用,你也可以通过指定确切的版本号来安装特定版本的 Docker:
1 2 3 4 5
| yum list docker-ce --showduplicates | sort -r
sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
|
1 2
| mkdir /etc/docker/ vim /etc/docker/daemon.json
|
添加镜像加速地址,注意镜像加速地址可能会失效,测试地址有效后再配置
1 2 3 4 5
| { "registry-mirrors": [ "https://docker.xuanyuan.me" ] }
|
重新加载docker服务
1 2
| sudo systemctl daemon-reload sudo systemctl restart docker
|
安装完成后,启动 Docker,并将其配置为随系统启动。
1 2
| sudo systemctl start docker sudo systemctl enable docker
|
2.部署iSCSI docker服务端
- 运行iSCSI容器: 下面的命令将启动一个名为
stgt
的容器,该容器会作为iSCSI服务端运行,并映射端口3260以允许客户端连接。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| docker run \ --restart unless-stopped --detach \ --name stgt \ --restart unless-stopped \ --net host \ --privileged \ --volume /etc/target:/etc/target \ --volume /run/lvm:/run/lvm \ --volume /lib/modules:/lib/modules \ --volume /sys/kernel/config:/sys/kernel/config \ --volume /dev:/dev \ --volume /vol2/1000/iscsi_img:/vol2/1000/iscsi_img(使用自己的img镜像所在的文件目录,并非.img文件的路径) \ wtnb75/stgt
|
1
| docker exec stgt tgtadm --mode target --op new --tid 1 --targetname iqn.2025-02.com.comsys:iscsi.fcdisk(名字自己定)
|
- 创建LUN(这里假设你有一个硬盘镜像文件
/vol2/1000/iscsi_img/storage.img
,或者一个硬盘分区):
方式一: 使用.img硬盘镜像文件创建,如果没有现成的镜像文件,可以先通过dd
或者truncate
命令创建一个:
1 2 3 4
| dd if=/dev/zero of=/vol2/1000/iscsi_img/storage.img bs=1M count=1024
truncate -s 2G /vol2/1000/iscsi_img/storage.img
|
1 2
| docker exec stgt tgtadm --mode logicalunit --op new --tid 1 --lun 1 --backing-store /vol2/1000/iscsi_img/storage.img
|
[!NOTE]
可以后期增加 .img
文件的大小,详情请见文章末尾
方式二: 使用硬盘分区创建,分区为/dev/adb1
,请根据实际情况调整
1 2
| docker exec stgt tgtadm --mode logicalunit --op new --tid 1 --lun 1 --backing-store /dev/sdb1
|
- 授权: 允许特定网段内的客户端访问iSCSI Target。
1
| docker exec stgt tgtadm --mode target --op bind --tid 1 --initiator-address 192.168.0.105
|
1
| docker exec stgt tgtadm --mode target --op show
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| [root@learn 1000]# docker exec stgt tgtadm --mode target --op show Target 1: iqn.2017-04.com.comsys:iscsi.fcdisk System information: Driver: iscsi State: ready I_T nexus information: LUN information: LUN: 0 Type: controller SCSI ID: IET 00010000 SCSI SN: beaf10 Size: 0 MB, Block size: 1 Online: Yes Removable media: No Prevent removal: No Readonly: No SWP: No Thin-provisioning: No Backing store type: null Backing store path: None Backing store flags: LUN: 1 Type: disk SCSI ID: IET 00010001 SCSI SN: beaf11 Size: 2147 MB, Block size: 512 Online: Yes Removable media: No Prevent removal: No Readonly: No SWP: No Thin-provisioning: No Backing store type: rdwr Backing store path: /vol2/1000/iscsi_img/storage.img Backing store flags: Account information: ACL information: 192.168.0.105
|
确保服务器上的防火墙允许iSCSI通信,默认情况下,iSCSI使用3260端口。可以暂时关闭防火墙
1 2
| systemctl stop firewalld
|
或者,只开放特定端口:
1 2
| firewall-cmd --zone=public --add-port=3260/tcp --permanent firewall-cmd --reload
|
3. 在客户端(如 Windows 11)挂载 iSCSI Target
4.服务端查看通过iSCSI挂载到Windows 的磁盘上放入的文件
参考 P1_部署一个iSCSI服务端,将NAS空间挂载成真正的电脑硬盘 - DUTYC博客 第5章节
5.后期调整.img文件的大小
[!IMPORTANT]
最好在一个非生产环境中测试整个过程,以避免意外的数据丢失或其他问题。
步骤 1: 增加 .img
文件的大小
首先,增加 .img
文件的物理大小。假设想将其扩展到 50GB:
1
| truncate -s 50G /vol2/1000/iscsi_img/storage.img
|
或使用 dd
(实际分配空间):
1
| dd if=/dev/zero bs=1M count=0 seek=50G of=/vol2/1000/iscsi_img/storage.img
|
加载 .img
文件为循环设备
接下来,将 .img
文件加载为一个循环设备:
1
| losetup -f --show /vol2/1000/iscsi_img/storage.img
|
这将返回一个循环设备名称,例如 /dev/loop0
。
调整 NTFS 分区大小
由于 .img
文件包含的是 NTFS 文件系统,我们需要使用 ntfsresize
来调整文件系统的大小。在此之前,请确保安装了 ntfs-3g
工具包,它包含了 ntfsresize
:
检查文件系统的一致性
在调整大小之前,建议先检查文件系统的完整性:
虽然 ntfsfix
主要用于修复NTFS文件系统中的错误,但在某些情况下,它也能帮助确保文件系统处于良好的状态以便进行调整。
调整文件系统大小
现在可以使用 ntfsresize
来调整文件系统的大小。请注意,ntfsresize
不会自动调整分区表,因此我们只需关注文件系统本身:
1 2
| ntfsresize -i /dev/loop0 ntfsresize --force /dev/loop0
|
注意:ntfsresize
在执行操作前会进行一次模拟运行并询问是否继续,使用 --force
参数可以直接执行调整,但请谨慎使用。
更新 iSCSI Target 配置
理论上,在扩展 .img
文件和调整文件系统大小后,iSCSI Target 应该已经能够识别新的容量。但是,为了确保客户端能看到全部可用空间,可能需要在客户端上重新扫描或重新连接 iSCSI Target。
6.总结
[!NOTE]
以上步骤详细描述了如何在 Linux (NAS)上安装docker部署 iSCSI Target。每个环境可能有其特定的需求或限制,请根据实际情况调整上述步骤; 如果有任何问题或需要进一步的帮助,请询问我们
邮箱:dutyc.studio@qq.com 作者Github : Persistence