如何识别sd 0:4:0:0对应磁盘?排查Ubuntu离线设备I/O报错
如何判断"sd 0:4:0:0: rejecting I/O to offline device"报错对应内置硬盘还是USB驱动器?
我来帮你搞定这个问题,咱们一步步来排查这个报错对应的设备:
第一步:定位报错对应的具体设备节点
这条报错里的sd 0:4:0:0是SCSI设备标识,我们需要先找到它对应的/dev/sdX(比如sda、sdb这类):
- 执行这条命令,抓取报错前后的关联日志:
你会在输出里看到类似dmesg | grep -A 5 -B 5 "rejecting I/O to offline device"sdX:的字样,这个X就是设备的编号(比如sdb),对应的完整设备路径就是/dev/sdX。
第二步:判断设备是内置硬盘还是USB驱动器
拿到/dev/sdX之后,用下面任意一种方法都能快速区分:
方法1:用lsblk看传输类型
这是最直观的方法,执行:
lsblk -o NAME,TYPE,TRAN
输出里的TRAN列会明确显示设备的传输总线类型:
- 如果是USB闪存盘,
TRAN列会显示usb - 内置SATA硬盘会显示
ata,NVMe固态则是nvme
举个例子,输出可能长这样:
NAME TYPE TRAN sda disk ata sdb disk usb
方法2:查看sysfs设备路径
执行以下命令(把sdX换成你找到的设备编号):
ls -l /sys/block/sdX
看输出里的device符号链接指向的路径:
- 路径里包含
usb字样的就是USB设备,比如/sys/devices/pci0000:00/0000:00:14.0/usb2/2-1/.../block/sdb - 内置硬盘的路径会包含
ata或者nvme,比如/sys/devices/pci0000:00/0000:00:17.0/ata1/.../block/sda
方法3:用udevadm查看设备总线信息
执行:
udevadm info -q all -n /dev/sdX
在输出里找ID_BUS字段:
- 如果是
ID_BUS=usb,那就是你的USB闪存盘 - 如果是
ID_BUS=ata,就是内置硬盘
另外补充个小知识点:报错里的0:4:0:0是host:channel:target:lun的SCSI地址格式,USB存储设备通常会被分配到独立的host控制器,但这个不如上面的方法直接好懂,优先用前面三种方法就行。
内容的提问来源于stack exchange,提问作者Codism
相关产品推荐
相关产品推荐

