Featured image of post iStoreOS 配置 iSCSI 存储及 Windows 客户端连接指南 🖥️

iStoreOS 配置 iSCSI 存储及 Windows 客户端连接指南 🖥️

iStoreOS 配置 iSCSI 存储及 Windows 客户端连接指南 🖥️ iSCSI 允许你在网络上共享块设ã

iStoreOS 配置 iSCSI 存储及 Windows 客户端连接指南 🖥️

iSCSI 允许你在网络上共享块设备,客户端可以像使用本地硬盘一样使用这些共享存储。下面是 iStoreOS 上配置 iSCSI 服务端及 Windows 客户端连接的详细指南。


📖 目录导航


✨ iSCSI 简介与优势

iSCSI (Internet Small Computer System Interface) 是一种基于 IP 网络的存储协议,它允许在 IP 网络上传输 SCSI 命令,将远程存储设备映射为本地块设备。

  • 成本效益:利用现有网络基础设施,无需专门构建昂贵的光纤通道网络。
  • 灵活性:方便扩展存储容量,可在不同操作系统和硬件平台间实现存储共享。
  • 应用场景:常用于数据中心服务器存储扩展和企业级应用(如数据库存储)。

🔧 iStoreOS 服务端配置

📦 1. 安装必要的软件包

iStoreOS 基于 OpenWRT,可以使用 opkg 包管理器安装所需软件。

1
2
3
# 更新软件包列表并安装 tgt(iSCSI 目标软件)和内核模块
opkg update
opkg install tgt kmod-scsi-core

📂 2. 准备存储设备

确保你有一块磁盘(如 /dev/sda1)可用于共享。使用 df -hlsblk 查看可用磁盘和分区。

1
2
3
4
# 查看磁盘挂载情况
df -h
# 或查看块设备信息
lsblk

⚙️ 3. 配置 iSCSI 目标服务

iSCSI 目标的配置通常位于 /etc/config/tgt。你可以直接编辑此文件或使用 uci 命令(如果 iStoreOS 支持)。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 创建或编辑 tgt 配置文件
cat > /etc/config/tgt << 'EOF'
# 全局选项
config options 'tgt'
    option iothreads '2'  # I/O 线程数,可根据 CPU 核心调整

# 定义第一个 iSCSI 目标
config target 1
    option name 'iqn.2024-09.com.istoreos:storage.disk1'  # 目标 IQN 名称,需唯一
    # 可选项:允许访问的客户端 IP 范围
    list allow_address '192.168.1.0/24'

# 定义第一个目标下的 LUN(逻辑单元)
config lun 1_1
    option device '/dev/sda1'  # 要共享的物理设备路径
    option target '1'          # 关联的目标 ID

# 可选:配置 CHAP 认证(强烈建议启用)
config account
    list target '1'            # 关联的目标 ID
    option user 'admin'        # CHAP 用户名
    option password 'yifan0719' # CHAP 密码,请使用强密码
EOF

关键参数说明

  • IQN 名称格式iqn.yyyy-mm.reverse.domain.name:optional.identifier
  • device:要共享的块设备(如 /dev/sda1)或文件(需预先创建)。
  • CHAP 认证:强烈建议启用以提高安全性。

🔄 4. 启动并验证服务

配置完成后,启动 tgt 服务并设置开机自启。

1
2
3
4
5
6
# 启动 tgt 服务
service tgt start
# 设置开机自启
service tgt enable
# 检查服务状态
service tgt status

使用 tgtadm 命令验证目标是否发布成功:

1
2
# 查看定义的 iSCSI 目标
tgtadm --mode target --op show

预期输出应显示你定义的 Target IQN 和 LUN 信息。

🔥 5. 防火墙配置

iSCSI 服务默认使用 TCP 端口 3260。确保防火墙允许客户端访问此端口。

1
2
3
# 允许 iSCSI 端口(3260/TCP)的访问(示例,具体命令取决于你的防火墙)
iptables -A INPUT -p tcp --dport 3260 -s 192.168.1.0/24 -j ACCEPT
# 然后记得保存防火墙规则

🖥️ Windows 客户端连接

Windows 系统通常自带 iSCSI 发起程序,但可能需要启用。

⚙️ 1. 启动 iSCSI 发起程序并配置 Initiator Name

  1. Win + R,输入 iscsicpl.exe 并回车。
  2. 如果首次使用,系统可能会提示启动 Microsoft iSCSI 服务,选择
  3. iSCSI 发起程序属性 窗口中,转到 Configuration 选项卡。
  4. 记录或修改 Initiator Name。Windows 会提供一个默认名称,其格式通常为 iqn.1991-05.com.microsoft:[hostname],你也可以修改为一个符合格式的唯一名称。此名称需与 iStoreOS 上设置的 ACL(如果配置了的话)匹配

🔍 2. 发现目标

  1. Discovery 选项卡中,点击 Discover Portal…
  2. 在弹出的对话框中,输入你的 iStoreOS 的 IP 地址端口保持默认的 3260。点击 OK

🔗 3. 连接目标并配置 CHAP

  1. 转到 Targets 选项卡。在 Discovered targets 列表中,你应该能看到在 iStoreOS 上配置的 Target IQN,状态为 Inactive
  2. 选中该目标,点击 Connect,然后点击 OK。此时状态应变为 Connected
  3. 如果你在 iStoreOS 上配置了 CHAP 认证,需要进一步设置:
    • Targets 选项卡,选中已连接的目标,点击 Properties
    • Properties 窗口中,点击 Configure CHAP…
    • 选中 Use CHAP to authenticate
    • Name 中输入 iStoreOS 上设置的 CHAP 用户名(如 admin)。
    • Target secret 中输入对应的密码(如 yifan0719)。
    • 点击 OK 保存。

💾 4. 初始化和使用磁盘

连接成功后,Windows 会将 iSCSI 磁盘识别为新的物理磁盘。

  1. 打开 磁盘管理Win + R 输入 diskmgmt.msc)。
  2. 系统通常会提示你初始化新磁盘。选择分区样式MBRGPT,推荐 GPT for large disks)。
  3. 初始化后,磁盘状态变为 OnlineUnallocated
  4. 右键点击未分配空间,选择 New Simple Volume…,按照向导创建分区、格式化(选择文件系统,如 NTFS)并分配驱动器号
  5. 完成后,即可在 文件资源管理器 中像使用本地磁盘一样使用该网络存储。

⚙️ 高级配置与优化

🎯 多目标与多 LUN 配置

你可以在 /etc/config/tgt 中定义多个目标和 LUN。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 示例:添加第二个目标和使用文件映像
config target 2
    option name 'iqn.2024-09.com.istoreos:storage.disk2'
    list allow_address '192.168.1.50' # 只允许特定 IP 访问

config lun 2_1
    option target '2'
    # 使用文件作为存储后端(需预先创建)
    option device '/path/to/backend-file.img'
    # 可选:指定 LUN 编号
    option lun '1'

创建文件后端

1
2
# 创建一个 10GB 的空文件作为存储后端
dd if=/dev/zero of=/path/to/backend-file.img bs=1G count=10

🚀 性能优化参数

/etc/config/tgt 的全局选项或特定目标中调整参数:

1
2
3
4
5
6
config options 'tgt'
    option iothreads '4'             # 根据 CPU 核心数调整 I/O 线程
    option nop_interval '5'          # NOP-Out 请求间隔(秒),用于连接保活
config target 1
    # 目标特定选项
    option queue_depth '32'          # 队列深度,提高并发 I/O

网络优化(在 iStoreOS 系统设置中考虑):

  • Jumbo Frames:如果网络设备(交换机、网卡)支持,可启用巨帧(MTU 9000)以提升大数据传输效率。
  • 专用网络:为 iSCSI 流量划分独立的 VLAN 或物理网络,以减少其他流量的干扰。

🔒 安全加固建议

  1. 使用强 CHAP 密码:避免使用默认或简单密码。定期更换密码。
    1
    2
    
    # 示例:使用 apg 生成强密码(如果已安装)
    apg -m 12 -n 1
    
  2. 网络隔离:使用防火墙规则严格限制仅允许授权的客户端 IP 地址访问 iSCSI 端口 3260。
  3. IP 过滤:在 tgt 配置中使用 allow_address 列表进一步限制访问源 IP。
  4. 禁用未使用的目标:如果不使用某个目标,最好将其配置注释或删除,而不是仅仅停止服务。

🐛 故障排除

🔍 iStoreOS 端检查

  1. 服务状态:确认 tgt 服务正在运行:service tgt status
  2. 目标可见性:使用 tgtadm --mode target --op show 确认目标已正确配置且 LUN 状态正常。
  3. 日志查看:使用 logread | grep tgtjournalctl -u tgt(取决于系统)查看服务日志中的错误信息。
  4. 端口监听:确认 tgt 正在监听 3260 端口:netstat -tlnp | grep 3260ss -tlnp | grep 3260
  5. 防火墙:确认防火墙已放行 3260 端口:iptables -L -n | grep 3260

🔍 Windows 端检查

  1. 网络连通性:在 Windows 命令提示符中 ping iStoreOS 的 IP 地址:ping <iStoreOS_IP>
  2. 发起程序服务:确保 Microsoft iSCSI Initiator Service 正在运行。
  3. 发现目标:在 iSCSI 发起程序Discovery 选项卡中,确认已添加正确的 iStoreOS 门户地址。
  4. CHAP 认证仔细核对 CHAP 用户名和密码,大小写敏感,确保与 iStoreOS 配置完全一致。
  5. 连接状态:在 Targets 选项卡,查看目标状态是否为 Connected
  6. Windows 日志:检查 事件查看器 中的系统和应用程序日志,筛选与 iSCSI 或磁盘相关的错误事件。

🔍 常见问题

  • 无法发现目标:检查网络连通性、防火墙、iStoreOS 上 tgt 服务状态及配置是否正确。
  • 连接失败或认证错误仔细检查 CHAP 配置(用户名、密码、Secret)在 iStoreOS 和 Windows 端是否完全一致。
  • 磁盘未出现在磁盘管理:尝试在 磁盘管理 中操作 “Rescan Disks” 或重启 Windows 的 iSCSI Initiator Service
  • 性能差:检查网络带宽、延迟、是否启用巨帧、iSCSI 参数优化(队列深度等)。

📊 监控与维护

👀 基本监控

  • iStoreOS 连接状态:定期使用 tgtadm --mode conn --op show --tid <TID> 查看活动连接。
  • Windows 性能计数器:在 任务管理器性能 选项卡或 资源监视器 中监控 iSCSI 磁盘的 I/O 活动。

🔄 定期维护

  1. 备份配置:定期备份 /etc/config/tgt 文件。
    1
    
    cp /etc/config/tgt /etc/config/tgt.backup.$(date +%Y%m%d)
    
  2. 更新软件:定期更新 iStoreOS 和 tgt 软件包以获取安全补丁和功能更新。
    1
    
    opkg update && opkg list-upgradable | cut -f 1 -d ' ' | xargs opkg upgrade
    
  3. 磁盘健康:监控共享磁盘的 SMART 状态和可用空间。
    1
    2
    
    smartctl -a /dev/sda1  # 需要安装 smartmontools
    df -h /dev/sda1
    

遵循本指南,你应该能在 iStoreOS 上成功配置 iSCSI 存储服务,并使其在 Windows 客户端上可用。记得优先启用 CHAP 认证网络访问控制以保障安全。