fio-数据不一致debug

1、盘信息

  • nvme id-ns /dev/nvme0n1 -H
    • nsze    : 0x37e3e92b0
      • 扇区数量(sector):0x37e3e92b0=15002931888
    • LBA Format  0 : Metadata Size: 0   bytes - Data Size: 512 bytes - Relative Performance: 0 Best (in use)
      • 扇区大小:512 bytes
  • 总容量:扇区数量 * 扇区大小=7681501126656 bytes
  • fio版本:fio-3.19

2、写盘

  • fio  -rw=write -verify=md5 -numjobs=1 -direct=1 -filename=/dev/nvme0n1 -verify_pattern=1310 -bs=256k -ioengine=libaio -iodepth=128 -name=test1-rw -size=2% -offset=73%
开始位置(bs=256k、lbaf=512 Byte) 结束位置(bs=256k、lbaf=512 Byte)

73% *  15002931888(扇区数量) =  10952140278.24

 75% *  15002931888 (扇区数量)=  11,252,198,916

默认对齐到bs、实际起始位置:10952140288(往后递增,刚好能整除bs)

实际起始位置、Byte:5607495827456 =  10952140288 *  512 = 0x 51998cc0000 = 扇区数量 * 扇区大小

默认对齐到bs、实际结束位置:11,252,198,912(往前递减,刚好能整除bs)

实际结束位置、Byte:11,252,198,912 * 512 =  5,761,125,842,944

  • hexdump -C -n 512 -s 5607495827456 /dev/nvme0n1
    • 计算1个bs 校验值
    • dd if=/dev/nvme0n1 of=/tmp/block.bin bs=262144 count=1 skip=21390899 iflag=direct
      • 262144 = 256k
      • 21390899 =  5607495827456 / 262144
    • 手动计算md5,跳过header,计算data部分
      • dd if=/tmp/block.bin bs=1 skip=56 count=262088 2>/dev/null | md5sum
      • 结果:2b7dd2cd6c3c744ce77d0a64698d440f
  • hexdump -C -n 512 -s 5607495826944 /dev/nvme0n1(前1个lba)
  • hexdump -C -n 512 -s 5761125842944 /dev/nvme0n1
  • hexdump -C -n 512 -s 5761125842432 /dev/nvme0n1(前1个lba)

image

  • 重写部分区域:fio  -rw=write -numjobs=1 -direct=1 -filename=/dev/nvme0n1 -verify_pattern=1212 -bs=256k -ioengine=libaio -iodepth=128 -name=test2-rw -size=1% -offset=74%
开始位置(bs=256k、lbaf=512 Byte) 结束位置(bs=256k、lbaf=512 Byte)
0.74 *  15002931888 =  11,102,169,597.12 75% *  15002931888 (扇区数量)=  11,252,198,916

实际开始位置:11,102,169,600

转换为Byte:5,684,310,835,200

实际结束位置:11,252,198,912

转换为Byte:5,761,125,842,944

hexdump -C -n 512 -s 5684310835200 /dev/nvme0n1

hexdump -C -n 512 -s 5684310834688 /dev/nvme0n1(前1个lba)

hexdump -C -n 512 -s 5761125842944 /dev/nvme0n1

hexdump -C -n 512 -s 5761125842432 /dev/nvme0n1(前1个lba)

2、读盘

  • fio  -rw=read -verify=md5 -numjobs=1 -direct=1 -filename=/dev/nvme0n1 -bs=256k -ioengine=libaio -iodepth=128 -name=test3-rw -size=2% -offset=73%
md5: verify failed at file /dev/nvme0n1 offset 5684310835200, length 262144 (requested block: offset=5684310835200, length=262144)
       Expected CRC: bc04bc04bc04bc04bc04bc04bc04bc04
       Received CRC: 4d5f70ead34343c58f0729f3f5282cc7
fio: verify type mismatch (17 media, 2 given)
  • Expected CRC: bc04bc04bc04bc04bc04bc04bc04bc04
    • 从header中读取(对于md5算法,从第41Byte 到 第56Byte
    • hexdump -C -n 262144 -s 5684310835200 /dev/nvme0n1

image

  • Received CRC: 4d5f70ead34343c58f0729f3f5282cc7
    • 由data部分计算得到(对于md5算法,是从第57Byte 到256KB)
    • 导出整个bs:dd if=/dev/nvme0n1 of=/tmp/block.bin bs=262144 count=1 skip=21683925 iflag=direct
      • 21,683,925 = 5684310835200 / 262144
    • 跳过header部分:dd if=/tmp/block.bin bs=1 skip=40 count=262104 2>/dev/null | md5sum
      • 4d5f70ead34343c58f0729f3f5282cc7  -
      • 第40个Byte开始为数据部分(bc 04 不断重复)
生成:md5sum ./rumenz.img  > list.md5
检查:md5sum -c list.md5

3、crc32c算法

  • Expected CRC: 2b7dd2cd(从第41Byte 到 第44Byte

image

  • Received CRC: 不同工具实现不一致、难以与 fio 对齐,待后续补充手动计算方法

hexdump -C -n 262144 -s 5684310835200 /dev/nvme0n1

dd if=/dev/nvme0n1 of=/tmp/block.bin bs=262144 count=1 skip=21683925 iflag=direct

posted @ 2026-06-01 12:02  Fēngwèi  阅读(4)  评论(0)    收藏  举报