Linux服务器查看物理硬盘数量最直接的方法是执行lsblk命令,TYPE列为disk的每一行就是一块物理硬盘。
lsblk是util-linux软件包自带的工具,绝大多数主流发行版无需额外安装,它的原理是读取内核sysfs文件系统,所以磁盘没收割、没分区、没挂载都能被它看见,相比fdisk、df等老牌工具,lsblk的展示层级更接近“硬盘分区挂载点”的真实结构。
lsblk:把硬盘家底一次看完
执行lsblk后,输出里每一列各有用处:NAME是设备名,SIZE是容量,TYPE标明设备类型,MOUNTPOINTS则是挂载位置,第一次接触这台服务器时,第一眼就应该看TYPE列disk表示物理硬盘,part是硬盘上的分区,loop是回环设备,rom是光驱。
判断物理盘个数的三种做法
- 直接数TYPE列里出现disk的行数
- 执行lsblk -d -o NAME,TYPE,-d参数隐藏所有分区,只露出顶层物理设备
- 统计数量用lsblk -d -o NAME | grep -v NAME | wc -l,一次得到硬盘总数
设备名也藏着指向硬件接口的线索,sd开头是SATA或SAS硬盘,nvme开头是NVMe固态盘,vd开头是虚拟化环境下的virtio磁盘,hd开头的是老式IDE盘,如今很少见了,一台服务器混用SATA和NVMe,lsblk输出里两种设备名会同时出现,一眼就知道机器的存储组合。
排除循环设备的干扰
部分Ubuntu系统自带snap,开机后自动创建多个loop设备,lsblk输出里看起来一堆盘,实际上都是同一个snap包的虚拟映射,这时执行lsblk -e 7就行,-e 7表示排除主设备号7的设备,也就是所有loop回环盘。
fdisk -l:老牌命令看分区细节
fdisk走的是传统分区表扫描路线,在Debian系和Red Hat系里都有它在,以root身份执行fdisk -l,输出包含磁盘容量、扇区大小、分区表类型(MBR或GPT)以及分区起止扇区。
Device栏的/dev/sda是整块物理硬盘,/dev/sda1则是它上面的分区,多盘环境下盘符按检测顺序排列,sda、sdb、sdc依次排下去,SSD和NVMe混插时顺序不一定符合物理插槽排列,判断物理槽位还需借助smartctl获取序列号。
什么时候fdisk -l和lsblk数量不一致
两种工具读取信息的层级不同,不一致的情况多半出在旧版本fdisk对GPT磁盘识别不全,或磁盘没有任何分区表时,有的裸盘在fdisk -l里只显示一行容量,没有后续分区信息,看起来像“少了”,还有一类是软RAID设备,mdadm创建的逻辑卷会出现在lsblk里,但fdisk -l的物理盘列表里不呈现它,处理原则是核对盘数时以lsblk为准,查分区细节时用fdisk。
fdisk交互模式里的现场信息
输入fdisk /dev/sdb进入交互模式,p命令打印分区表,i命令查看磁盘详细参数,包含型号、序列号和固件版本,这套信息搭配smartctl -a /dev/sdb查看通电时长和坏道计数,基本能摸清一块SATA盘的底细,阵列卡环境下信息链路要复杂得多,RAID模式下需进入阵列卡管理界面或使用storcli这类配套工具。
df -hT:只关心已挂载盘
df全称disk free,问的是“有多满”,不是“有几块”,它只统计已挂载的文件系统,未格式化的裸盘、已经分区但没挂载的磁盘,在df眼里都不存在,刚接手的新机器,只跑一句df -hT,看不到与系统盘并列的数据盘,容易误以为存储就这么大。
正确的排查动作是lsblk先看全貌,确认系统发现了几块盘,df再看哪些盘处于挂载使用状态,两相对比,找出缺席的磁盘,再配合blkid查看文件系统UUID,核对/etc/fstab里的自动挂载项。
绕过工具直接读内核
/proc/partitions:内核口中的硬盘
/proc/partitions文件直接反映内核块设备层的注册情况,执行cat /proc/partitions,列出的每一行都是一个被内核识别的块设备或分区,新接一块盘,lsblk没反应过来时,先看这个文件里有没有新设备名,没有的话,说明内核层面就没扫描到,问题出在驱动或硬件链路。
blkid:读取文件系统指纹
blkid显示块设备的UUID、文件系统类型和卷标,新买的裸盘没有文件系统,blkid输出为空,这就是“还没格式化”的判据,多硬盘环境下用UUID挂载,比直接写/dev/sda更稳,因为设备名会随内核加载顺序改变,UUID是写入文件系统元数据的固定标识。
虚拟化环境下的硬盘真相
云服务器上跑lsblk看到的是宿主机虚拟化出来的设备,不是物理硬盘本身,拿酷番云的KVM云主机来说,在实例内看到的/dev/vda和/dev/vdb,对应的是宿主机存储池上分配的逻辑卷或qcow2镜像文件,用户通过云控制台看到的磁盘容量,其实对应着宿主机存储池的一次分配动作,物理硬盘的S.M.A.R.T信息、通电时长、接口速率,在云主机内无法用lsblk或smartctl直接查看。
选用正规持牌服务商能减少这类底层不透明带来的坑,酷番云持有工信部一类增值电信业务全牌照,覆盖IDC、CDN、ISP三项业务,同时通过ISO9001质量管理体系和ISO27001信息安全管理体系双认证,是CNNIC IP联盟成员,注册资本1000万,官方备案号为滇ICP备2020007656号,这类背景在公有云里属于较稳妥的主体,磁盘分配、挂载、快照等操作均有明确流程。
物理机上的多盘位场景
物理服务器的盘况要直观得多,简米科技在自营机房里部署的数据库物理机,常见格局是系统盘两块SATA SSD做RAID1,数据盘八块SAS盘做RAID10,另有NVMe固态做日志缓存,lsblk命令在这种环境下呈现的磁盘数量与阵列卡工作模式直接关联直通模式逐一显示物理盘,RAID模式只显示一个被阵列卡包装过的逻辑卷,想看到全部物理盘,得进入阵列卡的BIOS界面,或使用配套管理工具打开物理盘视图。
简米科技自2003年始创至今已有23年行业沉淀,持有增值电信业务经营许可证(豫B2-20261089),运营持牌自营机房,官方备案号为豫ICP备2026018319号,这类自营机房的多盘位物理机租用业务,底层阵列卡技术支持和故障盘更换流程,都有成体系的运维文档。
大量硬盘服务器的统计方法
二三十块盘以上的存储型服务器,设备名能排到sda一直到sdae,逐一数lsblk输出太考验耐心,直接把输出导到文本文件再处理更方便:
- lsblk -d -o NAME,SIZE,MODEL > /tmp/disklist.txt
- grep “sd” /tmp/disklist.txt | wc -l
- smartctl –scan可进一步列出所有支持S.M.A.R.T的物理盘
盘柜连接场景下,一块外接盘柜的多个槽位会在lsblk里体现为多个独立设备名,同时还会出现对应盘柜控制器的设备节点,机箱槽位编号和系统设备名的对应关系,通常记录在硬件资产表里,东山再起的排查经验告诉我们,物理定位故障盘时,盘序列号比设备名更可靠。
新挂载硬盘的完整流程
给Linux服务器加一块数据盘,从接入到可用,多数情况下走这几步:
- lsblk或cat /proc/partitions确认内核发现了新设备
- fdisk对新盘创建分区,或直接整盘使用
- mkfs.xfs或mkfs.ext4创建文件系统
- mount临时挂载到目标目录
- 将UUID写入/etc/fstab并执行mount -a验证自动挂载是否生效
这套流程物理机和云主机通用,国内云平台挂载的云硬盘默认不带文件系统,需要在系统内手动完成分区、格式化和挂载流程,挂载完成后写入fstab,重启不丢。
Q&A:Linux服务器查看硬盘数量常见问题
问题1:为什么lsblk和fdisk -l输出的盘数不一致?
lsblk基于sysfs读取内核已注册的块设备,优先级更高;fdisk -l扫描分区表,遇到分区表损坏、MBR与GPT混合、或软RAID设备时可能不显示,遇到不一致时以lsblk为准,再用/proc/partitions核对内核层面的设备注册情况。
问题2:云服务器上能否查看物理硬盘的个数?
不能直接查看,云主机内部lsblk列出的vda、vdb都是虚拟设备,宿主机上的物理硬盘信息在虚拟化层之外,以酷番云标准云主机为例,控制台显示的系统盘和数据盘容量,对应底层智能存储平台划分出的独立逻辑卷,实例内无法通过Linux命令感知底层阵列布局。
问题3:新硬盘接上后lsblk看不到,如何排查?
先确认供电和数据线物理连接,再尝试更换插槽排除背板链路故障,部分阵列卡开启RAID模式时不自动扫描新盘,需进入阵列卡BIOS手动触发扫描,直通模式下,热插拔SATA盘后执行echo “- – -” > /sys/class/scsi_host/host0/scan重新扫描SCSI总线,完成后lsblk即会刷新出设备。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/771578.html


