Linux底层存储路由配

文章目录

  • [场景2:DM-Multipath 多路径存储路由(SAN存储,重点)](#场景2:DM-Multipath 多路径存储路由(SAN存储,重点))

  • 存储路由常用排查命令汇总

    场景1:LVM(dm-linear,最常用本地存储路由)

    LVM底层就是dm-linear,把多个物理磁盘PV组织成VG卷组,再划分LV逻辑卷(DM虚拟设备 /dev/mapper/vgname-lvname)。
    IO路由:应用→文件系统→LV(dm) →映射到多个PV磁盘。

    步骤

    1. 准备裸磁盘,例如 /dev/sdb /dev/sdc(无分区、无文件系统)
    bash 复制代码
    # 创建PV(物理卷)
    pvcreate /dev/sdb
    pvcreate /dev/sdc
    
    # 创建VG卷组,把2块盘加入
    vgcreate vg_data /dev/sdb /dev/sdc
    
    # 创建LV逻辑卷(例如20G)
    lvcreate -L 20G -n lv_data vg_data

生成虚拟块设备:/dev/mapper/vg_data-lv_data

  1. 查看DM底层存储路由映射表
bash 复制代码
dmsetup table vg_data-lv_data

输出示例:

复制代码
0 41943040 linear 8:16 0

含义:从逻辑块0开始,总41943040块,线性映射到设备主从号8:16(/dev/sdb),偏移0。如果跨多块盘,会有多条映射条目。

  1. 格式化+挂载使用
bash 复制代码
mkfs.ext4 /dev/mapper/vg_data-lv_data
mkdir /data
mount /dev/mapper/vg_data-lv_data /data
  1. 开机自动挂载(写入/etc/fstab)

    /dev/mapper/vg_data-lv_data /data ext4 defaults 0 0

扩容场景:新增磁盘做成PV,vgextend加到VG,lvextend扩容LV,DM会自动更新存储路由映射表。

场景2:DM-Multipath 多路径存储路由(SAN存储,重点)

适用:服务器HBA卡连SAN,同一个存储LUN,多条光纤链路,系统识别出多个sd设备(/dev/sdb /dev/sdc),实际是同一个LUN 。

multipath内核模块dm-multipath:多条物理路径合并为1个虚拟设备 /dev/mapper/mpathX,配置路径调度策略(轮询/主备)实现存储路由负载均衡、链路故障自动切换。

完整部署(Ubuntu/CentOS通用)

1. 安装multipath工具

bash 复制代码
# Ubuntu
apt install multipath-tools -y
# CentOS/RHEL
dnf install device-mapper-multipath -y

2. 生成multipath主配置文件

bash 复制代码
# CentOS
mpathconf --enable
# Ubuntu默认自带 /etc/multipath.conf,如不存在手动新建

编辑配置文件 /etc/multipath.conf

conf 复制代码
defaults {
    user_friendly_names yes       # 使用mpathX友好命名
    path_selector "round-robin 0" # 路由策略:round-robin轮询;failover主备
    path_grouping_policy multibus
    failback immediate
    no_path_retry fail
}

# 识别你的存储厂商LUN,可添加blacklist屏蔽本地磁盘,防止本地盘被误纳入multipath
blacklist {
    devnode "^(sr|hd|vd|nvme)"
}
  • path_selector 存储路由策略:
    • round-robin 0:轮询,IO请求轮流分发所有可用链路,存储负载均衡;
    • failover:主备,只用优先级最高主路径,主链路断,自动切备用链路(数据库SAN常用)。

3. 加载内核模块,启动服务

bash 复制代码
modprobe dm-multipath
modprobe dm-round-robin
systemctl enable --now multipathd

4. 扫描存储LUN,生成多路径虚拟设备

bash 复制代码
multipath -v2

5. 查看存储路由信息

bash 复制代码
# 查看多路径拓扑(重点,查看每条路径状态)
multipath -ll

# 查看dm-multipath底层映射表
dmsetup table mpath0

输出可以看到:虚拟设备mpath0,后端多条路径,IO按照path_selector策略路由分发。

之后,使用/dev/mapper/mpath0作为存储设备 ,不要直接使用底层/dev/sdb、/dev/sdc。

可以在mpath之上继续做LVM:pvcreate /dev/mapper/mpath0,叠加多层存储路由。

场景3:纯dmsetup手动自定义DM映射(原生底层,不推荐生产,适合学习)

直接用dmsetup手动编写存储路由映射表,不依赖LVM工具。

示例:把/dev/sdb前10G映射为虚拟设备myvol

bash 复制代码
# 创建映射:起始块0,块数量20971520,linear映射 /dev/sdb,偏移0
echo "0 20971520 linear /dev/sdb 0" | dmsetup create myvol

# 查看路由表
dmsetup table myvol

# 删除映射
dmsetup remove myvol

这种方式配置不会持久化,重启失效;生产用LVM/multipath,自动管理dm映射。

存储路由常用排查命令汇总

bash 复制代码
lsblk                         # 查看块设备拓扑,识别dm虚拟设备
dmsetup ls                    # 列出所有dm设备
dmsetup table [设备名]        # 查看底层IO映射路由(最重要)
multipath -ll                 # 查看SAN多路径路由状态
cat /proc/dmstats             # DM IO统计
iostat /dev/mapper/xxx        # 查看虚拟设备IO负载
blktrace                      # 抓底层bio请求,追踪IO路由链路
相关推荐
是真的小外套1 小时前
第9章:网络层安全协议 IPSec 学习笔记
网络·网络协议·tcp/ip
云智慧AIOps社区2 小时前
MSP 的增长瓶颈不在客户,在交付模式:人效与规模如何兼得?
运维·人工智能·自动化运维
Linux系统运维工程师_郭主任2 小时前
运维人还在被拒offer?现在能考的,只有 RHCE 10.0。
linux
自养Agent2 小时前
MCP Server Boundary Audit Report
linux·服务器·人工智能·windows·大模型·llm
HAHAXX82 小时前
淘宝RPA定时拉取交易数据实战:从人工录单报错到自动化对账全流程复盘
运维·自动化·rpa
中屹指纹浏览器svip3 小时前
静态 IP和动态 IP,搭配指纹浏览器该怎么选?
网络·网络协议·tcp/ip·中屹指纹浏览器
ITxiaobing20233 小时前
选型不踩坑:IPinfo 之外,IP 地址定位服务还有哪些可选项
网络·网络协议·tcp/ip
Coisinier3 小时前
docker命令管理镜像及容器
linux·运维·nginx·docker·容器·操作系统
A心有千千结4 小时前
通过 SSH 反向代理让服务器借用本机网络访问 GitHub 的最佳实践
linux·服务器·网络·git·ssh·github