服务器与大带宽专家 · 持牌IDC/CDN/ISP服务商
简米科技官网JIANMI TECH
资讯 2026-10-09 更新于 2026-10-09 简米科技 3,485 字 8 分钟阅读

Linux虚拟机fdisk分区找不到设备怎么办,fdisk找不到磁盘咋解决

导读Linux虚拟机用fdisk分区找不到设备,最常见原因是磁盘未正确挂载到虚拟机、SCSI总线未重扫描或内核缺少对应驱动,先执行lsblk和dmesg | grep sd确认设备节点,再按虚拟化平台重扫描或重新添加磁盘,为什么fdisk会找不到设备?先理解Linux磁盘识别流程在虚拟机里敲下fdisk -l,结果……

Linux虚拟机用fdisk分区找不到设备,最常见原因是磁盘未正确挂载到虚拟机、SCSI总线未重扫描或内核缺少对应驱动,先执行lsblk和dmesg | grep sd确认设备节点,再按虚拟化平台重扫描或重新添加磁盘。

为什么fdisk会找不到设备?先理解Linux磁盘识别流程

在虚拟机里敲下fdisk -l,结果新加的磁盘根本没出现,这时候别急着怀疑fdisk坏了,fdisk只是一个分区工具,它只读取内核已经生成的块设备节点,如果设备节点不存在,fdisk自然看不见。

从虚拟磁盘到/dev/sdX:内核、驱动、设备节点三步走

Linux识别一块虚拟磁盘,通常要经过三个环节:

  • 虚拟机配置层:磁盘被正确添加到虚拟硬件,比如SCSI、SATA、NVMe或virtio控制器。
  • 内核驱动层:内核通过对应驱动枚举设备,比如mptspi、ahci、virtio_blk、nvme。
  • 设备节点层:内核在/dev/下生成sdX、vda、nvme0n1等块设备节点。

任何一步断了,fdisk -l都看不到,用dmesg | tail -30查看内核最近日志,是定位问题的第一步。

fdisk与lsblk、parted的区别:为什么fdisk看不见

lsblk、parted、fdisk都依赖块设备节点,但行为有差异。lsblk会显示所有块设备,包括未分区的;fdisk需要root权限,且只显示可用的磁盘设备,如果你没用sudo,或者设备被其他进程占用,fdisk可能不显示,先试sudo fdisk -l。

Linux虚拟机fdisk找不到硬盘怎么办?按场景排查

不同虚拟化平台,磁盘识别路径不一样,下面按常见场景拆开说。

VMware虚拟机Linux fdisk看不到磁盘:检查SCSI控制器与重扫描

VMware Workstation或ESXi里添加磁盘后,Linux可能不会自动扫描新设备,先确认VM设置中磁盘已勾选“连接”,然后登录Linux,执行:

Linux虚拟机fdisk分区找不到设备怎么办,fdisk找不到磁盘咋解决

ls /sys/class/scsi_host/

看到host0、host1等目录后,逐个重扫描:

for host in /sys/class/scsi_host/host; do echo "- - -" > $host/scan; done

再运行lsblk,新磁盘通常会出现,如果VMware使用NVMe控制器,路径不同,需要检查/sys/class/nvme/。

VirtualBox Linux fdisk分区找不到设备:增强功能与SATA控制器

VirtualBox的磁盘控制器类型影响识别,SATA控制器默认不支持热插拔,添加磁盘后往往需要重启虚拟机,如果不想重启,可以尝试:

sudo partprobe

但SATA热插拔需要先在VirtualBox设置中启用“热插拔”选项,检查存储设置里磁盘是否挂在正确的控制器下,如果是SCSI控制器,重扫描命令同样有效。

云服务器Linux fdisk分区找不到设备:热插拔与virtio驱动

云服务器(KVM/QEMU)通常使用virtio-blk或virtio-scsi,在云控制台挂载云盘后,Linux内需要重扫描,对于virtio-blk:

echo 1 > /sys/block/vda/device/rescan

对于virtio-scsi:

echo "- - -" > /sys/class/scsi_host/host0/scan

如果还是看不到,检查dmesg | grep virtio,确认驱动已加载,近年来,多数云厂商的Linux镜像已内置virtio驱动,但较老的内核可能需要手动加载。

实操:让fdisk重新识别虚拟磁盘的四种方法

下面这些方法按优先级排列,从最轻量到最彻底。

重扫描SCSI总线

这是最常用的方法,适用于VMware、KVM、部分VirtualBox场景。

for host in /sys/class/scsi_host/host; do echo "- - -" > $host/scan; done
lsblk

如果看到新磁盘,直接

Linux虚拟机fdisk分区找不到设备怎么办,fdisk找不到磁盘咋解决

fdisk /dev/sdX分区即可。

重新添加磁盘并重启虚拟机

如果重扫描无效,在虚拟机设置中移除磁盘,保存后重新添加,然后重启虚拟机,这个方法简单直接,但需要停机,对于生产环境,优先选择热扫描。

检查内核模块与驱动

用lsmod | grep virtio、lsmod | grep mptspi、lsmod | grep ahci查看驱动,如果驱动未加载,尝试modprobe virtio_blk或modprobe mptspi,现代内核一般会自动加载,但定制内核或精简镜像可能缺失。

使用partprobe和partx刷新分区表

如果lsblk能看到磁盘,但fdisk看不到分区,可能是分区表未刷新,执行:

sudo partprobe /dev/sda
sudo partx -a /dev/sda

然后重新运行fdisk -l。

对比:不同虚拟化平台下fdisk找不到设备的典型差异

平台 常见原因 推荐命令 是否需重启
VMware SCSI控制器未扫描 echo "- - -" > /sys/class/scsi_host/host0/scan 通常否
VirtualBox SATA热插拔未启用 partprobe或重启 多数是
KVM/QEMU virtio驱动未加载 dmesg+重扫描 否
Hyper-V 集成服务未更新 检查vmbus 可能

行业共识认为,Linux内核通过SCSI子系统枚举磁盘,fdisk仅读取已生成的块设备节点,所以排查方向永远是“先让内核看到,再让fdisk看到”。

预防与最佳实践:避免下次fdisk又找不到设备

添加磁盘后先看dmesg

每次在虚拟机里添加磁盘,先执行:

dmesg | tail -20

看有没有类似sd 2:0:0:0: [sdb] Attached SCSI disk

Linux虚拟机fdisk分区找不到设备怎么办,fdisk找不到磁盘咋解决

的日志,有日志说明内核已识别,没有就要查驱动或控制器。

使用UUID挂载避免设备名漂移

分区后,用blkid查看UUID,写入/etc/fstab时用UUID=xxx而不是/dev/sdb1,这样即使设备名变化,挂载也不会出错,业内专家指出,虚拟化环境中磁盘设备名漂移是导致启动失败的常见原因之一。

记录虚拟化平台的磁盘控制器类型

在虚拟机配置里记下用的是SCSI、SATA、NVMe还是virtio,不同控制器的重扫描命令和热插拔支持不一样,下次出问题,直接对症下药。

Q&A:Linux虚拟机fdisk找不到设备常见疑问

问:Linux虚拟机fdisk找不到设备,但lsblk能看到,为什么?

答:可能有两个原因,第一,fdisk没用sudo,普通用户看不到磁盘设备,第二,设备被其他进程占用,比如LVM或RAID,先试sudo fdisk -l,再检查lsblk输出中磁盘是否有part类型。

问:云服务器Linux fdisk分区找不到设备,需要重启吗?

答:多数情况下不需要,先在云控制台确认云盘已挂载到实例,然后进入Linux重扫描SCSI总线或virtio设备,如果控制台显示已挂载,但lsblk仍无新盘,检查dmesg看是否有驱动报错,重启是最后手段。

问:VMware虚拟机Linux fdisk看不到磁盘,重扫描命令是什么?

答:先用ls /sys/class/scsi_host/查看host编号,然后执行echo "- - -" > /sys/class/scsi_host/host0/scan,如果host编号不是0,替换即可,也可以一次性扫描所有host:for i in /sys/class/scsi_host/host/scan; do echo "- - -" > $i; done,执行后lsblk确认新磁盘出现。

fdisk找不到设备只是表象,根源在虚拟化层或内核识别环节,按平台重扫描、查驱动、看日志,绝大多数情况无需重装系统。

分享本文
本文为 简米科技官网 原创,已由运维技术专家审核。转载请注明来源:原文链接
售前咨询 服务热线 售后 邮箱