searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

块级共享步步为营:FreeNAS 原生 iSCSI 配置实战手记

2025-11-03 10:14:12
3
0

一、为何在 NAS 世界里一定要聊聊 iSCSI

文件级共享(NFS、SMB)把数据当“文件”搬运,适合文档、影音、备份;而块级共享把数据当“硬盘”搬运,客户端看到的是一块货真价实的磁盘,可以格式化、装系统、跑数据库,甚至安装游戏。iSCSI 就是块级共享的“平民代表”——把传统 SCSI 指令塞进 TCP/IP 报文,用现成的以太网就能跑,不用采购昂贵的 FC 交换机。FreeNAS(现 TrueNAS CORE)把 iSCSI 功能直接集成在 WebUI 里,点几下鼠标就能创建 Target,但“点鼠标”背后藏着一条完整链路:存储池→Zvol→Portal→Initiator→LUN 映射,任何一步顺序错乱,都会导致客户端连不上、认不出、写不进。下文用 3000 字把这条链路拆成七个阶段:准备、Zvol、Portal、Initiator、Target、LUN、客户端挂载,外加故障排查与安全加固,全程只讲思路与要点,不出现任何云服务商名称,也不贴命令截图,让你即使面对旧版 FreeNAS 也能举一反三。

二、准备阶段:硬件、网络、存储池先到位

  1. 硬盘与拓扑
    块级共享对 IOPS 敏感,机械盘建议组 RAIDZ2,SSD 可做读写缓存或日志设备;把 OS 与数据盘分离,避免系统升级时误伤存储池。
  2. 网络隔离
    管理口走业务网,iSCSI 口走存储网;在交换机端给存储网做巨型帧(MTU 9000),能减少 IP 分片,提高大块连续读写性能。若预算有限,至少用 VLAN 把广播域隔开,避免 Windows 客户端的广播风暴把存储网冲垮。
  3. 存储池与数据集规划
    先建池,再建数据集(dataset),iSCSI 专用数据集把压缩关掉,把记录大小调成 16K 或 64K,数据库场景用 16K,虚拟化场景用 64K,防止“大块写小记录”带来的额外拆分开销。

三、Zvol:块设备的“毛坯房”

  1. 容量预留
    Zvol 是“厚分配”还是“薄分配”?薄分配看起来能超售,但客户端一旦真正写满,池子空间告急会引发快照失效、写入阻塞,甚至整池只读。生产环境建议“厚分配”或至少留 20% 未分配空间做安全垫。
  2. 块大小对齐
    Zvol 的 volblocksize 与客户端文件系统簇大小要对齐,否则 4K 簇写 16K 块会出现“写放大”;虚拟化场景下,虚拟机内部也是 4K 簇, volblocksize 选 16K 能让“对齐概率”最高。
  3. 压缩与去重
    块设备层开压缩能省空间,但会消耗 CPU;去重在块级共享里收益低、代价高,一般关掉。若真要开压缩,先用真实业务数据跑 24 小时,看压缩比是否大于 1.3,再决定是否保留。

四、Portal:iSCSI 的“大门与门牌号”

  1. 门户 IP
    Portal 决定客户端从哪块网卡进来。多网卡负载均衡时,一条 Portal 对应一个 IP,不要一张网卡绑定多个 Portal,否则返回包可能走错接口,导致 Windows 发起端狂刷“目标不可用”。
  2. 端口
    默认 3260,若改为自定义端口,一定在防火墙同步放行 TCP 与 UDP,因为某些启动器先做 UDP 探测;端口不连续会被安全扫描认为“服务异常”,没必要就别改。
  3. 巨型帧
    门户创建完后,在“网络→接口”里把网卡 MTU 改成 9000,再在交换机端同步开启,才算端到端启用巨型帧;若只有一端开,会出现“大包 ping 通、小包不通”的诡异现象。

五、Initiator:谁能敲门的“白名单”

  1. ALL 与自定义
    测试阶段可以选 ALL,让任何 IP 都能连;生产环境务必把允许访问的客户端 IQN 或 IP 写进 Initiator 列表,实现“网络 ACL + IQN 认证”双层过滤。
  2. IQN 命名规范
    客户端 IQN 往往带主机名,重装系统后会变,导致连不上存储;给每台客户端分配一个“永久 IQN”,写进系统配置,重装后手动填回去,保持恒定。
  3. CHAP 认证
    双向 CHAP 能防止“假冒客户端”与“假冒存储”同时出现;密码长度 12–16 位,包含大小写与符号,避免用键盘顺序字符串,否则暴力扫描一晚上就告破。

六、Target:块设备的“收件人地址”

  1. IQN 全局唯一
    Target IQN 建议用组织域名反写 + 年月 + 用途名,例如 iqn.2025-06.example.stor.target1,既保证唯一,又方便十年后排查“这玩意儿到底给谁用”。
  2. 门户组与发起器组
    Target 通过“门户组 ID”与“发起器组 ID”关联前面创建的 Portal 与 Initiator;下拉列表选错组,客户端就会收到“目标不存在”或“访问被拒绝”两种截然不同却都令人抓狂的报错。
  3. LUN0 惯例
    iSCSI 规范推荐把 LUN0 留给“汇报信息”,若把真实数据放到 LUN0,某些老版本 Windows 会识别成“只读光盘”,怎么格式化都是 0 字节;老老实实把业务数据放 LUN1 及以上,能避开历史坑。

七、LUN 映射:把“毛坯房”交给“收件人”

  1. LUN ID 规划
    一个 Target 可以挂多个 LUN,ID 从 1 开始递增;虚拟化集群里,让每台宿主机固定一个 LUN ID,日后扩容只加 LUN,不改旧 ID,能避免虚拟机“磁盘顺序错乱”导致的启动失败。
  2. 容量热扩与热缩
    Zvol 支持在线扩容,扩完在客户端执行“重新扫描磁盘”即可看到新空间;缩容风险大,必须先确保客户端已卸载或文件系统已缩小,否则一次缩容就能把文件系统元数据剪成碎片。
  3. 写缓存与同步
    FreeNAS 默认启写缓存(ZIL)在内存,掉电可能丢数据;对数据库、虚拟机等强一致场景,给 Zvol 加一块 SSD 做独立 ZIL,掉电后 ZIL 会自动 replay,保证数据零丢失。

八、客户端挂载:Windows、ESXi、Linux 的通用节奏

  1. 启动器安装
    Windows 默认自带 iSCSI 发起程序,ESXi 在存储适配器里启用软件 iSCSI,Linux 需安装 iscsi-initiator-utils;安装完先把发起器 IQN 抄下来,回 FreeNAS 里加进 Initiator 组,顺序别反。
  2. 发现→连接→格式化
    发现阶段填 Portal IP,连接阶段选 Target IQN,格式化阶段用各自系统工具;Windows 会弹出“初始化磁盘”向导,ESXi 会提示“创建 VMFS”,Linux 需手动 fdisk + mkfs。
  3. 多路径与负载均衡
    若客户端有两张网卡连到存储交换机,启用多路径(MPIO)可把两条路径聚合成一条逻辑链路,单条故障自动切换;注意多路径软件要先装,再连接 Target,否则识别成两块独立磁盘,数据会写花。

九、上线前 checklist:行数、校验和、性能压测

  1. 行数比对
    用客户端操作系统扫描 LUN 后,核对块设备容量与 Zvol 大小是否一致;少 1GB 都可能是“巨型帧未端到端”或“分区表未对齐”的预警。
  2. 校验和
    在客户端写 1GB 文件,回 FreeNAS 端用 zpool scrub 检查校验和,确保无数据错;scrub 过程中若出现 CKSUM 错误,优先检查内存条(ECC 是否启用)、硬盘线(SATA 线是否老化)。
  3. 性能压测
    用 dd、diskspd、orion 工具跑 4K 随机写、64K 顺序读、1M 大块写三组测试,记录 IOPS 与带宽;若 4K 随机写低于机械盘理论值 50%,回头检查 volblocksize、ZIL、缓存设备是否匹配。

十、故障排查:从客户端到存储的“六级漏斗”

  1. 网络层
    ping 大包、telnet 3260、抓包看 SYN/SYN-ACK/ACK,确认三层连通;若出现 MTU 不匹配,大包 ping 会 fragment,表现为“小包通、大包不通”。
  2. 门户层
    iscsiadm -m discovery 能否列出 Target?若发现为空,回 FreeNAS 看 Portal IP 是否选对、防火墙是否放行。
  3. 发起器层
    客户端 IQN 是否在 Initiator 组?日志里会出现“Login rejected: initiator not in ACL list”。
  4. 目标层
    Target 是否关联正确 Portal 组?若 IQN 拼错,客户端报“target not found”。
  5. LUN 层
    连接成功但看不到磁盘,多半是 LUN ID 冲突或 LUN0 被占用;用 iscsiadm -m session -P 3 看 LUN 列表。
  6. 文件系统层
    格式化时报“磁盘已写保护”,可能是 FreeNAS 端把 Zvol 设成只读,或客户端没获取到写权限;检查 Extent 的“只读”复选框是否被误勾。

十一、安全加固:CHAP、IPsec、VLAN 三板斧

  1. CHAP
    双向 CHAP 能抵御“假冒存储”和“假冒客户端”,密码 12 位以上,特殊符号混合;定期换密码,换前先在维护窗口关闭旧认证,避免“密码一改全库断连”。
  2. IPsec
    若存储网跨越公网或跨机房,启用 IPsec 加密,防止“中间人重放”抓包;IPsec 策略匹配失败会导致连接超时,先在实验网段跑通,再推到生产。
  3. VLAN 与 ACL
    存储网单独 VLAN,禁止与办公网互通;在交换机侧加 ACL,只允许 3260 端口,拒绝一切 SSH、RDP、SMB 流量,防止“扫描器一把梭”。

十二、维护与扩容:让 iSCSI 跑十年也不落伍

  1. 快照策略
    给 Zvol 每日快照、保留七天;快照是“指针级”复制,几乎不占空间,却能让你“秒回”到任意时间点;删除快照要按“ oldest first”顺序,避免“快照链”断裂。
  2. 在线扩容
    池子空间不足时,先加硬盘到池,再扩 Zvol,最后通知客户端扫描磁盘;扩池前用 zpool scrub 做一次全盘校验,确保新盘无坏道。
  3. 固件与系统升级
    升级 FreeNAS 前,先升级硬盘、HBA、BIOS 固件,再升级系统;升级顺序“先硬后软”,能减少“固件不兼容”导致的蓝屏或失联。
0条评论
0 / 1000
c****q
143文章数
0粉丝数
c****q
143 文章 | 0 粉丝
原创

块级共享步步为营:FreeNAS 原生 iSCSI 配置实战手记

2025-11-03 10:14:12
3
0

一、为何在 NAS 世界里一定要聊聊 iSCSI

文件级共享(NFS、SMB)把数据当“文件”搬运,适合文档、影音、备份;而块级共享把数据当“硬盘”搬运,客户端看到的是一块货真价实的磁盘,可以格式化、装系统、跑数据库,甚至安装游戏。iSCSI 就是块级共享的“平民代表”——把传统 SCSI 指令塞进 TCP/IP 报文,用现成的以太网就能跑,不用采购昂贵的 FC 交换机。FreeNAS(现 TrueNAS CORE)把 iSCSI 功能直接集成在 WebUI 里,点几下鼠标就能创建 Target,但“点鼠标”背后藏着一条完整链路:存储池→Zvol→Portal→Initiator→LUN 映射,任何一步顺序错乱,都会导致客户端连不上、认不出、写不进。下文用 3000 字把这条链路拆成七个阶段:准备、Zvol、Portal、Initiator、Target、LUN、客户端挂载,外加故障排查与安全加固,全程只讲思路与要点,不出现任何云服务商名称,也不贴命令截图,让你即使面对旧版 FreeNAS 也能举一反三。

二、准备阶段:硬件、网络、存储池先到位

  1. 硬盘与拓扑
    块级共享对 IOPS 敏感,机械盘建议组 RAIDZ2,SSD 可做读写缓存或日志设备;把 OS 与数据盘分离,避免系统升级时误伤存储池。
  2. 网络隔离
    管理口走业务网,iSCSI 口走存储网;在交换机端给存储网做巨型帧(MTU 9000),能减少 IP 分片,提高大块连续读写性能。若预算有限,至少用 VLAN 把广播域隔开,避免 Windows 客户端的广播风暴把存储网冲垮。
  3. 存储池与数据集规划
    先建池,再建数据集(dataset),iSCSI 专用数据集把压缩关掉,把记录大小调成 16K 或 64K,数据库场景用 16K,虚拟化场景用 64K,防止“大块写小记录”带来的额外拆分开销。

三、Zvol:块设备的“毛坯房”

  1. 容量预留
    Zvol 是“厚分配”还是“薄分配”?薄分配看起来能超售,但客户端一旦真正写满,池子空间告急会引发快照失效、写入阻塞,甚至整池只读。生产环境建议“厚分配”或至少留 20% 未分配空间做安全垫。
  2. 块大小对齐
    Zvol 的 volblocksize 与客户端文件系统簇大小要对齐,否则 4K 簇写 16K 块会出现“写放大”;虚拟化场景下,虚拟机内部也是 4K 簇, volblocksize 选 16K 能让“对齐概率”最高。
  3. 压缩与去重
    块设备层开压缩能省空间,但会消耗 CPU;去重在块级共享里收益低、代价高,一般关掉。若真要开压缩,先用真实业务数据跑 24 小时,看压缩比是否大于 1.3,再决定是否保留。

四、Portal:iSCSI 的“大门与门牌号”

  1. 门户 IP
    Portal 决定客户端从哪块网卡进来。多网卡负载均衡时,一条 Portal 对应一个 IP,不要一张网卡绑定多个 Portal,否则返回包可能走错接口,导致 Windows 发起端狂刷“目标不可用”。
  2. 端口
    默认 3260,若改为自定义端口,一定在防火墙同步放行 TCP 与 UDP,因为某些启动器先做 UDP 探测;端口不连续会被安全扫描认为“服务异常”,没必要就别改。
  3. 巨型帧
    门户创建完后,在“网络→接口”里把网卡 MTU 改成 9000,再在交换机端同步开启,才算端到端启用巨型帧;若只有一端开,会出现“大包 ping 通、小包不通”的诡异现象。

五、Initiator:谁能敲门的“白名单”

  1. ALL 与自定义
    测试阶段可以选 ALL,让任何 IP 都能连;生产环境务必把允许访问的客户端 IQN 或 IP 写进 Initiator 列表,实现“网络 ACL + IQN 认证”双层过滤。
  2. IQN 命名规范
    客户端 IQN 往往带主机名,重装系统后会变,导致连不上存储;给每台客户端分配一个“永久 IQN”,写进系统配置,重装后手动填回去,保持恒定。
  3. CHAP 认证
    双向 CHAP 能防止“假冒客户端”与“假冒存储”同时出现;密码长度 12–16 位,包含大小写与符号,避免用键盘顺序字符串,否则暴力扫描一晚上就告破。

六、Target:块设备的“收件人地址”

  1. IQN 全局唯一
    Target IQN 建议用组织域名反写 + 年月 + 用途名,例如 iqn.2025-06.example.stor.target1,既保证唯一,又方便十年后排查“这玩意儿到底给谁用”。
  2. 门户组与发起器组
    Target 通过“门户组 ID”与“发起器组 ID”关联前面创建的 Portal 与 Initiator;下拉列表选错组,客户端就会收到“目标不存在”或“访问被拒绝”两种截然不同却都令人抓狂的报错。
  3. LUN0 惯例
    iSCSI 规范推荐把 LUN0 留给“汇报信息”,若把真实数据放到 LUN0,某些老版本 Windows 会识别成“只读光盘”,怎么格式化都是 0 字节;老老实实把业务数据放 LUN1 及以上,能避开历史坑。

七、LUN 映射:把“毛坯房”交给“收件人”

  1. LUN ID 规划
    一个 Target 可以挂多个 LUN,ID 从 1 开始递增;虚拟化集群里,让每台宿主机固定一个 LUN ID,日后扩容只加 LUN,不改旧 ID,能避免虚拟机“磁盘顺序错乱”导致的启动失败。
  2. 容量热扩与热缩
    Zvol 支持在线扩容,扩完在客户端执行“重新扫描磁盘”即可看到新空间;缩容风险大,必须先确保客户端已卸载或文件系统已缩小,否则一次缩容就能把文件系统元数据剪成碎片。
  3. 写缓存与同步
    FreeNAS 默认启写缓存(ZIL)在内存,掉电可能丢数据;对数据库、虚拟机等强一致场景,给 Zvol 加一块 SSD 做独立 ZIL,掉电后 ZIL 会自动 replay,保证数据零丢失。

八、客户端挂载:Windows、ESXi、Linux 的通用节奏

  1. 启动器安装
    Windows 默认自带 iSCSI 发起程序,ESXi 在存储适配器里启用软件 iSCSI,Linux 需安装 iscsi-initiator-utils;安装完先把发起器 IQN 抄下来,回 FreeNAS 里加进 Initiator 组,顺序别反。
  2. 发现→连接→格式化
    发现阶段填 Portal IP,连接阶段选 Target IQN,格式化阶段用各自系统工具;Windows 会弹出“初始化磁盘”向导,ESXi 会提示“创建 VMFS”,Linux 需手动 fdisk + mkfs。
  3. 多路径与负载均衡
    若客户端有两张网卡连到存储交换机,启用多路径(MPIO)可把两条路径聚合成一条逻辑链路,单条故障自动切换;注意多路径软件要先装,再连接 Target,否则识别成两块独立磁盘,数据会写花。

九、上线前 checklist:行数、校验和、性能压测

  1. 行数比对
    用客户端操作系统扫描 LUN 后,核对块设备容量与 Zvol 大小是否一致;少 1GB 都可能是“巨型帧未端到端”或“分区表未对齐”的预警。
  2. 校验和
    在客户端写 1GB 文件,回 FreeNAS 端用 zpool scrub 检查校验和,确保无数据错;scrub 过程中若出现 CKSUM 错误,优先检查内存条(ECC 是否启用)、硬盘线(SATA 线是否老化)。
  3. 性能压测
    用 dd、diskspd、orion 工具跑 4K 随机写、64K 顺序读、1M 大块写三组测试,记录 IOPS 与带宽;若 4K 随机写低于机械盘理论值 50%,回头检查 volblocksize、ZIL、缓存设备是否匹配。

十、故障排查:从客户端到存储的“六级漏斗”

  1. 网络层
    ping 大包、telnet 3260、抓包看 SYN/SYN-ACK/ACK,确认三层连通;若出现 MTU 不匹配,大包 ping 会 fragment,表现为“小包通、大包不通”。
  2. 门户层
    iscsiadm -m discovery 能否列出 Target?若发现为空,回 FreeNAS 看 Portal IP 是否选对、防火墙是否放行。
  3. 发起器层
    客户端 IQN 是否在 Initiator 组?日志里会出现“Login rejected: initiator not in ACL list”。
  4. 目标层
    Target 是否关联正确 Portal 组?若 IQN 拼错,客户端报“target not found”。
  5. LUN 层
    连接成功但看不到磁盘,多半是 LUN ID 冲突或 LUN0 被占用;用 iscsiadm -m session -P 3 看 LUN 列表。
  6. 文件系统层
    格式化时报“磁盘已写保护”,可能是 FreeNAS 端把 Zvol 设成只读,或客户端没获取到写权限;检查 Extent 的“只读”复选框是否被误勾。

十一、安全加固:CHAP、IPsec、VLAN 三板斧

  1. CHAP
    双向 CHAP 能抵御“假冒存储”和“假冒客户端”,密码 12 位以上,特殊符号混合;定期换密码,换前先在维护窗口关闭旧认证,避免“密码一改全库断连”。
  2. IPsec
    若存储网跨越公网或跨机房,启用 IPsec 加密,防止“中间人重放”抓包;IPsec 策略匹配失败会导致连接超时,先在实验网段跑通,再推到生产。
  3. VLAN 与 ACL
    存储网单独 VLAN,禁止与办公网互通;在交换机侧加 ACL,只允许 3260 端口,拒绝一切 SSH、RDP、SMB 流量,防止“扫描器一把梭”。

十二、维护与扩容:让 iSCSI 跑十年也不落伍

  1. 快照策略
    给 Zvol 每日快照、保留七天;快照是“指针级”复制,几乎不占空间,却能让你“秒回”到任意时间点;删除快照要按“ oldest first”顺序,避免“快照链”断裂。
  2. 在线扩容
    池子空间不足时,先加硬盘到池,再扩 Zvol,最后通知客户端扫描磁盘;扩池前用 zpool scrub 做一次全盘校验,确保新盘无坏道。
  3. 固件与系统升级
    升级 FreeNAS 前,先升级硬盘、HBA、BIOS 固件,再升级系统;升级顺序“先硬后软”,能减少“固件不兼容”导致的蓝屏或失联。
文章来自个人专栏
文章 | 订阅
0条评论
0 / 1000
请输入你的评论
0
0