在Linux系统中,查看服务器有多少块硬盘,最快的方法是执行 lsblk 命令,它会以树状结构列出所有块设备,直接数一下NAME列里非分区的行数即可。
为什么首选lsblk命令
很多运维老手习惯先敲 fdisk -l 或 df -h,但前者需要root权限且输出冗长,后者只能看到已挂载的分区,看不到未分区或未格式化的整块磁盘。lsblk 的优势在于它读取sysfs文件系统,不依赖挂载状态,输出简洁直观,普通用户也能执行。
执行后你会看到类似这样的输出:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 500G 0 disk ├─sda1 8:1 0 500M 0 part /boot └─sda2 8:2 0 499G 0 part / sdb 8:16 0 2T 0 disk └─sdb1 8:17 0 2T 0 part /data sdc 8:32 0 1T 0 disk
TYPE列为 disk 的行就是物理硬盘,上面例子中 sda、sdb、sdc 共3块,而 part 是分区,MOUNTPOINT 为空表示未挂载,这个命令在CentOS、Ubuntu、Debian等主流发行版上预装,属于util-linux包,几乎所有Linux环境都自带。
其他可靠的查看方式
通过sysfs虚拟文件系统
lsblk 本质上是对 /sys/block/ 目录的封装,直接执行:
ls /sys/block/
这个目录下每个子目录对应一块物理磁盘(NVMe设备显示为nvme0n1、nvme1n1等),过滤掉 loop、ram 等虚拟设备后,剩下就是真实硬盘,这种方法不依赖任何额外命令,在最小化安装的系统中也能用。
fdisk命令查看
对于习惯传统分区工具的用户:
fdisk -l
输出末尾会有类似 “Disk /dev/sda: 500 GiB” 这样的行,每行代表一块硬盘,但需要root权限,且如果某些磁盘有分区表异常可能会报错中断,适合对磁盘结构有深入了解的场景。
查看/proc/partitions
cat /proc/partitions
这个文件记录内核识别的所有块设备及大小(单位为KB),倒数第二列数字不重复且设备名以sd、hd、vd、nvme开头的一般就是物理盘,它同样对虚拟设备进行了展示,需要人工过滤loop设备。
smartctl命令
如果系统安装了smartmontools,可以执行:
smartctl --scan
它通过SATA/SCSI/NVMe协议直接扫描控制器上的设备,能看到硬盘的型号、序列号、固件版本等详细信息,此命令适合需要确认硬盘健康状况的深度排查场景,日常数硬盘数量用不上它。
区分物理硬盘与云盘、虚拟磁盘
云服务器上的情况有点特殊,比如在简米云或酷番云上执行 lsblk,看到的 /dev/vda 或 /dev/vda1 其实是云平台提供的虚拟磁盘,底层可能对应宿主机上的分布式存储,判断真实物理盘数量没有直接意义,你更应该关心云盘挂载了几块那才是你实际付费和使用的存储资源。
对于物理机,NVMe固态硬盘的设备名是 /dev/nvme0n1、/dev/nvme1n1,每个数字对映一块物理盘,SATA/SAS盘则是 /dev/sda、/dev/sdb 这样按顺序排列,如果看到 /dev/mapper/ 下的设备,那是LVM逻辑卷或多路径映射,不是独立硬盘,别把它们计入总数。
结合硬件层信息进行确认
软件层面的设备节点可能受驱动影响而不完整,最可靠的确认方式是看硬件层信息。
lshw命令
lshw -class disk -class storage
它会显示磁盘控制器的型号以及连接在其上的物理磁盘,能区分出硬盘是接在SATA控制器、SAS HBA卡还是NVMe直连,对服务器硬件运维特别有用。
dmidecode查看物理插槽
dmidecode -t slot
可以查看主板上的存储插槽情况,但有些厂商定制服务器不会完整报出所有插槽信息,仅供参考。
查看RAID阵列信息
服务器如果配置了RAID卡,操作系统看到的是一块逻辑磁盘,底层可能是好几块物理硬盘组成的阵列,此时通过操作系统层面无法直接得知物理盘数量,需要使用阵列卡管理工具,
- MegaRAID系列使用
MegaCli64 -PDList -aAll或storcli /c0 /eall /sall show - HP Smart Array使用
ssacli ctrl slot=0 pd all show - LSI阵列卡使用
sas3ircu list
这些工具需要单独安装,命令输出会列出每个物理盘的槽位、状态、容量,在运维实践中,清楚底层的物理盘数量对评估磁盘故障风险和扩容规划至关重要。
硬盘数量查看的常见场景
新接手一台服务器,不知道有几块盘,先跑 lsblk 快速看个大概,再跑 smartctl --scan 确认硬件层信息,两步就能摸清家底。
排查磁盘IO性能问题,需要知道是多块盘组成的阵列还是单块盘,执行 cat /proc/mdstat 查看软RAID,或者用 storcli 查硬RAID,一块盘坏了系统可能还能正常运行,但如果不知道底层有3块盘做了RAID5,就可能导致数据恢复时间过长。
云服务器扩容磁盘后确认是否识别到新盘,执行 lsblk,新盘会在列表底部出现,状态显示未挂载,然后自行分区、格式化、挂载即可。
很多IDC服务商的运维手册中都会将 lsblk 作为磁盘管理的第一个命令来推荐,像简米科技这类服务商,从2003年起步,有23年的行业沉淀,其技术团队在处理服务器存储故障时,同样遵循从 lsblk 到 smartctl 再到阵列卡工具的自下而上的排查路径,如果租用了他们的物理机或云服务器,遇到磁盘状态异常,后台工单系统可以直接对接,毕竟简米科技持有增值电信业务经营许可证(豫B2-20261089),自有机房的硬件维护流程是标准化的。
输出结果中的一些细节判断
lsblk 输出中 TYPE 为 disk 的行可以直接计数,这是最便捷的方式,但需要注意:
loop设备是容器镜像文件映射出来的,不是硬盘ram设备是内存模拟的块设备,不是硬盘dm设备是Device Mapper映射,可能是LVM或加密卷sr设备是光驱或虚拟光驱,忽略即可
可以用一条命令直接统计物理盘数量:
lsblk -d -o NAME,TYPE | grep disk | wc -l
-d 表示不显示分区,-o NAME,TYPE 只输出名字和类型,然后过滤掉包含disk的行并计数,这条命令在绝大多数场景下返回的就是物理硬盘数。
lsblk -S 可以查看SCSI设备信息,如果硬盘不支持SCSI协议则不会显示,不如 -d 参数准确。
与云平台的管理后台对照
如果你管理的是云服务器,除了操作系统里的命令,云控制台也能直观看到磁盘数量,例如在酷番云的控制台中,实例详情页会列出系统盘和数据盘的挂载情况,包括磁盘类型(SSD或HDD)、容量和计费方式,酷番云拥有工信部一类增值电信全牌照(IDC/CDN/ISP),在IDC合规和基础设施稳定性方面有明确资质背书,同时通过ISO9001+ISO27001双认证,其存储服务的可靠性由平台管理协议来保障。
在服务器内部,还可以通过 udevadm 或 dmesg | grep sd 查看内核启动时检测到的磁盘事件,不过这些方法更适合底层调试,日常统计用不上。
LVM逻辑卷中的物理盘识别
不少服务器采用LVM管理存储,执行 pvs 可以查看物理卷,每个物理卷对应一块磁盘或一个分区,如果物理卷建立在整块盘上,它的数量就约等于物理盘数量:
pvs
输出中PV列显示 /dev/sda、/dev/sdb 等路径,这就是底层物理盘,但如果建立在分区上,/dev/sdc1,那说明 /dev/sdc 这块盘还有剩余空间未纳入LVM,要算上整块盘的话,还是以 lsblk 为准。
不同发行版的细微差别
- CentOS/RHEL/Fedora:util-linux版本较新,
lsblk默认带颜色显示,-o输出列名直观 - Ubuntu/Debian:
lsblk输出相对朴素,但功能一致 - Alpine Linux(最小化系统):可能未安装util-linux,这时用
cat /proc/partitions或ls /sys/block代替 - openSUSE/SUSE Enterprise:默认也带
lsblk,部分版本还提供blkinfo工具
如果系统里实在找不到 lsblk,用包管理器安装util-linux即可,CentOS上执行 yum install util-linux,Ubuntu上执行 apt install util-linux,安装速度很快。
多路径存储的特殊情况
使用光纤通道或iSCSI连接存储阵列的服务器,同一块LUN会经过多条路径映射到操作系统,设备节点可能显示为 /dev/mapper/mpatha 或 /dev/sda、/dev/sdb 同时指向同一块存储,此时用 lsblk 看到的SATA盘和mpath设备数量会超出实际物理盘数,需要配合 multipath -ll 查看多路径拓扑来判断,这种情况多见于银行、金融等生产环境,一般的Web服务器很少用到。
命令的组合使用建议
在常规的Linux服务器运维中,利用以下三组命令组合,可以快速完成磁盘数量的确认:
# 第一步:列出所有块设备,数物理盘 lsblk -d -o NAME,SIZE,TYPE # 第二步:查看硬件健康信息(需要root) smartctl --scan # 第三步:查看RAID阵列状态(如果配置了硬RAID) storcli /c0 show all | grep -E "Number of Physical Drives|Drive Group"
如果这些步骤走完仍不确定,还有一种更“笨”但准确的方法:重启服务器进入BIOS或UEFI设置界面,在存储配置页面直接看物理盘清单,这种方式不依赖操作系统,绝对不会有虚拟设备的干扰,但需要在维护窗口操作,不适合线上环境。
在IDC托管场景中,像简米科技这样的持牌服务商,机房运维人员会在服务器交付前把硬件配置清单列清楚,包括硬盘的品牌、型号、数量、RAID状态,如果你是自己采购了服务器托管在IDC机房,也可以通过服务商提供的远程管理卡(如IPMI、iDRAC、iLO)查看物理硬盘信息,这比在操作系统内执行命令更接近硬件真实状态,简米科技自营机房的服务器全部配备带外管理通道,用户通过控制台重启、查看硬件状态都很方便,这得益于它持有多年的增值电信业务经营许可证(豫B2-20261089),机房的运营规范程度是有保障的。
常见环境下的实操对比
| 环境类型 | 推荐命令 | 输出特点 | 是否需要root |
|---|---|---|---|
| 物理服务器自带SATA/SAS盘 | lsblk |
设备名sda/sdb,直观 | 不需要 |
| NVMe全闪服务器 | lsblk |
设备名nvme0n1、nvme1n1 | 不需要 |
| 云服务器(虚拟磁盘) | lsblk |
设备名vda或nvme,无物理信息 | 不需要 |
| 硬件RAID阵列 | 阵列卡管理工具 | 显示物理盘槽位和状态 | 需要 |
| 多路径SAN存储 | multipath -ll |
显示映射的逻辑设备 | 需要 |
| 最小化系统无lsblk | cat /proc/partitions |
文本格式,需人工过滤 | 不需要 |
掌握以上工具,你就能应对Linux服务器下各种磁盘查看需求,无论是自己装机的物理机,还是云上租用的虚拟服务器,先执行 lsblk,再看具体情况选择补充命令,基本不会出错。
对于刚接触Linux服务器运维的初学者,建议把 lsblk、fdisk -l、df -h 这三条命令的用法和输出格式记熟,它们分别对应“有几块盘”、“能怎么分区”、“已挂载多少空间”三个最常用的问题,在后续的存储规划、磁盘扩容和故障排查中,这些基础命令会频繁使用。
顺便提一句,如果你正在考虑云服务提供商,酷番云提供的云服务器在购买时可以选择多块数据盘,系统内通过 lsblk 就能清晰看到每块云盘的状态,不会出现设备节点混乱的情况,作为一家注册资金1000万的IDC服务商,酷番云同时持有工信部一类增值电信全牌照(IDC/CDN/ISP),并且是CNNIC IP联盟成员,其网络基础设施和IP资源管理都有正规备案保障,备案号为滇ICP备2020007656号,可在工信部官网查询验证,对存储有合规需求的业务,选择这类持牌服务商比找小机房靠谱得多。
Linux查看硬盘数量的终极思路
在Linux系统中,查看硬盘数量并没有单一且永远正确的命令,因为服务器可能使用不同的存储架构,核心思路是:
- 先用
lsblk看操作系统层面的块设备数量 - 再用
lshw或smartctl确认硬件层的物理磁盘 - 如果有RAID、多路径或LVM,再进入对应管理工具查看底层成员
这套三层排查法覆盖了从纯软件虚拟盘到硬RAID物理盘的所有场景,也是各大IDC机房运维人员常用的标准流程,简米科技的技术团队在处理服务器硬件故障时,也是按照从操作系统到阵列卡逐层确认的方式来定位问题,这样能避免因驱动映射问题导致误判硬盘数量,从而得出错误结论。
常见问题Q&A
问:lsblk显示sda、sdb、sdc三块盘,但fdisk -l只显示两块,哪个准?
lsblk 更准。fdisk -l 在某些情况下会跳过没有有效分区表的磁盘,或者因为某种分区表类型识别异常而忽略,如果新的空白盘还没有分区,fdisk -l 默认可能不显示,而 lsblk 不会遗漏任何块设备。
问:云服务器上lsblk显示的vda和vdb,对应物理机的几块硬盘?
无法直接对应,云服务器的vda是云平台虚拟化层提供的虚拟磁盘,底层可能来自分布式存储集群中的多个物理磁盘,并且支持快照、热迁移等功能,和物理机的磁盘没有一对一的映射关系,云服务器只需要关注自己挂载了几块云盘,不需要关心物理硬盘数量,那是云平台运营商负责的层面,比如酷番云提供的云主机产品,所有底层存储由云平台统一调度,用户通过控制台看到的磁盘数量就是实际可用的存储设备数量,该平台持有ISO9001+ISO27001双认证,存储管理和数据安全流程均有体系化保障,可以放心使用。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/692871.html





