我试图在关机后使用fio
验证存储数据,
为此目的,使用fio
使用--trigger-file
选项写入中途停止fio
操作(并模拟断电)。
然后使用fio
选项读取--verify_state_load
以仅检查设法完成的部分数据,但验证失败,似乎state_load无效(如果写入作业未终止,则读取验证将按预期正常工作部分通过触发器。)
是否有使用trigger / state_load的限制,我必须注意吗?
写作业参数:
[global]
verify_fatal=1
do_verify=0
loops=1
group_reporting=1
filename=/dev/nvme0n1
cpus_allowed=0-7
cpus_allowed_policy=split
runtime=0
verify=crc32c-intel
direct=1
rw=randwrite
verify_offset=100
ioengine=libaio
iodepth=32
size=200mb
bs=4096
verify_backlog=16384.0
[job_0]
size=209715200
offset=0
[job_1]
size=209715200
offset=1744830464
[job_2]
size=209715200
offset=3489660928
[job_3]
size=209715200
offset=5234491392
[job_4]
size=209715200
offset=6979321856
[job_5]
size=209715200
offset=8724152320
[job_6]
size=209715200
offset=10468982784
[job_7]
size=209715200
offset=12213813248
阅读工作参数:
[global]
verify_fatal=1
do_verify=1
loops=1
group_reporting=1
filename=/dev/nvme0n1
cpus_allowed=0-7
verify_state_load=1
cpus_allowed_policy=split
runtime=0
verify=crc32c-intel
direct=1
rw=read
verify_offset=100
ioengine=libaio
iodepth=32
size=1mb
bs=4096
verify_backlog=16384.0
[job_0]
size=1048576
offset=0
[job_1]
size=1048576
offset=1744830464
[job_2]
size=1048576
offset=3489660928
[job_3]
size=1048576
offset=5234491392
[job_4]
size=1048576
offset=6979321856
[job_5]
size=1048576
offset=8724152320
[job_6]
size=1048576
offset=10468982784
[job_7]
size=1048576
offset=1221381324
阅读工作中的错误:
开始8个过程 job_5:libaio没有执行I / O,也许可以尝试使用--debug = io选项获取详细信息? job_4:libaio没有执行I / O,也许可以尝试使用--debug = io选项获取详细信息? job_7:libaio没有执行I / O,也许可以尝试使用--debug = io选项获取详细信息? job_6:libaio没有执行I / O,也许可以尝试使用--debug = io选项获取详细信息? job_3:libaio没有执行I / O,也许可以尝试使用--debug = io选项获取详细信息? job_2:libaio没有执行I / O,也许可以尝试使用--debug = io选项获取详细信息? 验证:错误的标题偏移466944,希望20480在文件/ dev / nvme0n1偏移20480,长度4096 验证:错误的标题偏移462848,想要24576在文件/ dev / nvme0n1偏移24576,长度4096 job_0:libaio没有执行I / O,也许可以尝试使用--debug = io选项获取详细信息? fio:pid = 1920,err = 84 / file:io_u.c:1985,func = io_u_queued_complete,error =多字节或宽字符无效或不完整
答案 0 :(得分:0)
<强>更新强>
我认为这最终是由@RonenWeiss在https://github.com/axboe/fio/issues/468上提出的。在那里,一个fio维护者建议看到的问题是因为数据的写入是用rw=randwrite
完成的,但单独的阶段“验证”是使用rw=read
完成的,因为fio基于重新生成关闭作业参数的数据,第二阶段是向第一阶段生成不同的数据,从而报告不匹配。如果第二阶段使用rw=randread
,则不应存在不匹配(假设数据已正确保存;-)。
原始回复
嗯,你最好直接向fio人询问这个问题(如果你选择这样做,请看看https://github.com/axboe/fio/blob/master/REPORTING-BUGS,并确保你使用的是最新版本的fio并查看{{3}了解那些可能的版本。
你的工作看起来有点奇怪(verify_backlog
没有取小数,你可以在阅读工作中使size
成为全局,但你不断重复它,runtime
是0等)。立即脱颖而出的是,在你的“验证”工作中,你使用与原始工作不同的大小,这可能不会有一个圆满的结局,但我不能说这是肯定的问题。
不幸的是,你的工作既大又复杂,这使得难以发现问题(我非常随意,所以如果我在30秒内看不到问题,我通常会默默地继续前进)。如果您在使用fio作业时遇到问题,我强烈建议您将作业参数剥离到最低限度仍然会导致问题发生(例如,只有一个作业可以解决问题吗?只有一个作业?有多少选项可以你从全局变量中删除问题继续发生?)。这样,像我这样的人有一个减少诊断问题的借口; - )
答案 1 :(得分:0)
我的问题似乎是因为我使用fio rw = randwrite来生成数据并分离rw =读取作业以在触发后验证数据,使用rw = randread来验证数据解决了我的问题