P2_iSCSI配置之Docker一键部署

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值