电脑必备
同一个部署包,我拿三台机子解压,解压顺序竟和文件大小有关
36 0 13
先说结论:解压顺序不是玄学,是文件系统在排序。
上周发版,部署包里有个 3G 的日志归档和一堆配置文件,用 Win解压缩 解压到共享盘,结果解压到一半卡在某个小文件上十几秒,进度条跟死了一样。我以为是磁盘 IO 问题,换了台机器还是一样。
实测环境:
- 机器 A:Win10 22H2,SATA SSD,NTFS
- 机器 B:Win11 23H2,NVMe SSD,NTFS
- 机器 C:Win10 LTSC,机械盘,NTFS
现象:
三台机器解压同一个包,速度差异巨大,但卡顿点完全一致——都是解压到 config/ 目录下那堆 1KB 左右的小文件时卡住。
排查过程:
- 先用 7-Zip 命令行
7z l -slt看包内文件顺序,发现归档里文件是按添加顺序排的,不是按大小。 - 但 Win解压缩 解压时似乎会按目录遍历,遇到小文件密集的目录就频繁创建、关闭句柄,机械盘上尤其明显。
- 我把包用 7-Zip 重新打包,加了
-m0=lzma2 -mx=5,并且在打包前先把小文件统一挪到config/子目录里,减少目录层级。 - 再解压,三台机器卡顿时间从十几秒降到 1-2 秒。
结论:
- Win解压缩 解压速度确实快,大文件吞吐能跑满 SATA 带宽,这点没得黑。
- 但它对小文件密集的目录处理一般,尤其是机械盘上,频繁的元数据操作比数据读写还慢。
- 7-Zip 命令行支持
-snl之类的选项,可以按存储顺序解压,减少磁头来回跳。Win解压缩 没这个开关。
给普通用户的建议:
- 日常解压个软件包、电影,Win解压缩 够快够省心。
- 如果你跟我一样天天处理部署包、日志归档,包里小文件多,建议打包时就按目录结构整理好,或者直接用 7-Zip 命令行解压,别跟进度条较劲。
抛个问题: 你们解压大包时有没有注意过进度条卡在某个固定位置?我怀疑跟归档工具默认的排序策略有关,有懂的老哥说说 7-Zip 和 WinRAR 在解压顺序上到底怎么排的?
登录后可以为帖子点赞,但本帖内容对所有人开放阅读。
