进度条说复制完了 U盘其实还在写!这个15年bug终于修了
快科技10月28日消息,KDE开发者梅文·卡尔在KDE官方博客披露,一个存在15年、被其称为KIO最严重缺陷的bug已正式修复,将随2026年11月13日发布的KDE Frameworks 6.32推送。
问题最早于2011年9月提交,编号281270。KDE向USB闪存盘复制文件时,进度条与完成通知反映的只是数据写入本地缓存的速度,而非真正写入可移动存储的时刻。

报告者当时发现,向理论极限12Mbit/s的USB 1.1设备复制文件,通知竟显示约50MB/s。

后果比数字错误更严重。在一个写入速度约2.3MB/s的USB 2.0盘上复制128MiB文件,Dolphin会提前一分多钟判定复制完成;若用户在这个窗口内拔出U盘,数据直接丢失。
技术根源在于KIO的文件worker通过write()调用写入数据,只要数据进入内存页缓存,write()就会返回,内核随后择机写入设备。
本地SSD上这个延迟几乎不可感知,但在慢速USB盘或网络文件系统上,进度条严重超前于真实写入进度。
修复并非一蹴而就。早在2011年9月,就有开发者提出使用sync_file_range()获知真实写入时刻,但后续实现多次出错。
2021年该bug被提升至最高优先级,2024年开发者两次尝试仍未正确调用。最终通过四个KIO合并请求,引入自适应回写窗口,才让完成对话框如实反映数据落盘状态。

编辑:红茶
【本文结束】如需转载请务必注明出处:快科技
