P2_iSCSI配置之Docker一键部署
[!NOTE]
书接上回 [P1]-iSCSI 部署-将NAS空间变为本地磁盘,并拥有与实体硬盘所有常用功能 ,在本地宿主机部署了iSCSI服务,但是配置过程过于繁琐,且对生产环境来讲有比较大的风险,这一次我们使用docker容器来部署,减轻工作量.部分教程参考自Docker实战-ISCSI_docker iscsi-优快云博客
1.环境准备
1.1安装docker
- 更新系统软件包
首先,确保你的系统软件包是最新的。打开终端并运行以下命令:
sudo yum update -y
- 设置 Docker 的仓库
在安装新版本的 Docker 之前,需要设置 Docker 的官方稳定仓库。
# 安装一些必要的包,使得 yum 可以使用基于 HTTPS 的仓库
sudo yum install -y yum-utils
# 设置 Docker 的稳定版仓库
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
- 安装 Docker 引擎
现在你可以从设置好的稳定仓库中安装最新版本的 Docker 引擎了:
sudo yum install docker-ce docker-ce-cli containerd.io
如果有多个 Docker 版本可用,你也可以通过指定确切的版本号来安装特定版本的 Docker:
# 列出可用的 Docker 版本
yum list docker-ce --showduplicates | sort -r
# 使用版本号替换 <VERSION_STRING> 来安装特定版本
sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
- 配置Docker 使用加速器镜像源
mkdir /etc/docker/
vim /etc/docker/daemon.json
添加镜像加速地址,注意镜像加速地址可能会失效,测试地址有效后再配置
{
"registry-mirrors": [
"https://docker.xuanyuan.me"
]
}
重新加载docker服务
sudo systemctl daemon-reload
sudo systemctl restart docker
- 启动 Docker 并设置开机自启
安装完成后,启动 Docker,并将其配置为随系统启动。
sudo systemctl start docker
sudo systemctl enable docker
- 确认Docker组件已经启动:
ps aux | grep docker
2.部署iSCSI docker服务端
- 下载iSCSI Docker镜像:
docker pull wtnb75/stgt
- 运行iSCSI容器: 下面的命令将启动一个名为
stgt
的容器,该容器会作为iSCSI服务端运行,并映射端口3260以允许客户端连接。
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
- 创建Target:
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
命令创建一个:
#使用dd命令创建
dd if=/dev/zero of=/vol2/1000/iscsi_img/storage.img bs=1M count=1024 # 创建一个1GB大小的镜像文件,记得使用自己的路径
#或者使用truncate 命令,truncate 命令不会立即分配实际的磁盘空间,而是通过稀疏文件的方式标记文件大小,这意味着文件的实际占用空间会随着数据写入而逐渐增加
truncate -s 2G /vol2/1000/iscsi_img/storage.img
#创建LUN
docker exec stgt tgtadm --mode logicalunit --op new --tid 1 --lun 1 --backing-store /vol2/1000/iscsi_img/storage.img
[!NOTE]
可以后期增加
.img
文件的大小,详情请见文章末尾
方式二: 使用硬盘分区创建,分区为/dev/adb1
,请根据实际情况调整
# 注意ISCSI通过提供块设备(例如硬盘或分区)的方式进行工作,不能直接共享一个文件系统目录
docker exec stgt tgtadm --mode logicalunit --op new --tid 1 --lun 1 --backing-store /dev/sdb1
- 授权: 允许特定网段内的客户端访问iSCSI Target。
docker exec stgt tgtadm --mode target --op bind --tid 1 --initiator-address 192.168.0.105 #(客户端IP)
- 查看已定义的信息:
docker exec stgt tgtadm --mode target --op show
- 输出如下:
[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
- 开放防火墙3260端口
确保服务器上的防火墙允许iSCSI通信,默认情况下,iSCSI使用3260端口。可以暂时关闭防火墙
#在CentOS/RHEL系统上:
systemctl stop firewalld
或者,只开放特定端口:
firewall-cmd --zone=public --add-port=3260/tcp --permanent
firewall-cmd --reload
3. 在客户端(如 Windows 11)挂载 iSCSI Target
-
在 Windows 中使用 iSCSI Initiator 连接到服务器上的 iSCSI Target。#具体参考csdn文章
-
初始化并格式化磁盘(如果新添加)。
-
验证连接:确保可以读写数据到新挂载的卷。
4.服务端查看通过iSCSI挂载到Windows 的磁盘上放入的文件
参考 P1_部署一个iSCSI服务端,将NAS空间挂载成真正的电脑硬盘 - DUTYC博客 第5章节
5.后期调整.img文件的大小
[!IMPORTANT]
最好在一个非生产环境中测试整个过程,以避免意外的数据丢失或其他问题。
步骤 1: 增加 .img
文件的大小
首先,增加 .img
文件的物理大小。假设想将其扩展到 50GB:
truncate -s 50G /vol2/1000/iscsi_img/storage.img
或使用 dd
(实际分配空间):
dd if=/dev/zero bs=1M count=0 seek=50G of=/vol2/1000/iscsi_img/storage.img
加载 .img
文件为循环设备
接下来,将 .img
文件加载为一个循环设备:
losetup -f --show /vol2/1000/iscsi_img/storage.img
这将返回一个循环设备名称,例如 /dev/loop0
。
调整 NTFS 分区大小
由于 .img
文件包含的是 NTFS 文件系统,我们需要使用 ntfsresize
来调整文件系统的大小。在此之前,请确保安装了 ntfs-3g
工具包,它包含了 ntfsresize
:
yum install ntfs-3g -y
检查文件系统的一致性
在调整大小之前,建议先检查文件系统的完整性:
ntfsfix /dev/loop0
虽然 ntfsfix
主要用于修复NTFS文件系统中的错误,但在某些情况下,它也能帮助确保文件系统处于良好的状态以便进行调整。
调整文件系统大小
现在可以使用 ntfsresize
来调整文件系统的大小。请注意,ntfsresize
不会自动调整分区表,因此我们只需关注文件系统本身:
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