【Day 80】Linux-NAS 和 SAN 存储
一、存储设备
存储设备的核心作用是为业务服务器提供更充足的存储空间、更高的 IO 性能以及共享存储能力,以满足不同业务场景的需求
// 解释:存储设备能把多块硬盘的容量 “拼起来”,还能随时加硬盘扩容,满足业务不断产生的海量数据存储需求;存储设备通过用更快的硬件(如高速 SSD)、多设备并行处理数据,让数据读写速度大幅提升;存储设备能通过网络让多台服务器共享同一批数据(比如办公文档共享、多台服务器共用一个数据库),还能在服务器故障时快速切换数据,保证业务不中断。
1、根据工作方式,存储设备主要分为三类
- DAS 直接附加存储
- NAS 网络附加存储
- SAN 存储区域网络
(1)DAS 直接附加存储
DAS 通过数据总线直接将存储设备接入到服务器主板,是一种简单直接的存储连接方式。
磁盘类型:机械硬盘、SSD
磁盘接口:SATA,SAS、NVME
特点:DAS 属于服务器专属存储,无法直接被其他服务器共享,这导致其扩展性较差,受限于服务器接口的数量,因此更适用于个人 PC、单台服务器等小型场景。
(2)NAS 存储
NAS 基于文件系统级别实现共享,支持 nfs 和 cifs 协议来共享存储空间。
- nfs协议:适用于 Linux、Unix系统
- cifs协议:适用于 Windows
实现方式:
① 使用专用存储设备,核心是 “硬件 + 预装系统” 一体化,无需用户从零配置,典型代表是群晖(Synology)、威联通(QNAP)的家用 NAS,或华为、戴尔的企业级存储阵列。
② 使用普通服务器上安装开源 Linux 发行版,再通过配置软件实现 NAS 功能。
具体流程:
本质是存储端先完成文件系统构建,再通过标准化协议将 “已格式化的存储空间” 开放给网络中的客户端访问。
① 存储端:先格式化创建文件系统。NAS 设备内置独立的操作系统,首次使用时,需先对其内置 / 外接的硬盘进行格式化,创建通用的文件系统。 —— 文件系统能定义文件的物理存储结构,让 NAS 能像电脑硬盘一样 “管理文件”,而非仅提供裸磁盘空间。
② 存储端:将文件系统挂载到 NAS 本地,再配置共享规则。格式化后的文件系统会被挂载到 NAS 的本地目录,随后 NAS 通过系统设置,将该挂载目录配置为 “共享目录”,并指定共享权限.
③ 客户端:通过 NFS/CIFS 协议,跨网络访问共享目录。不同系统的客户端(Linux/Unix、Windows)通过对应的协议 “连接 NAS 的共享目录”。
特点:作为一种专用存储服务器,NAS 设备自身配备了 CPU、内存和操作系统,通过以太网接入网络,用户可以通过网络路径(如 \IP\ 共享名或 /mnt/nfs)访问存储内容,非常适合企业文档共享、媒体存储等文件共享场景。
补充:文件系统类型
① 单机文件系统(本地存储专用,NAS 存储端底层依赖)
单机文件系统仅用于单台设备本地存储,负责管理本地硬盘的空间分配、文件结构与读写逻辑,是 NAS 设备 “先格式化、再共享” 的基础(NAS 需先将本地硬盘格式化为单机文件系统,才能构建文件结构)。
Linux 系统专用:
XFS:支持超大容量(单文件系统最大 8EB)、高 IO 性能,适合存储高清视频、日志等大文件,中小型 NAS 常用;
Ext4:稳定性强、兼容性好,支持文件权限控制(如读 / 写 / 执行权限),是 Linux 及 NAS 系统(如群晖、威联通)的默认格式之一。
Windows 系统专用 / 兼容:
NTFS(注:原文 “nyfs” 为笔误,正确为 NTFS):支持文件权限、压缩、加密,适配 Windows 环境,若 NAS 优先对接 Windows 客户端(如办公文档共享),可格式化为 NTFS;
FAT32:兼容性极强(支持 Windows、Linux、手机等多设备),但单文件最大仅 4GB、总容量最大 2TB,仅适合小文件存储(如 U 盘、移动硬盘)。
② 网络文件系统(跨设备共享专用,NAS 核心共享协议)
网络文件系统是多设备通过网络共享文件的 “通信规则”,NAS 正是通过这类协议,将本地已格式化的存储空间开放给其他设备访问,实现 “文件级共享”。
NFS(Network File System,网络文件系统):主要适配 Linux/Unix 系统,客户端(如 Linux 服务器)可通过 NFS 将 NAS 的共享目录 “挂载到本地路径”,访问时如同操作本地文件夹,适合 Linux 环境下的文件协同(如服务器日志共享)。
CIFS/SMB(Common Internet File System/Server Message Block,通用互联网文件系统):主要适配 Windows 系统,客户端(如 Windows 电脑)可通过 “\NAS IP\ 共享名”(如
\\192.168.1.100\office-doc
)直接访问共享目录,也兼容 Linux、macOS,是跨系统文件共享的常用协议(如办公场景多人共享文档)。
③ 集群文件系统(多存储节点协同,大规模场景专用)
集群文件系统是多台存储设备(节点)组成 “存储集群” 后,共同管理数据的文件系统,核心是解决 “大规模存储下的容量扩展、性能叠加、数据冗余” 问题,常见于企业级大规模存储场景。
特点:多存储节点统一对外提供存储空间,客户端访问时 “看不到单个节点”,仅感知到一个 “超大容量存储池”;支持动态扩展(新增节点即可扩容)、数据分布式存储(避免单点故障);
常见类型:GlusterFS(开源,适合中小规模集群)、CephFS(开源,兼容对象存储、块存储,企业级常用)、GPFS(IBM 商用,高性能集群场景)。
④ 其他常见文件系统
除上述三类外,还有适配特定需求的文件系统,部分场景下也可能与 NAS 或存储设备关联:
日志型文件系统:如 Btrfs(可用于 NAS),支持 “快照备份”“数据校验”,能快速恢复误删文件、检测数据损坏,适合对数据安全性要求高的场景(如企业文档备份);
对象存储文件系统:如 S3FS(兼容 Amazon S3 协议),将对象存储(如阿里云 OSS、腾讯云 COS)模拟为本地文件系统,适合需要对接云存储的场景(如 NAS 与云存储协同备份);
移动设备文件系统:如 exFAT,解决 FAT32 单文件 4GB 限制(支持单文件最大 16EB),兼容 Windows、macOS、手机,适合移动硬盘、相机存储卡(NAS 若需读取外接移动设备,需支持该格式)。
补充:文件的存储结构
① 物理存储结构
// 文件数据在存储设备(如硬盘的磁道)上的真实存储布局
连续存储:文件的所有数据块,连续存放在存储设备的一块连续完整的物理空间,文件系统通过记录‘起始地址’和‘总长度’来定位整个文件
离散存储:文件的数据拆成多个独立的数据块,分散存在存储设备的空闲区域。
链接分配:文件数据块分散存储,每个数据块通过 “指针” 指向后续块(形成链式结构),文件系统只需记录 “第一个块的地址”。
索引分配:文件数据块分散存储,但文件系统为每个文件创建 “索引块”,集中记录所有数据块的物理地址
② 逻辑存储结构
// 文件数据在 “用户或应用程序眼中” 的组织形式。本质是数据的逻辑排列,和磁盘上的物理位置无关。
流式结构:文件数据就是 “一长串字节”,没有固定格式。程序读写时,只能从开头到结尾按顺序处理;程序也可通过 “偏移量” 随机访问,只是没有天然数据单元。
记录式结构:通过 “固定格式 + 元信息”,程序能通过计算偏移量或索引直接访问目标记录
按偏移量计算:因记录格式固定(长度统一),可直接通过 “起始地址 +(N-1)× 单条记录长度” 定位第 N 条记录,无需顺序遍历;
按关键字索引:若文件包含 “关键字段”(如数据库表的主键),可通过建立索引表(记录 “关键字 - 记录位置” 映射),快速找到目标记录(类似字典通过部首查字)。
(3)SAN 存储
SAN 基于块级别的共享, “块” 是存储的最小数据单元。
SAN 的核心逻辑是存储端只负责 “提供裸块空间”,不提前构建文件系统—— 所有与 “文件管理” 相关的操作(分区、格式化、创建文件系统)都交给客户端完成。
工作流程:存储端共享裸块设备,客户端连接存储后会映射出 sdx 形式的虚拟硬盘,客户端对该虚拟硬盘进行分区、格式化后即可挂载使用。以最常见的 IP SAN(iSCSI 协议)为例:
(1)存储端:配置并共享 “裸块设备”
① 创建块存储资源。存储端先将本地物理硬盘划分为 “逻辑块设备”,这部分空间是 “未格式化、无文件系统” 的裸块;
② 配置共享规则。通过 SAN 管理工具(如 Openfiler WebUI),为裸块设备绑定唯一标识(IQN,如 iqn.2024-10.com.example:san-disk1),并指定访问协议(IP SAN 用 iSCSI、FC SAN 用 FC 协议);
③ 开放网络访问。设置允许访问的客户端范围(如限定客户端 IP 为 192.168.1.0/24),并配置认证(如 CHAP 用户名密码),防止未授权设备接入。
(2)客户端:发现并映射 “虚拟硬盘”
客户端需通过对应协议,将存储端的裸块设备 “映射为本地可见的虚拟硬盘”:
① 安装协议客户端工具。IP SAN 需安装 iSCSI 客户端(如 Linux 装 iscsi-initiator-utils、Windows 启用 “iSCSI 发起程序”);
② 发现存储端共享块。客户端通过协议发送 “发现请求”(如 Linux 执行 iscsiadm -m discovery -t st -p 192.168.1.100:3260),找到存储端的 IQN 对应的裸块设备;
③ 建立连接并映射。客户端通过认证后(输入 CHAP 用户名密码),与存储端建立稳定连接,此时裸块设备会被映射为客户端的 “虚拟硬盘”(如 Linux 下的 /dev/sdb、Windows 磁盘管理中的 “未分配磁盘”)。
(3)客户端:分区、格式化并挂载使用
映射后的虚拟硬盘与客户端本地硬盘完全等效,需按 “本地硬盘” 配置后才能存储数据:
① 分区。客户端对虚拟硬盘进行分区,划分出 “可使用的逻辑分区”(如 /dev/sdb1);
② 格式化。为分区创建文件系统;
③ 挂载使用。将格式化后的分区挂载到客户端的目录,之后客户端即可在该目录 / 盘符下读写文件,所有数据实际存储在 SAN 存储端的裸块设备中。
类型:IP SAN、FC SAN
特点:
- IP SAN 基于 TCP/IP 网络,使用 iSCSI 协议,成本低、部署灵活;
- FC SAN 基于光纤通道网络,使用光纤通道协议(FC Protocol),需专用光纤交换机和 HBA 卡,速度快(通常 16Gbps 以上)、延迟低,适合高性能场景(如数据库、虚拟化);
维度 | IP SAN(iSCSI) | FC SAN(光纤通道) |
---|---|---|
底层网络 | 通用以太网(复用现有) | 专用光纤通道网络(需新建) |
核心硬件 | 普通网卡、以太网交换机 | FC HBA 卡、FC 交换机、光纤线缆 |
成本 | 低(复用现有设备,硬件便宜) | 高(专用硬件贵,部署成本高) |
- 块级共享意味着客户端可直接对存储进行分区、格式化,相当于本地硬盘的扩展。
SAN和NAS的区别:
SAN 的路径:客户端→ 协议(iSCSI/FC)→ SAN 存储的裸块设备 → 后端硬盘。客户端格式化虚拟硬盘后,读写数据时只需通过 iSCSI/FC 协议,直接向 SAN 存储发送 “块级指令”(如 “写数据到第 100-102 号块”),SAN 收到指令后直接操作硬盘块 ——没有任何 “文件系统解析” 的中间步骤,数据从客户端到硬盘的 “跳转次数最少”。
NAS 的路径:客户端 → 协议(NFS/CIFS)→ NAS 设备的文件系统 → NAS 后端硬盘。客户端发送的是 “文件级指令”(如 “创建 test.txt”),NAS 必须先通过自身的文件系统解析 “这个文件对应哪些块”,再操作硬盘 —— 多了 “NAS 文件系统解析” 这一步,会产生毫秒级的延迟(对高频读写场景影响显著)。
SAN 是 “客户端 - 存储端” 的块级直连 ,整个数据读写过程几乎没有 “多余环节”,而 NAS 因多了 “文件系统中间层”,会产生额外损耗。
维度 | NAS | SAN |
共享级别 | 文件级(基于文件系统) | 块级(裸设备) |
协议 | NFS、CIFS/SMB | iSCSI(IP SAN)、FC(FC SAN) |
网络依赖 | 以太网 | 以太网(IP SAN)/ 光纤通道(FC SAN) |
适用场景 | 文件共享(文档、媒体) | 高性能存储(数据库、虚拟化) |
客户端访问方式 | 网络路径(如/mnt/nfs) | 本地磁盘(如/dev/sdb) |
二、linux系统配置nfs存储
1、环境描述
- 192.168.140.10 业务服务器
- 192.168.140.11 nfs存储
2、nfs存储端配置
(1)提供存储空间
[root@nas ~] df -hT
# Filesystem Type Size Used Avail Use% Mounted on
# /dev/sdb xfs 20G 33M 20G 1% /data
(2)安装存储端软件
[root@nas ~] yum install -y nfs-utils rpcbind
(3)编辑exports文件,共享存储
配置文件语法:文件系统 客户端地址(权限)
- 单个地址192.168.1.1
- 网段 192.168.1.0/24
- 所有地址 *
权限:
- 只读 ro
- 读写 rw
[root@nas ~] cat /etc/exports
/data 192.168.140.10(rw)
[root@nas ~] chmod o+w /data/
- /etc/exports中的 rw 权限是NFS 服务层面的 “访问控制”允许客户端发起写请求;
- 服务端共享目录的写权限(o+w,对映射用户开放)确保写请求能在服务端文件系统中执行。
(4)启动nfs服务
[root@nas ~] systemctl enable --now nfs-server
[root@nas ~] systemctl enable nfs-server
3、业务服务器挂载使用存储
(1)安装nfs-utils软件
# 下载,让系统识别nfs文件系统
[root@yewu ~] yum install -y nfs-utils
(2)编辑fstab,挂载存储
# 创建挂载点
[root@yewu ~] mkdir -p /db/log
# 挂载
# nfs服务器地址:nfs共享文件系统 挂载点 nfs defaults 0 0
[root@yewu ~]# tail -n 1 /etc/fstab
192.168.140.11:/data /db/log nfs defaults 0 0[root@yewu ~] mount -a
[root@yewu ~] df -hT | grep nfs
# 192.168.140.11:/data nfs4 20G 33M 20G 1% /db/log
(3)测试数据读写
[root@yewu ~] touch /db/log/{1..10}
[root@yewu ~] ls /db/log/
# 1 10 2 3 4 5 6 7 8 9
三、配置 SAN 存储(基于 iSCSI)
1、前提:
① 创建 Openfiler 虚拟机并安装系统
- 安装时需确保虚拟机网络配置正确(建议使用桥接或仅主机模式,保证与业务服务器互通)
- 分配足够的磁盘空间用于创建 RAID 设备(如添加多块虚拟磁盘作为 RAID 成员)。
② 访问 openfiler webUI
- 浏览器输入https://Openfiler_IP:446,用用户名openfiler、密码password登录
2、存储设备配置
(1)创建 RAID 设备
- 进入Block Devices,查看识别到的物理磁盘(如/dev/sdb、/dev/sdc)。
- 选择未分区的磁盘,点击磁盘名进入配置页。
- 在Partition Type中选择 RAID array member,点击Create。
- 进入Software RAID标签页:
- 创建新RAID
- 填写 RAID 名称(如md0),选择 RAID 级别(如 RAID1/5,根据磁盘数量选择)
- 勾选需要加入 RAID 的物理磁盘,点击Create
- 等待 RAID 同步完成(状态变为active)
(2)创建卷组(VG)
- 进入Volume Groups标签页。
- 创建卷组
- Volume Group Name:填写卷组名(如vg_iscsi)
- Physical Volumes:勾选已激活的物理磁盘或 RAID 设备(如/dev/md0或/dev/sdb1)
- 点击Add volume group,卷组创建完成(状态为active)
(3)创建逻辑卷(LV)
- 进入Logical Volumes标签页,选择刚创建的卷组(如vg_iscsi)。
- 创建逻辑卷:
- Logical Volume Name:填写逻辑卷名(如lv_iscsi01)
- Size:设置逻辑卷大小(如10G,不超过卷组总容量)
- Volume Type:选择block(块设备,用于 iSCSI)
- 点击Create,逻辑卷创建完成(会显示为/dev/vg_iscsi/lv_iscsi01)
3、iSCSI 服务与共享配置
(1)开启 iSCSI Target服务
- 进入Services标签页。
- 找到iSCSI Target和iSCSI Initiator服务,点击右侧Start启动服务,并勾选Enable设置开机自启(确保服务状态为Running)。
iSCSI Target:是 “存储端服务”,作用是将 Openfiler 的逻辑卷(块设备)共享出去,作为 “iSCSI 目标设备” 供客户端连接。没有它,客户端无法发现或访问共享的存储资源,是必须开启的核心服务。
iSCSI Initiator:是 “客户端服务”,作用是让本地设备(此处指 Openfiler 服务器本身)作为客户端去连接其他设备的 iSCSI Target(比如连接另一台存储服务器的共享)。
(2)配置 iSCSI Target服务
① 创建 iSCSI Target
进入Volumes → Targets标签页,点击Add创建 Target
- Target Name:按规范填写(如iqn.2024-10.com.openfiler:target01)
- IQN 名称格式: iqn.yyyy-mm. 反域名:自定义名称,其他默认,点击Create。
② 绑定逻辑卷到 Target
在刚创建的 Target 下,找到LUN Mapping标签,点击Add
选择创建的逻辑卷(如/dev/vg_iscsi/lv_iscsi01)
点击Map,完成 LUN(逻辑单元号)映射。
③ 配置客户端访问权限
进入Network ACL标签
填写客户端的 iSCSI initiator 名称(客户端需先安装iscsi-initiator-utils,通过cat /etc/iscsi/initiatorname.iscsi获取),或留空允许所有客户端(测试用)
在 Target 对应的Access列选择Allow
点击Update。
④ 设置CHAP认证
4、网络连通性配置
- 存储端:通过systemd-networkd或网络配置工具,设置静态 IP(如 192.168.140.11),开放 iSCSI 端口(3260),确保与业务服务器网络互通;
// 配置和管理 SAN 相关的网络环境,确保存储设备(如 iSCSI Target)与业务服务器(iSCSI Initiator)之间的网络连通性
- 客户端:配置静态 IP(如 192.168.140.10),安装
iscsi-initiator-utils
,确保能 ping 通存储端 IP。
(1) 安装客户端软件
[root@master_haproxy ~] yum install -y iscsi-initiator-utils
(2)编辑 iscsid.conf 配置文件,指定认证的用户
[root@master_haproxy ~] vim /etc/iscsi/iscsid.confnode.session.auth.authmethod = CHAPnode.session.auth.username = martinnode.session.auth.password = redhat
(3)探索存储
[root@master_haproxy ~] iscsiadm -m discovery -t st -p 192.168.140.128:3260# iscsiadm: No portals found
首次探求存储时,存储端会生成拒绝所有客户端的文件,在存储端 /etc/initiators.deny 文件中删除拒绝所有条目,重新探索
[root@master_haproxy ~]# iscsiadm -m discovery -t st -p 192.168.140.128:3260# -p 存储的ip192.168.140.128:3260,1 iqn.2024-06.com.linux:jf3-jg7-hw-db
(4)连接使用存储
[root@master_haproxy ~] iscsiadm -m node -T iqn.2024-06.com.linux:jf3-jg7-hw-db -p 192.168.140.128:3260 -l# Logging in to [iface: default, target: iqn.2024-06.com.linux:jf3-jg7-hw-db, portal: 192.168.140.128,3260] (multiple)# Login to [iface: default, target: iqn.2024-06.com.linux:jf3-jg7-hw-db, portal: 192.168.140.128,3260] successful.[root@master_haproxy ~] lsblk# NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT# sda 8:0 0 20G 0 disk# ├─sda1 8:1 0 500M 0 part /boot# └─sda2 8:2 0 19.5G 0 part# ├─centos-root 253:0 0 17.5G 0 lvm /# └─centos-swap 253:1 0 2G 0 lvm [SWAP]# sdb 8:16 0 9.5G 0 disk# sr0 11:0 1 9.5G 0 rommkfs -t xfs /dev/sdb
mkdir /test1[root@master_haproxy ~] blkid /dev/sdb# /dev/sdb: UUID="d0765ec9-e93f-4998-ac05-27377e491409" TYPE="xfs"[root@master_haproxy ~] vim /etc/fstabUUID="d0765ec9-e93f-4998-ac05-27377e491409" /test1 xfs defaults,_netdev 0 0[root@master_haproxy ~] mount -a[root@master_haproxy ~] df -hT# /dev/sdb xfs 9.5G 33M 9.5G 1% /test1[root@master_haproxy ~]# touch /test1/{1..10}[root@master_haproxy ~]# ls /test1/1 10 2 3 4 5 6 7 8 9
补充 fstab 挂载参数说明:_netdev参数用于确保网络启动后再挂载存储,避免开机时因网络未就绪导致挂载失败,对网络存储(如 iSCSI、NFS)是必需参数。
windows连接的话