You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何复现du命令抛出Input/output error的故障场景

复现du命令Input/output error报错方案

所有操作需root权限,必须在纯测试环境执行,严禁操作生产数据盘或系统盘,避免数据丢失。

Input/output error对应系统错误码EIO,是底层块设备IO请求失败时返回的标准错误,不需要物理损坏硬盘,通过内核设备映射机制即可100%稳定复现。

推荐方案:使用dm-error模拟故障块设备

该方案无硬件风险,测试完成后可一键清理环境:

  1. 创建虚拟磁盘文件作为块设备后端:

    dd if=/dev/zero of=/tmp/virtual_disk.img bs=1M count=1024
    
  2. 将虚拟文件映射为loop块设备,记录返回的设备路径(示例为/dev/loop0,实际操作替换为你环境返回的路径):

    losetup -fP /tmp/virtual_disk.img
    
  3. 格式化块设备并挂载到测试路径/data:

    mkfs.ext4 /dev/loop0
    mkdir -p /data
    mount /dev/loop0 /data
    
  4. 写入测试文件,验证正常场景下du可正常执行:

    mkdir -p /data/testdir
    touch /data/testdir/a.txt /data/b.txt
    du -sh /data  # 此时会正常返回目录大小
    
  5. 替换为故障映射设备,触发IO错误:

    umount /data
    # 创建全量返回IO错误的映射设备
    echo "0 $(blockdev --getsize /dev/loop0) error" | dmsetup create error_disk
    mount /dev/mapper/error_disk /data
    
  6. 执行测试命令,即可复现目标报错:

    du -sh /data/
    

    预期输出完全匹配示例效果:

    du: cannot access '/data/': Input/output error

  7. 测试完成后清理环境:

    umount /data
    dmsetup remove error_disk
    losetup -d /dev/loop0
    rm -f /tmp/virtual_disk.img
    

如果需要模拟遍历子目录/文件时才触发IO错误的场景,可以替换dm-error为dm-flakey靶,配置自定义的IO错误触发概率、触发时间即可。

其他可触发Input/output error的命令

只要是对故障块设备上的文件/目录做读写、属性查询、遍历操作的命令,都会抛出同款错误,常见可用于测试的命令如下:

  • ls -l /data/
  • find /data -type f
  • cat /data/b.txt
  • stat /data/testdir
  • df -h /data

内容的提问来源于stack exchange,提问作者Subhash Karemore

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 13:36:24