Linux底层存储路由配置

文章目录

前置概念回顾

DM在内核块层拦截bio块IO请求,查询映射表,转发到后端物理块设备。

查看DM设备基础命令:

bash 复制代码
lsblk
dmsetup ls
dmsetup table

场景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路由链路
相关推荐
天远API6 分钟前
零信任架构实战:基于天远运营商三要素详版V即时版构建自动化消费电子大促电商平台高价值权益秒杀与优惠券防羊毛高并发实名核验网关
运维·人工智能·架构·自动化
Android系统攻城狮31 分钟前
Linux FFmpeg深度解析之avcodec_default_get_encode_buffer调用流程与实战(二十八)
linux·运维·服务器·ffmpeg·车载音视频·ffmpeg音视频
程序员初一34 分钟前
8080 打不开的四层定位:监听地址、ufw、DOCKER 链、安全组
linux·ssh
程序开发阿元35 分钟前
swappiness 60 和 10 差在哪:一台 1C1G 的三轮对比
linux·ssh
无足鸟ICT1 小时前
【RHCA+】mpstat命令(监控CPU)
linux
乐维_lwops1 小时前
案例解读:大型综合性科创产业园运维监控落地实践
运维·网络·人工智能·安全·it监控·国产运维智能体
GeW2 小时前
新质生产力Linux和数据库为啥这么关键
linux
番茄啊3 小时前
linux 开启xftp连接
linux·运维·服务器
CodeYp20193 小时前
第1讲:Linux 基础指令
linux·指令
m0_715674433 小时前
政务泛监测体系能力排行:AI 重塑监测边界,治理的颗粒度革命
大数据·网络·人工智能·安全·网络安全·政务