简介:面向电动汽车与商用车电子控制制动系统(EBS)的专题讲解PPT,适合新能源整车、底盘及制动系统工程师和院校学生系统化学习。内容从EBS系统控制原理与制动特性切入,依次讲解ECU、脚阀模块FBM、电子压力控制模块EPM、轮速传感器WSS与蹄片磨损传感器LWS等核心部件,并覆盖电子控制与气压回路并行安装、EPM接收CAN请求后的闭环压力调节、电控失效时后备气压制动模式,以及根据踏板开度和载荷分配前后轴制动力矩的逻辑。资源还展开EBS功能与控制逻辑、组件架构、故障诊断,同时配有4x2城市客车不带ESP的EBS气路布置图、电气原理图和CAN通讯架构图,有助于把部件功能、整车气路电路、控制逻辑和故障排查思路串联成完整知识链。文件为单个PPT演示文稿,共1份pptx,压缩包约4.96MB,已有1451人学习,适合内部分享、技术培训或日常自学。
1. EBS 到底是什么:先厘清块存储的边界
EBS 全称 Elastic Block Store,是 AWS 提供的一种块存储服务,常被翻译成“弹性块存储”。它不能独立存在,必须挂载到同一可用区里的 EC2 实例上,实例把它当成一块硬盘格式化、分区、挂载后使用。很多第一次接触这套体系的人会拿本地磁盘的直觉来套 EBS,结果一测延迟就懵:本地 NVMe 可能只有几十微秒,EBS 哪怕是高性能卷也明显高一个数量级。原因不在于“云盘更慢”,而在于它本质上是分布式存储对外暴露的客户端视图。
做迁移方案、写培训课件、评审架构时,如果只停留在“EBS 就是一块云硬盘”,后面所有选型和排错都会走偏。下面按照 EBS 底层机制、卷类型参数、核心功能、性能监控、进阶运维五个层面展开,给定可执行的 AWS CLI 指令和 Linux 侧的落地操作,适合使用 AWS 的运维、SRE 和架构从业者对照复现。
2. EBS 工作原理拆解:控制面、数据面与挂载后的 I/O 路径
2.1 EBS 和 S3、EFS 的本质区别
EBS 的第一个关键词是“块”。在 AWS 的存储体系里,最容易被搞混的是 S3、EFS、EBS 三类存储。EBS 以块设备的形式出现在 EC2 实例内,由实例操作系统把它格式化为 xfs、ext4 这类文件系统;S3 是对象存储,没有挂载点,应用通过 HTTPS 接口读写 object;EFS 是文件存储,可以同时挂到多台 EC2 实例上,但它的语义、延迟和吞吐模型与本地块设备完全不同。
| 维度 | EBS | EFS | S3 |
|---|---|---|---|
| 访问方式 | 块设备接口 | 文件系统挂载 | HTTPS 对象接口 |
| 同时挂载实例数 | 默认 1 台 | 多台 | 不直接挂载 |
| 数据冗余范围 | 同一可用区内多副本 | 同区域多可用区 | 跨多可用区 |
| 典型场景 | 系统盘、数据库数据文件 | 共享文件、无状态应用 | 静态资源、备份归档 |
从运维角度看,对象存储和文件存储基本不需要关心格式化,EBS 则需要自己管理文件系统;但当应用对随机读写和延迟敏感时,块存储仍然是最合适的选择。常见的选型建议是:数据库数据文件用 EBS,大量静态资源走 S3,需要 POSIX 语义且被多台实例共享的文件用 EFS。注意 EBS 的冗余范围只在单个可用区,可用区整体故障时只靠 EBS 副本无法恢复,跨可用区的高可用方案必须落到快照、AMI 或存储复制上。
2.2 一个 EBS 卷的生命周期:控制面如何操作
卷的创建、挂载、卸载、删除都由 AWS 控制面 API 驱动。调用 API 后,最终在 Nitro 节点上分配逻辑存储空间,再以 NVMe 协议把设备呈现给实例。做过云主机迁移的人会发现设备名不是熟悉的sda而是/dev/nvme0n1,这不是盘符命名习惯问题,而是 EBS 在 Nitro 实例上的标准呈现方式。
aws ec2 create-volume \ --availability-zone us-east-1a \ --size 100 \ --volume-type gp3创建卷时必须指定可用区,因为 EBS 卷和 EC2 实例的可用区必须一致。--size单位是 GiB,--volume-type指定卷类型。命令执行成功后输出 VolumeId。随后把卷挂到实例上:
aws ec2 attach-volume \ --volume-id vol-0a1b2c3d4e5f67890 \ --instance-id i-0abc123def456ghi7 \ --device /dev/sdf--device只是逻辑设备名,Nitro 实例内部最终会以/dev/nvmeXn1的形式呈现,并自动分配一个 NVMe 控制器编号。不要根据--device盲猜操作系统里的设备名,正确做法是挂载后用lsblk按容量和 VolumeId 对应关系确认。
2.3 数据写入路径与同步复制机制
一次写入请求到 EBS 卷,路径大致是:应用调用write()进入内核,文件系统把操作交给 NVMe 驱动,Nitro 控制器封装命令并转发到该卷所在的存储节点,存储节点在可用区内写入多个副本,全部落盘后才返回 I/O 完成。这正是“写入被确认后数据是持久”的底层保证,也是 EBS 延迟高于本地盘的原因。
lsblk sudo file -s /dev/nvme1n1 sudo mkfs -t xfs /dev/nvme1n1 sudo mkdir -p /data sudo mount /dev/nvme1n1 /data echo '/dev/nvme1n1 /data xfs defaults,noatime 0 0' | sudo tee -a /etc/fstabfile -s查看设备上是否已有文件系统,防止误格式化有数据的卷;mkfs -t xfs把空卷格式化为 XFS;挂载后写入/etc/fstab时加上noatime,可以减少读操作带来的元数据更新,对 EBS 这种按 IOPS 计费或配额控制的存储有实际收益。建议执行完执行一次sudo mount -a验证 fstab 配置,否则重启后可能因为挂载项错误进入维护模式。
2.4 延迟由哪几段组成
EBS 延迟不是单一指标,它由“实例到存储节点的网络传输”和“多副本写确认”两部分构成。在 AZ 内部,这个传输延迟通常很低,但相对本地 NVMe 依然可观。io1/io2 这类预配置 IOPS 卷在设计上针对延迟做了优化,数据库这类对单次读写延迟敏感的负载建议直接用 io2。另一个容易混淆的是 EC2 的 instance store,它是宿主机本地盘,延迟比 EBS 低一个数量级,但实例停止或底层宿主机故障时数据会丢失,只能当作临时存储使用,不能存放需要持久化的数据。
3. EBS 类型与性能参数:不按负载选型就是在烧钱
3.1 六种卷类型的用途边界
AWS 提供多个 EBS 卷类型,SSD 面向 IOPS 敏感场景,HDD 面向吞吐优先场景。新环境里最常用的是 gp3,它可以独立调整 IOPS 和吞吐而不需要换卷;关键数据库一般用 io2;日志、大数据、冷数据则根据访问频率选择 st1 或 sc1。
| 类型 | 介质 | 容量范围 | 基准性能 | 适用负载 |
|---|---|---|---|---|
| gp3 | SSD | 1 GiB ~ 16 TiB | 3000 IOPS / 125 MiB/s,可单独提升 | 大多数生产业务、系统盘 |
| gp2 | SSD | 1 GiB ~ 16 TiB | IOPS 随容量增长,有突发桶 | 旧环境兼容、低幅波动负载 |
| io1 | SSD | 4 GiB ~ 16 TiB | 可预配置高 IOPS | 传统高并发数据库 |
| io2 | SSD | 4 GiB ~ 16 TiB | 更高 IOPS、低延迟、高持久性 | 关键 OLTP 数据库 |
| st1 | HDD | 125 GiB ~ 16 TiB | 高吞吐、低 IOPS | 日志、离线分析、顺序读 |
| sc1 | HDD | 125 GiB ~ 16 TiB | 最低成本 | 冷数据归档、低频访问 |
选择时注意一个边界:HDD 类型只能作为数据卷,不能作为实例启动卷;启动卷必须用 SSD 类型。gp2 和 gp3 都适合做系统盘,但新账号里强烈建议优先 gp3,同样容量下 gp3 的基线性能和可调参数更灵活。
3.2 IOPS、吞吐量与块大小的关系
IOPS 和吞吐是同一枚硬币的两面。单次读写请求的块大小如果是 4 KiB,那么 3000 IOPS 大约对应 12 MiB/s;如果块大小是 128 KiB,同样 3000 IOPS 能到 375 MiB/s。但 EBS 对吞吐有明确的单卷上限,所以调参前必须先搞清楚应用的块大小特征。
比如 gp3 基线是 3000 IOPS 和 125 MiB/s 吞吐。如果应用以小块随机写为主,瓶颈大概率在 IOPS;如果应用是顺序大块读,比如大数据分析,那 IOPS 可能远用不到,先把吞吐提上去。很多线上事故是“IOPS 报警后一顿加 IOPS,结果发现吞吐早就撞了墙”,这就是没有结合块大小看指标。
3.3 用 AWS CLI 调整已挂载卷的 IOPS 与吞吐
gp3 最方便的地方是可以随时调整 IOPS 和吞吐,不必创建新卷。执行修改时卷可以保持挂载状态,业务不需要停机:
aws ec2 modify-volume \ --volume-type gp3 \ --volume-id vol-0a1b2c3d4e5f67890 \ --iops 10000 \ --throughput 500 \ --region us-east-1 aws ec2 describe-volumes-modifications \ --volume-id vol-0a1b2c3d4e5f67890--iops单位是每秒读写次数,--throughput单位是 MiB/s,两个参数可以单独调整,也可以同时调整。describe-volumes-modifications用于查看修改进度,输出里的 ModificationState 会依次出现modifying、optimizing、completed三种状态。建议等到completed再做压测,因为中间态可能混合新旧参数。如果返回 Failed,通常是目标值超过账号在该区域的配额,去 Service Quotas 控制台确认 IOPS 上限。
3.4 什么时候该从 gp3 升级到 io2
gp3 能满足大多数负载,但它不是低延迟专用盘。如果业务对写入延迟稳定性和 P99 延迟有明确要求,比如核心订单库、支付系统,直接考虑 io2。io2 在多副本持久性设计上比 gp3 更好,也支持后续要讲的 Multi-Attach。判断方式很简单:CloudWatch 里观察 VolumeAverageWriteLatency,如果 gp3 调高 IOPS 后延迟没有明显改善,或者业务压测报告里单次事务延迟超标,就值得切换。切换流程建议做成“创建 io2 卷 → 同步数据 → 切换挂载”,而不是直接对在线卷做modify-volume跨类型变更,避免在关键路径上引入不可控的中间态。
4. EBS 功能详解:快照、加密、扩容量与多挂载
4.1 快照是增量的,不是每次全量复制
第一次对某个卷创建快照时,EBS 会复制整卷数据;后续快照只记录自上一次快照以来发生变化的数据块,所以频繁保留快照的存储成本和时长不是线性增长。删除某个中间快照时,EBS 会把需要的数据块合并到相邻快照,不会让目标快照失效。这是 EBS 快照和普通虚机磁盘拷贝的一个关键差异。
创建一致性快照时,最好先冻结文件系统,避免数据库文件处于“写了一半”的状态:
sudo fsfreeze -f /data aws ec2 create-snapshot \ --volume-id vol-0a1b2c3d4e5f67890 \ --description "cons-$(date +%F-%H%M%S)" sudo fsfreeze -u /data aws ec2 describe-snapshots \ --owner-ids self \ --query 'Snapshots[?VolumeId==`vol-0a1b2c3d4e5f67890`].[SnapshotId,State]'fsfreeze -f会暂停该文件系统上的写请求,创建命令完成后再用-u解冻。create-snapshot是异步操作,返回时快照状态通常还是pending,要等describe-snapshots里的 State 变为completed才能用于恢复。如果数据库本身有事务日志,也可以不做文件系统冻结,直接由数据库侧保证崩溃一致性,但把文件系统冻结后再打快照是最稳妥的通用做法,对 MySQL、PostgreSQL 都适用。
4.2 加密与账号级默认加密
EBS 支持使用 KMS 密钥加密新卷和快照。强烈建议在账号级别打开默认加密,这样后续创建的所有卷都会自动加密,不会出现“开发环境忘了勾选加密”这种问题。
aws ec2 get-ebs-encryption-by-default --region us-east-1 aws ec2 enable-ebs-encryption-by-default --region us-east-1第一条命令返回账号当前是否启用默认加密,第二条开启该功能。开启后,新建卷默认使用 AWS 托管的aws/ebs密钥,也可以预先指定自定义 KMS Key。需要注意:默认加密只对开启之后创建的卷生效,已经存在的未加密卷不会被自动加密。要对存量卷加密,常见做法是“快照 → 复制为加密快照 → 从加密快照新建卷”,然后把业务切到新卷上。这个流程对在线业务的影响取决于切换方式,建议在变更窗口内操作。
4.3 在线扩容:卷、分区、文件系统三层分别处理
扩容最容易踩的坑是只改 AWS 侧卷大小,不管实例内的分区和文件系统。AWS API 把卷扩容后,操作系统还需要依次扩展分区和文件系统才能使用新增空间。
aws ec2 modify-volume \ --volume-id vol-0a1b2c3d4e5f67890 \ --size 200 lsblk sudo growpart /dev/nvme1n1 1 sudo xfs_growfs /data--size单位是 GiB;卷扩容的 Duration 视卷大小和底层负载从几分钟到几小时不等,先执行aws ec2 describe-volumes-modifications --volume-id vol-xxx确认状态为completed。实例内执行growpart扩展分区,再执行xfs_growfs扩展 XFS 文件系统。如果是 ext4 文件系统,最后一步改成sudo resize2fs /dev/nvme1n1p1。如果整块卷没有分区表,直接创建了文件系统,就不需要growpart,执行sudo xfs_growfs -d /data即可。扩容操作可以在线执行,但 RHEL 系镜像可能没装 growpart,需要先安装 cloud-utils-growpart。
4.4 Multi-Attach 的边界条件
io1 和 io2 卷支持 Multi-Attach,允许同一可用区内最多 16 台 EC2 实例同时挂载同一个卷。这个功能并不适合直接拿 ext4 或 xfs 来做共享盘,普通文件系统不支持多机并发写,强行多挂载会立刻造成元数据损坏。实际可用的场景是配合 Oracle RAC 这类集群文件系统,或者使用 GFS2、OCFS2 共享文件系统。日常业务如果只是想让多台实例读写同一份数据,应该优先考虑 EFS,而不是 Multi-Attach。
5. EBS 性能监控与排查:不要让监控图标和业务感受脱节
5.1 先用 CloudWatch 拿到真实基线
排查 EBS 性能问题,第一步不是上实例跑命令,而是先看 CloudWatch 指标。EBS 向 CloudWatch 上报的指标覆盖了读写字节数、读写操作次数、队列深度和空闲时间等。用 AWS CLI 查询指定卷的写操作次数:
aws cloudwatch get-metric-statistics \ --namespace AWS/EBS \ --metric-name VolumeWriteOps \ --dimensions Name=VolumeId,Value=vol-0a1b2c3d4e5f67890 \ --start-time "$(date -u -d '1 hour ago' +%Y-%m-%dT%H:%M:%SZ)" \ --end-time "$(date -u +%Y-%m-%dT%H:%M:%SZ)" \ --period 300 \ --statistics Sum--period 300表示按 5 分钟聚合,--statistics Sum返回这段时间内的写操作总量,除以 300 就是平均写 IOPS。如果 EC2 实例开启了详细监控,--period 60可以拿到分钟级数据。查询读指标时把 MetricName 换成VolumeReadOps,字节数换成VolumeReadBytes或VolumeWriteBytes。
| 指标名 | 用途 |
|---|---|
| VolumeReadOps / VolumeWriteOps | 计算实际 IOPS,和卷配置的 IOPS 上限对比 |
| VolumeReadBytes / VolumeWriteBytes | 计算实际吞吐,和卷吞吐上限对比 |
| VolumeQueueLength | 等待处理的 IO 请求数,持续升高说明卷已饱和 |
| VolumeIdleTime | 卷空闲时间,判断负载是否真的是“持续高” |
5.2 高发问题的三种曲线形态
第一种形态是VolumeReadOps或VolumeWriteOps长期贴着配置上限,但吞吐不高,说明应用以小块 IO 为主,瓶颈在 IOPS,动作是提高 IOPS 或换 io2。第二种形态正好相反,VolumeReadBytes已经处于高位但 Ops 不高,说明块大小较大,瓶颈在吞吐,动作是提高--throughput。第三种形态只出现在 gp2 上,BurstBalance 掉到 0 后性能直线下降,这表示突发额度耗尽,gp2 已经扛不住持续负载,应该迁到 gp3 或 io2。
还有一个容易漏掉的限制:单卷性能和实例类型强相关。某些中小型实例的 EBS Bandwidth 上限低于 gp3 的单卷最大吞吐,这时候就算把卷吞吐调到 1000 MiB/s,实际也跑不满。查看实例的 EBS 带宽配额后,如果实例侧先成为瓶颈,需要升配实例类型。
5.3 关联实例与文件系统层的 iostat
CloudWatch 只能证明“卷表现不对”,要定位是哪个进程在制造压力,需要登录实例:
iostat -x 1 sudo pidstat -d 1iostat -x里的%util接近 100% 说明设备队列上有持续积压,但对 NVMe 设备这个值不能直接当硬件利用率理解,它只代表请求在队列中等待;还要看await和aqu-sz。await是 IO 请求平均处理时间,持续很高说明请求在排队;aqu-sz是平均队列长度,持续大于磁盘提交队列深度就说明饱和。pidstat -d能找到具体是哪个进程在读盘或写盘。
提示:CloudWatch 是分钟级聚合,iostat 是秒级实时采样。排查时先在 CloudWatch 里确定异常时间段,再上实例用 iostat 复现,避免被瞬时抖动误导。特别注意 NVMe 设备名是
/dev/nvmeXn1,监控脚本里不要硬编码/dev/sda。
6. EBS 进阶:用 RAID 合并单卷带宽,并用脚本管好快照生命周期
6.1 用 RAID 0 突破单卷吞吐极限
当 gp3 单卷的吞吐已经调到最大,实例带宽也够用,但业务仍需要更大的顺序读写带宽时,可以把多个 EBS 卷组成软 RAID 0。常见做法是将两块 gp3 卷合并成一个条带设备,总吞吐接近两卷之和。
sudo mdadm --create --verbose /dev/md0 \ --level=0 --raid-devices=2 \ /dev/nvme1n1 /dev/nvme2n1 sudo mkfs.xfs /dev/md0 sudo mkdir /data sudo mount /dev/md0 /data sudo mdadm --detail --scan | sudo tee -a /etc/mdadm.conf--level=0表示 RAID 0,--raid-devices=2指定成员盘数量,后面的设备就是两块被 EBS 映射出来的 NVMe 盘。RAID 0 没有校验和冗余,某一块 EBS 卷损坏会导致整个 md 设备数据不可用。EBS 本身在可用区内有多副本保证硬件层面的数据可靠,但 RAID 0 解决的只是带宽瓶颈,不承担数据安全职责。最后一行把 mdadm 扫描结果写入配置,否则重启后软 RAID 可能不会自动装配。
6.2 用 tag 和日期实现“保留最近 3 份快照”
手工快照容易失控,最常见的是“定期备份脚本只负责创建,不负责清理”,几个月后快照成本超过 EC2 本身。下面这段脚本按卷上的Backup=true标签筛选卷,每天创建快照,并只保留每个卷最近 3 份:
#!/bin/bash set -euo pipefail KEEP=3 VOLUME_IDS=$(aws ec2 describe-volumes \ --filters "Name=tag:Backup,Values=true" \ --query 'Volumes[*].VolumeId' --output text) for vid in $VOLUME_IDS; do aws ec2 create-snapshot \ --volume-id "$vid" \ --description "auto-backup-$(date +%F-%H%M%S)" > /dev/null OLD=$(aws ec2 describe-snapshots \ --filters "Name=volume-id,Values=$vid" \ "Name=description,Values=auto-backup-*" \ --query 'sort_by(Snapshots, &StartTime)[*].SnapshotId' \ --output text) COUNT=$(echo "$OLD" | wc -w) if [ "$COUNT" -gt "$KEEP" ]; then for snap in $(echo "$OLD" | head -n $((COUNT-KEEP))); do aws ec2 delete-snapshot --snapshot-id "$snap" done fi done脚本先用describe-volumes按标签筛选卷,避免给所有卷都开启快照;创建时的描述带上日期前缀,便于过滤识别;sort_by(Snapshots, &StartTime)让旧快照排在最前面,超出KEEP的才删除。注意这里不能用 SnapshotId 排序,因为 SnapshotId 不保证按创建时间递增。执行前确认运行脚本的 EC2 实例或本机的 IAM 权限包含ec2:DescribeVolumes、ec2:CreateSnapshot、ec2:DescribeSnapshots、ec2:DeleteSnapshot。配好 cron 后,把KEEP调整为符合备份合规要求的值,快照产生的成本就在可控范围内。
本文还有配套的精品资源,点击获取