☰
DAS、NAS、IP-SAN、FC-SAN四种存储形态详解与选型指南
2026/10/27 5:42:28 网站建设 项目流程

存储圈里有句话:搞不清 DAS、NAS、SAN 的区别,机房里的线你都不敢随便拔。这话听着糙,但确实是我带过几个新人之后最深的感触。很多人刚接触存储的时候,看到机柜里一堆盘柜、交换机、光纤模块,脑子里第一反应是“这不都是存数据的吗,能有多大差别”。结果真到选型或者排障的时候,DAS 和 SAN 混着叫,NAS 和文件服务器当成一回事,IP-SAN 和 FC-SAN 的线插反了还在那儿查配置。这篇内容我就围绕 DAS、NAS、IP-SAN、FC-SAN 这四种最主流的存储形态,把它们的底层逻辑、适用场景、实操配置和踩坑经验一次讲透。不管你是刚入行的运维、正在做存储选型的架构岗,还是想搞清楚机房那堆设备到底在干嘛的技术爱好者,看完至少能做到:别人报一个存储方案,你脑子里能立刻浮现出它的拓扑长什么样、瓶颈可能在哪、什么场景下不该用它。

1. 四种存储形态的整体设计与选型逻辑

1.1 先搞清楚一个核心问题:存储到底在解决什么

很多人一上来就背概念,DAS 是直连、NAS 是网络附加、SAN 是存储区域网络,背完还是不会选。我的建议是先退一步,想明白存储这件事本质上在解决三个矛盾:容量和性能的矛盾、共享和隔离的矛盾、成本和可靠性的矛盾。你把这三点想清楚,四种形态的定位自然就出来了。

DAS 是最原始的形态,硬盘直接挂在服务器上,走 SATA、SAS 或者 NVMe 通道。它的设计哲学是“独占”——一块盘只服务一台主机,简单、直接、延迟最低。但问题也在这,容量没法共享,一台机器满了另一台还空着,你只能干瞪眼。NAS 的出现就是为了解决共享问题,它把存储做成一个独立的文件服务器,通过 NFS 或 SMB 协议对外提供文件级访问,多台主机可以同时读写同一个目录。SAN 则走了另一条路,它不提供文件,而是提供“块设备”——对服务器来说,SAN 里的 LUN 就像一块本地硬盘一样,你可以往上装文件系统、建数据库。IP-SAN 和 FC-SAN 是 SAN 的两种实现方式,区别在于底层传输走的是以太网还是光纤通道。

这里有个特别容易混淆的点我得提前说清楚:NAS 是文件级(file-level),SAN 是块级(block-level)。这个区别不是学术概念,它直接决定了你的应用能不能用。比如你要跑 Oracle 数据库,数据库自己管理块设备,那你必须给它块存储,NAS 的文件锁机制会让数据库性能崩掉;反过来,你要做多台 Web 服务器的共享上传目录,那 NAS 就是天然合适的,用 SAN 你得自己在上层做集群文件系统,复杂度陡增。

1.2 四种形态的拓扑差异与选型对照

我把四种形态的关键维度整理成一张表,这张表我在实际选型沟通时经常直接拿出来用,比讲半天概念管用。

维度DASNASIP-SANFC-SAN
访问粒度块级文件级块级块级
传输介质SAS/SATA/NVMe 直连以太网以太网光纤通道
典型协议SCSI/ATA/NVMeNFS/SMBiSCSIFCP
共享能力不支持(单机独占)多主机共享文件多主机共享块(需集群文件系统)同 IP-SAN
典型延迟最低(微秒级)毫秒级毫秒级亚毫秒级
成本最低中中低高
扩展性差(受限于单机槽位)好好好
典型场景单机数据库、本地盘文件共享、备份归档中小型虚拟化、容灾核心数据库、高IOPS业务

这张表里我最想强调的是“访问粒度”和“共享能力”这两行。很多人选型的失误就出在这——看到 NAS 便宜又能共享,就想把所有业务往上搬,结果数据库跑上去直接卡死。记住一个原则:应用自己管块的,给它块存储;应用要共享文件的,给它文件存储。这条原则能帮你避开八成以上的选型错误。

1.3 为什么不是越贵越好:成本与性能的平衡点

FC-SAN 贵,这是共识,但贵在哪、什么时候值得贵,很多人说不清楚。FC-SAN 的成本大头在三块:光纤交换机、HBA 卡、光模块和线缆。一套双活 FC-SAN,两台光纤交换机做冗余,每台服务器两块 HBA 卡,加上盘柜和授权,预算很容易冲到几十万。而同样容量的 IP-SAN,用万兆以太网加普通网卡加 iSCSI 发起端,成本可能只有三分之一甚至更低。

那 FC-SAN 的价值在哪?在于它的确定性和低延迟。光纤通道协议本身是为存储流量设计的,丢包率极低,延迟稳定在亚毫秒级,而且它和以太网物理隔离,业务网络的广播风暴、拥塞不会波及存储。对于核心交易数据库、高频读写的小块 IO 场景,这个确定性值那个钱。但如果你的业务是视频监控存储、文件归档、中小型虚拟化集群,IP-SAN 甚至 NAS 完全够用,硬上 FC-SAN 就是浪费预算。

我个人的经验判断标准是这样的:单台主机对存储的 IOPS 需求稳定超过 5 万、且对延迟抖动敏感(比如要求 P99 延迟低于 1ms),才认真考虑 FC-SAN;否则优先 IP-SAN。这个阈值不是绝对的,但能帮你快速做初筛。

2. 核心细节解析与实操要点

2.1 DAS 的隐藏价值与被低估的场景

DAS 经常被当成“过时技术”,我觉得这是误解。DAS 的核心优势是延迟和成本,这两个优势在特定场景下无可替代。比如单机跑一个对 IO 极度敏感的缓存服务或者本地数据库,数据就在主板直连的 NVMe 盘上,延迟能压到几十微秒,这是任何网络存储都给不了的。再比如边缘计算节点,一台设备放在现场,没有条件部署独立的存储网络,DAS 就是唯一合理的选择。

DAS 的实操要点主要在 RAID 配置和盘位规划上。我见过太多人把 DAS 当成“插上盘就能用”,结果单盘故障直接丢数据。DAS 本身不提供冗余,冗余要靠 RAID 卡或者软 RAID 来做。常见的 RAID 级别选择我整理如下:

RAID 级别最少盘数容错能力空间利用率适用场景
RAID 02无100%临时数据、可重建的缓存
RAID 12坏1块50%系统盘、小容量高可靠
RAID 53坏1块(n-1)/n读多写少的通用场景
RAID 64坏2块(n-2)/n大容量盘、重建风险高的场景
RAID 104每组坏1块50%写密集、高IOPS场景

这里有个实操细节值得展开:大容量机械盘(比如单盘 16TB 以上)做 RAID 5 是有风险的,因为重建时间可能长达十几个小时甚至更久,重建期间再坏一块盘就全没了。所以大容量盘我一般建议 RAID 6 或者 RAID 10。另外 RAID 卡要有电池或者超级电容保护写缓存,否则突然断电时缓存里的数据会丢,这个细节在采购时一定要确认,很多低端 RAID 卡是不带缓存保护的。

注意:DAS 的盘位扩展受限于机箱和 RAID 卡端口数,规划时至少预留 20% 的空盘位,否则后期扩容只能换整机。

2.2 NAS 的协议选择:NFS 与 SMB 的门道

NAS 看起来简单,无非是插上网线、建个共享目录,但 NFS 和 SMB 这两个协议的选择和调优,坑一点都不少。NFS 主要用于 Linux/Unix 环境,SMB 主要用于 Windows 环境,这是基本认知,但实际部署时远不止这么简单。

先说 NFS。NFS 有 v3、v4.0、v4.1、v4.2 几个版本,差异很大。v3 是无状态协议,服务端重启客户端基本无感,但性能和安全性较弱;v4.1 引入了并行访问(pNFS),多客户端并发读写同一文件时性能提升明显;v4.2 增加了服务端复制等特性。我在实际部署中,只要客户端支持,一律上 NFS v4.1 以上,因为它的锁机制和并发性能比 v3 好太多。挂载参数上,rsize和wsize建议设到 1MB(1048576),nconnect参数(Linux 5.3+ 支持)可以建立多条连接提升吞吐,这个参数很多人不知道,实测在万兆环境下能把单客户端吞吐提升 2 到 3 倍。

# NFS v4.1 挂载示例,nconnect 建立 4 条连接 mount -t nfs -o vers=4.1,rsize=1048576,wsize=1048576,nconnect=4,hard,timeo=600 \ 192.168.1.100:/export/data /mnt/nas

SMB 这边,版本选择同样重要。SMB 3.0 以后支持多通道(multichannel)和 SMB Direct(RDMA),多通道能让单客户端聚合多块网卡的带宽。Windows 客户端默认就支持,Linux 端用 cifs-utils 挂载时要注意指定vers=3.0或更高。另外 SMB 的权限模型比 NFS 复杂,涉及共享权限和 NTFS 权限两层,经常出现“共享权限给了但文件还是访问不了”的情况,排查时一定要两层都看。

提示:NAS 的性能瓶颈往往不在盘上,而在网络和协议栈。千兆环境单客户端顺序读写撑死 110MB/s 左右,想跑满多盘阵列的带宽,万兆网卡和交换机是前提。

2.3 IP-SAN 的 iSCSI 配置与多路径

IP-SAN 的核心是 iSCSI 协议,它把 SCSI 命令封装进 TCP/IP 包,通过以太网传输。对服务器来说,iSCSI 目标端(target)提供的 LUN 就是一块本地磁盘,你在上面建分区、格式化、挂载,和本地盘操作完全一样。

iSCSI 部署的关键在发起端(initiator)和目标端(target)的配置,以及多路径(multipath)的设置。多路径是 IP-SAN 高可用的核心,服务器通过两块网卡、两条链路访问同一个 LUN,任何一条链路故障都不影响业务,同时还能做负载均衡。Linux 下用multipath-tools来管理,配置文件/etc/multipath.conf里要正确设置path_grouping_policy,常用的是failover(主备)和multibus(全活)。

# 查看多路径设备状态 multipath -ll # 典型输出中 sda 和 sdb 是同一 LUN 的两条路径 # mpatha (3600...) dm-0 # ├── sda [active][ready] # └── sdb [active][ready]

配置 iSCSI 发起端时,/etc/iscsi/iscsid.conf里的几个参数值得调:node.session.timeo.replacement_timeout控制链路断开后多久切换路径,默认 120 秒太长,我一般调到 15 到 30 秒;node.session.cmds_max和node.session.queue_depth影响并发命令数,高 IOPS 场景可以适当调大。目标端这边,如果用的是软件 target(比如 LIO),要注意每个 LUN 的emulate_tpu和emulate_caw参数,某些老应用对这两个 SCSI 命令有依赖,不开会报错。

IP-SAN 最大的坑是网络。iSCSI 流量和业务流量跑在同一个网络上,一旦业务网络出现广播风暴或者大流量传输,存储 IO 立刻受影响。所以生产环境我强烈建议 iSCSI 走独立的 VLAN 甚至独立的物理交换机,并且开启巨帧(Jumbo Frame,MTU 9000)。巨帧能显著降低 CPU 开销和包处理延迟,但要求链路上所有设备(网卡、交换机、目标端)MTU 一致,有一个不匹配就会出问题,这是排查 IP-SAN 性能问题时第一个要确认的点。

2.4 FC-SAN 的 zoning 与链路规划

FC-SAN 的配置门槛比 IP-SAN 高,核心难点在光纤交换机的 zoning(分区)配置。Zoning 的作用是把交换机端口划分成逻辑组,只有同一 zone 内的端口才能互相通信,这既是安全隔离,也是流量隔离。Zoning 配错了,服务器要么看不到存储,要么看到不该看到的 LUN,是 FC-SAN 部署中最常见的故障源。

Zoning 有两种方式:基于端口(port zoning)和基于 WWN(WWN zoning)。基于端口的方式配置简单,但换端口就要改配置;基于 WWN 的方式更灵活,设备换端口不用改 zone,但需要准确记录每块 HBA 卡的 WWN。生产环境我推荐 WWN zoning,配合单启动器单目标(single-initiator single-target)的 zone 设计,每个 zone 里只有一块 HBA 和一个存储端口,这样故障域最小,排障也最清晰。

FC-SAN 的链路规划要注意两点:一是双 Fabric 冗余,两台光纤交换机独立组网,服务器双 HBA 分别接入两个 Fabric,任何一台交换机故障业务不中断;二是速率匹配,HBA、交换机端口、存储端口三者的速率要一致,现在主流是 16G 或 32G FC,混插不同速率的端口会自动协商到低速,但有些老设备协商会出问题,规划时尽量统一。

注意:FC-SAN 的 HBA 卡驱动和固件版本要匹配,版本不匹配可能导致链路频繁闪断,上线前务必核对厂商的兼容性矩阵。

3. 实操过程与核心环节实现

3.1 从零搭建一套 IP-SAN 的完整流程

我拿一套典型的中小型虚拟化 IP-SAN 环境来演示,拓扑是:一台双控存储阵列,两块万兆网卡做 bond;两台服务器,各两块万兆网卡;一台万兆交换机。目标是给两台服务器提供共享块存储,跑虚拟化集群。

第一步是网络规划。存储阵列的两个控制器各出一个万兆口,分别接到交换机的两个不同端口;每台服务器两块万兆口,也分别接交换机。IP 规划上,存储和服务器放在同一个存储专用网段,比如 10.10.10.0/24,存储控制器 A 用 10.10.10.11,控制器 B 用 10.10.10.12,服务器 A 两块网卡 10.10.10.21 和 10.10.10.22,服务器 B 类似。注意这里不做 bond,因为 iSCSI 多路径需要看到两条独立路径,做 bond 反而会把两条路径合成一条,失去冗余意义。这是很多人会犯的错,以为网卡绑定越多越好,实际上 iSCSI 场景下多路径比 bond 更合适。

第二步是存储端配置。登录存储管理界面,创建主机组,把两台服务器的 iSCSI 发起端 IQN 加进去。IQN 的格式类似iqn.2024-01.com.example:server01,每台服务器唯一。然后创建 LUN,比如 2TB 一个,映射给主机组。再配置目标端门户(target portal),把两个控制器的 IP 都加上,这样服务器才能发现两条路径。

第三步是服务器端配置。先装iscsi-initiator-utils和device-mapper-multipath,启动iscsid服务,用iscsiadm发现并登录目标。

# 发现目标 iscsiadm -m discovery -t sendtargets -p 10.10.10.11 # 登录所有发现的目标 iscsiadm -m node -L all # 确认会话建立 iscsiadm -m session -P 3

第四步是多路径配置。编辑/etc/multipath.conf,关键配置如下:

defaults { user_friendly_names yes path_grouping_policy multibus failback immediate no_path_retry 30 }

multibus策略下所有路径都参与负载均衡,failback immediate让故障路径恢复后立即切回。配好后重启 multipathd,用multipath -ll确认两条路径都是 active ready 状态。

第五步是文件系统和集群配置。虚拟化场景一般用 LVM 加集群文件系统(比如 GFS2 或 OCFS2),或者直接用虚拟化平台自带的集群存储管理。这里要注意,普通 ext4 或 xfs 不能多主机同时挂载同一个块设备,会损坏文件系统,必须用集群文件系统或者由虚拟化平台统一管理。

3.2 FC-SAN 的 zoning 配置实操记录

FC-SAN 这边我用一台光纤交换机的命令行来演示 zoning 配置。假设服务器 HBA 的 WWN 是10:00:00:00:c9:12:34:56,存储端口 A 的 WWN 是20:00:00:00:c9:ab:cd:ef,我们要建一个 zone 把这两个端口放进去。

# 登录光纤交换机(以常见 CLI 为例) # 创建别名,方便管理 alicreate "server01_hba0", "10:00:00:00:c9:12:34:56" alicreate "storage_ctrlA_sp0", "20:00:00:00:c9:ab:cd:ef" # 创建 zone zonecreate "zone_server01_ctrlA", "server01_hba0;storage_ctrlA_sp0" # 创建 cfg 并激活 cfgcreate "cfg_production", "zone_server01_ctrlA" cfgenable "cfg_production" # 确认配置生效 cfgshow

配置完成后,在服务器上重新扫描 SCSI 总线,就能看到新的 LUN:

# 重新扫描 FC HBA echo "- - -" > /sys/class/scsi_host/host0/scan # 或者用 rescan-scsi-bus.sh 脚本 rescan-scsi-bus.sh -a

这里有个实操细节:zoning 激活后,服务器不一定立刻看到 LUN,需要重新扫描。如果扫描后还是看不到,按这个顺序排查:先确认 HBA 卡链路状态(cat /sys/class/fc_host/host0/port_state应该是 Online),再确认交换机端口状态(portshow看端口是否 Online),最后确认存储端 LUN 映射是否包含这块 HBA 的 WWN。这个排查顺序能帮你快速定位问题出在哪一层。

3.3 性能验证:怎么确认存储真的跑起来了

配置完不等于能用,一定要做性能验证。我常用的工具是fio,它能模拟各种 IO 模式,测出真实的 IOPS 和延迟。下面是一个随机读写的测试示例:

# 4K 随机读写,队列深度 32,跑 60 秒 fio --name=randrw --ioengine=libaio --direct=1 --rw=randrw \ --bs=4k --numjobs=4 --iodepth=32 --size=4G --runtime=60 \ --group_reporting --filename=/dev/mapper/mpatha

测试时要注意几点:direct=1绕过系统缓存,测的是真实存储性能;numjobs和iodepth的乘积是总队列深度,要根据实际业务并发来设;测试前确认设备上没有生产数据,因为这是破坏性写入。测出来的结果和预期对比,如果 IP-SAN 在万兆环境下 4K 随机读 IOPS 只有几千,那肯定有问题,先查网络 MTU 和交换机端口是否有丢包。

4. 常见问题与排查技巧实录

4.1 存储故障排查速查表

我把这些年遇到的典型问题整理成一张速查表,按现象、可能原因、排查动作来组织,实际排障时按这个顺序走,能省不少时间。

现象可能原因排查动作
NAS 挂载后读写极慢网络协商到百兆/千兆,或 MTU 不匹配ethtool看速率,ping -M do -s 8972测巨帧
iSCSI 登录失败目标端门户 IP 不通,或 CHAP 认证错误iscsiadm -m discovery测试,核对 CHAP 配置
多路径只有一条 active另一条链路网络不通,或 multipath 配置错误multipath -ll看路径状态,查交换机端口
FC 服务器看不到 LUNzoning 未激活,或 LUN 映射未包含该 WWNcfgshow确认 zone,存储端核对映射
存储性能突然下降链路闪断、盘故障重建、或网络拥塞查交换机端口错误计数,查存储告警日志
集群文件系统挂载失败多主机同时挂载普通文件系统确认使用集群文件系统,检查锁服务

这张表里我特别想说的是“存储性能突然下降”这一条。存储性能问题最怕的是没有基线,你不知道正常是什么样,就没法判断现在是不是异常。所以我的习惯是上线时跑一遍 fio 记录基线数据,后面出问题一对比就知道差多少。另外交换机端口的错误计数(CRC 错误、丢包)是排查物理链路问题的金指标,show interface一看便知。

4.2 几个踩过的坑和独家经验

第一个坑是巨帧配置不一致。有次 IP-SAN 性能死活上不去,查了半天发现服务器网卡 MTU 设了 9000,但交换机端口还是默认 1500,大包被分片,性能反而比不开巨帧还差。教训是:开巨帧必须全链路统一,而且要用ping -M do -s 8972逐跳验证,别只看配置文件。

第二个坑是 FC-SAN 的 HBA 固件版本。有套环境链路频繁闪断,日志里全是链路重置记录,最后查出来是 HBA 固件和交换机固件版本不兼容。FC 设备对版本匹配比以太网敏感得多,上线前一定要查厂商的互操作性矩阵,别嫌麻烦。

第三个坑是 NAS 的 NFS 锁问题。有次应用报“文件被锁定无法写入”,查了半天是 NFS v3 的锁服务(lockd)和防火墙冲突,锁请求被拦了。后来统一升级到 NFS v4.1,锁机制内置在协议里,不再依赖独立的锁服务,问题消失。这也是我推荐 NFS v4.1 以上的实际原因之一。

提示:所有存储配置变更前,先在测试环境验证,尤其是 zoning 和 multipath 这类影响链路的配置,生产环境直接改风险极高。

4.3 容量规划与扩容的实操建议

容量规划是存储里最容易被忽视又最容易出事的环节。我的经验是三个数字要盯住:当前使用率、增长率、扩容周期。使用率超过 70% 就该启动扩容评估,超过 80% 必须动手,别等到 90% 才着急,因为扩容本身需要时间,采购、上架、配置、数据均衡,一套流程走下来一两周很正常。

扩容方式上,DAS 只能加盘或者换整机,灵活性最差;NAS 和 SAN 一般支持在线加盘扩容,但要注意 RAID 组的扩展限制,有些 RAID 卡不支持在线扩容,或者扩容后需要手动触发重建。LUN 扩容后,上层文件系统也要相应扩展,Linux 下 ext4 用resize2fs,xfs 用xfs_growfs,而且要先扩 LUN 再扩文件系统,顺序不能反。

还有个细节是精简配置(thin provisioning)。很多存储支持 LUN 精简配置,创建时分配逻辑容量,实际写入才占物理空间。这能提高空间利用率,但有超配风险——如果所有 LUN 都写满,物理空间不够就会出问题。用精简配置一定要监控实际物理使用率,设置告警阈值,别被逻辑容量迷惑。

5. 四种形态的协同与演进思路

实际生产环境里,这四种存储形态往往不是二选一,而是组合使用。我见过一套比较合理的架构是这样的:核心数据库跑 FC-SAN 保证低延迟和高 IOPS;虚拟化集群用 IP-SAN,兼顾性能和成本;文件共享和备份归档用 NAS;每台服务器本地再留 DAS 做系统盘和缓存。这种分层设计的原则是“把合适的负载放到合适的存储上”,而不是追求单一技术的统一。

从演进角度看,全闪存阵列的普及正在改变一些传统认知。以前 FC-SAN 的延迟优势很明显,现在全闪存 IP-SAN 的延迟也能做到亚毫秒级,加上 25G/100G 以太网的普及,IP-SAN 和 FC-SAN 的性能差距在缩小。但 FC-SAN 在确定性和隔离性上的优势依然存在,核心业务场景短期内不会被完全替代。我的建议是新建环境优先评估 IP-SAN,只有在性能测试证明 IP-SAN 满足不了需求时,再上 FC-SAN,这样性价比最高。

最后分享一个我自己的习惯:不管用哪种存储,上线前一定画一张拓扑图,标清楚每台主机、每块网卡/HBA、每个交换机端口、每个存储控制器的连接关系和 IP/WWN。这张图在排障时的价值无可估量,很多问题看着复杂,对着拓扑图一梳理,故障域立刻就缩小了。存储这行,配置可以查文档,但对自己环境的掌控感,只能靠平时一点一点积累。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询