当前位置: 首页 > news >正文

【Linux系列】Linux 系统下 SSD 磁盘识别

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
img

  • 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老
  • 导航
    • kwan 的解忧杂货铺:全面总结 java 核心技术,jvm,并发编程 redis,kafka,Spring,微服务等
    • 常用开发工具系列:常用的开发工具,IDEA,Mac,Alfred,Git,typora 等
    • 数据库系列:详细总结了常用数据库 mysql 技术点,以及工作中遇到的 mysql 问题等
    • 新空间代码工作室:提供各种软件服务,承接各种毕业设计,毕业论文等
    • 懒人运维系列:总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作
    • 数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂

非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨

博客目录

    • 存储介质的技术差异
      • 机械硬盘与固态硬盘的本质区别
      • 识别 SSD 的技术原理
    • 基础识别方法详解
      • 1. lsblk 命令:快速判断设备类型
      • 2. /sys 文件系统:查询内核底层数据
    • 中级识别方案
      • 3. smartctl 工具:深度查询 SMART 数据
      • 4. hdparm 工具:性能特征分析
    • 高级识别技术
      • 5. fio 基准测试:通过性能指纹识别
      • 6. 内核日志分析
    • 生产环境实践指南
      • 自动化检测脚本示例
      • 容器环境中的特殊考量
      • 云环境识别技巧
    • 性能优化建议
    • 常见问题排查
      • 1. 识别结果冲突的情况处理
      • 2. 混合存储环境的识别
      • 3. NVMe 设备的特殊处理
    • 技术发展趋势
    • 总结

在当今数据驱动的时代,存储介质的选择直接影响着系统性能。固态硬盘(SSD)以其卓越的 I/O 性能逐渐取代传统机械硬盘(HDD),成为服务器和高端工作站的标配。

存储介质的技术差异

机械硬盘与固态硬盘的本质区别

传统机械硬盘(HDD)采用磁性盘片和机械臂结构,数据存储在旋转的盘片上,通过磁头进行读写。这种物理特性导致:

  • 存在寻道时间(通常几毫秒)
  • 转速指标(5400/7200/10000RPM)
  • 对随机访问不友好
  • 明显的性能波动

相比之下,固态硬盘(SSD)使用 NAND 闪存芯片:

  • 无机械运动部件
  • 访问时间以微秒计
  • 随机访问性能优异
  • 功耗更低
  • 但存在写入寿命限制
    在这里插入图片描述

识别 SSD 的技术原理

Linux 系统提供了多种底层接口来暴露存储设备特性:

  1. 块设备属性:通过/sys 文件系统暴露的 rotational 标志
  2. SMART 数据:包含制造商标识和设备类型信息
  3. 性能特征:SSD 特有的延迟和吞吐量模式
  4. 内核识别:驱动层报告的设备属性

基础识别方法详解

1. lsblk 命令:快速判断设备类型

lsblk是最简单直接的识别工具,通过查询块设备拓扑信息:

lsblk -d --output NAME,ROTA,SIZE,MODEL

典型输出示例:

NAME ROTA   SIZE MODEL
sda     0 447.1G Samsung SSD 860 EVO
sdb     1   1.8T WDC WD2003FZEX-0

关键指标解析:

  • ROTA=1:旋转设备(HDD)
  • ROTA=0:非旋转设备(SSD)
  • MODEL字段:直接显示厂商和型号

优势:

  • 无需 root 权限
  • 即时显示所有设备
  • 可结合其他字段(SIZE, TYPE 等)

2. /sys 文件系统:查询内核底层数据

Linux 内核通过 sysfs 虚拟文件系统暴露设备属性:

cat /sys/block/sda/queue/rotational

返回值解析:

  • 0:SSD
  • 1:HDD

进阶用法:

find /sys/block -name rotational | xargs -I{} sh -c 'echo {} $(cat {})'

技术原理:
该值由设备驱动设置,反映内核识别的设备特性。对于 NVMe 设备,内核会自动设置为 0。

中级识别方案

3. smartctl 工具:深度查询 SMART 数据

smartmontools 包提供的smartctl可读取磁盘的完整 SMART 信息:

sudo smartctl -i /dev/nvme0n1

关键信息字段:

Rotation Rate:    Solid State Device
Device Model:     INTEL SSDPEKKF256G8L

安装方法:

# Debian/Ubuntu
sudo apt install smartmontools# RHEL/CentOS
sudo yum install smartmontools

特殊案例处理:
某些老旧 SSD 可能不正确报告旋转速率,需结合其他指标判断:

sudo smartctl -A /dev/sda | grep -i 'ssd\|solid'

4. hdparm 工具:性能特征分析

hdparm 可测试设备基础性能:

sudo hdparm -Tt /dev/sda

典型结果对比:

  • SSD:缓冲读取>500MB/s,直接读取>300MB/s
  • HDD:缓冲读取 200-300MB/s,直接读取 80-160MB/s

高级用法:

sudo hdparm -I /dev/sda | grep Nominal

高级识别技术

5. fio 基准测试:通过性能指纹识别

使用行业标准工具进行特征分析:

sudo fio --filename=/dev/sda --rw=read --bs=4k --iodepth=64 \
--runtime=20 --numjobs=4 --time_based --group_reporting \
--name=ssd_test --output=ssd_result.txt

指标解析:

  • SSD:4K 随机读取 IOPS 通常>10,000
  • HDD:4K 随机读取 IOPS 通常<200

自动化判断脚本:

#!/bin/bash
DEVICE=$1
RESULT=$(sudo fio --filename=$DEVICE --rw=randread --bs=4k \
--iodepth=1 --runtime=5 --numjobs=1 --time_based \
--group_reporting --name=quick_test --output-format=json | \
jq '.jobs[0].read.iops')if (( $(echo "$RESULT > 1000" | bc -l) )); thenecho "SSD detected (IOPS: $RESULT)"
elseecho "HDD suspected (IOPS: $RESULT)"
fi

6. 内核日志分析

检查系统启动时的设备检测记录:

dmesg | grep -i 'ssd\|nvme\|rotating'

典型日志线索:

[    2.368104] sd 0:0:0:0: [sda] SSD with 128KiB cache
[    2.752893] sd 2:0:0:0: [sdb] 625142448 512-byte logical blocks (3.00 TB/2.72 TiB)
[    2.752896] sd 2:0:0:0: [sdb] 4096-byte physical blocks
[    2.752899] sd 2:0:0:0: [sdb] Write Protect is off

生产环境实践指南

自动化检测脚本示例

#!/bin/bashcheck_ssd() {local dev=$1local sys_rotationallocal lsblk_rotalocal smart_modellocal result=""# Check /sys rotationalsys_rotational=$(cat /sys/block/${dev#/dev/}/queue/rotational 2>/dev/null)# Check lsblklsblk_rota=$(lsblk -d -o ROTA "$dev" | tail -n 1)# Check SMART data if availableif command -v smartctl &>/dev/null; thensmart_model=$(sudo smartctl -i "$dev" | grep -i 'model\|rotation' | tr '\n' ' ')fi# Determine resultif [[ "$sys_rotational" == "0" || "$lsblk_rota" == "0" ]]; thenresult="SSD"elseresult="HDD"fiprintf "%-8s %-4s (sys:%-1s lsblk:%-1s smart:%-20s)\n" \"$dev" "$result" "$sys_rotational" "$lsblk_rota" "$smart_model"
}# Main execution
echo "Device  Type  Details"
echo "======================"
for dev in /dev/sd? /dev/nvme?n?; do[[ -e "$dev" ]] || continuecheck_ssd "$dev"
done

容器环境中的特殊考量

在容器中识别存储设备时需注意:

  1. 需要挂载主机设备文件:
    docker run -v /dev:/dev --privileged -it ubuntu bash
    
  2. Kubernetes 环境下可使用:
    volumes:- name: devhostPath:path: /dev
    containers:- securityContext:privileged: true
    

云环境识别技巧

主流云平台的虚拟磁盘识别:

  • AWS:EBS 类型可通过 API 查询
    aws ec2 describe-volumes --volume-ids vol-12345 --query 'Volumes[0].VolumeType'
    
  • Azure:使用 LSI 逻辑设备名
  • GCP:持久磁盘显示为 SCSI 设备

性能优化建议

识别 SSD 后的关键配置调整:

  1. 文件系统优化:

    # ext4推荐挂载选项
    defaults,noatime,discard,data=writeback,barrier=0
    
  2. 内核参数调整:

    # 提高IO队列深度
    echo 256 > /sys/block/sda/queue/nr_requests
    
  3. 数据库优化:

    • MySQL: innodb_io_capacity=2000
    • PostgreSQL: random_page_cost=1.1
  4. 调度器选择:

    echo kyber > /sys/block/sda/queue/scheduler
    

常见问题排查

1. 识别结果冲突的情况处理

当不同工具报告不一致时:

  1. 检查内核版本(旧内核可能识别错误)
  2. 验证设备是否通过 RAID 控制器
  3. 查看厂商白名单(某些企业级 SSD 模拟 HDD 特性)

2. 混合存储环境的识别

对于包含多种存储类型的服务器:

lsblk -d -o NAME,ROTA,SIZE,MODEL,TRAN | grep -v usb

3. NVMe 设备的特殊处理

NVMe 设备天然是 SSD,可通过专用工具检查:

nvme list
sudo nvme smart-log /dev/nvme0

技术发展趋势

  1. ZNS SSD:新兴的分区命名空间技术,需要特殊识别方法
  2. 计算存储:具备处理能力的智能 SSD
  3. Open Channel SSD:主机直接管理闪存芯片

未来可能需要更专业的识别工具:

sudo nvme zns identify-ns /dev/nvme0n1

总结

准确识别 SSD 是 Linux 系统优化的第一步。本文介绍了从基础到高级的多种识别方法,每种方案各有优劣:

方法准确性复杂度所需权限适用场景
lsblk用户级快速检查
/sys 查询极高用户级脚本集成
smartctl极高root详细报告
fio 测试root性能验证

在实际生产环境中,建议:

  1. 开发自动化检测脚本定期审计
  2. 将存储类型信息纳入 CMDB 系统
  3. 根据设备类型动态调整系统参数
  4. 建立性能基线以便及时发现异常

随着存储技术的快速发展,管理员需要持续更新知识储备,掌握新型存储设备的识别和管理方法,确保系统始终以最优状态运行。

觉得有用的话点个赞 👍🏻 呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

img

相关文章:

  • 【油藏地球物理正演软件ColchisFM】基于数据驱动的油藏参数叠前地震反演研究进展
  • 操作系统学习笔记第3章 内存管理(灰灰题库)
  • javaSE.QueueDeque
  • python打卡打印26
  • Git 常用命令详解
  • 进程替换讲解
  • 【day01】 Chroma 核心操作流程
  • IT系统的基础设施:流量治理、服务治理、资源治理,还有数据治理。
  • 部署安装jenkins.war(2.508)
  • 练习小项目2:今日幸运颜色生成器
  • 【ALINX 实战笔记】FPGA 大神 Adam Taylor 使用 ChipScope 调试 AMD Versal 设计
  • 在Angular中使用Leaflet构建地图应用
  • 一招解决Tailwindcss4.x与其他库样式冲突问题
  • Scrapy框架下地图爬虫的进度监控与优化策略
  • 16.2 VDMA视频转发实验之模拟源
  • [Java实战]Spring Boot 3实现 RBAC 权限控制(二十五)
  • C# 实现雪花算法(Snowflake Algorithm)详解与应用
  • C++篇——多态
  • 知从科技闪耀2025上海车展:以创新驱动未来出行新篇章
  • redis解决常见的秒杀问题
  • 一图读懂丨创新创业人才最高补贴500万元!临港新片区发布创客新政“十二条”
  • 国防部:菲方应停止一切侵权挑衅危险举动,否则只会自食苦果
  • 证券时报:中美互降关税落地,订单集中补发港口将迎高峰期
  • 落实中美经贸高层会谈重要共识,中方调整对美加征关税措施
  • 乌方:泽连斯基只接受与普京会谈,拒见其他俄代表
  • 广州地铁十一号线赤沙车辆段工程高坠事故调查报告公布:1人重伤且漏报