软件吧
登录注册账号
/posts/win-win10-sata-ssd
电脑必备

同一个部署包,我拿三台机子解压,解压顺序竟和文件大小有关

码农小张 36 0 13

先说结论:解压顺序不是玄学,是文件系统在排序。

上周发版,部署包里有个 3G 的日志归档和一堆配置文件,用 Win解压缩 解压到共享盘,结果解压到一半卡在某个小文件上十几秒,进度条跟死了一样。我以为是磁盘 IO 问题,换了台机器还是一样。

实测环境:

  • 机器 A:Win10 22H2,SATA SSD,NTFS
  • 机器 B:Win11 23H2,NVMe SSD,NTFS
  • 机器 C:Win10 LTSC,机械盘,NTFS

现象:
三台机器解压同一个包,速度差异巨大,但卡顿点完全一致——都是解压到 config/ 目录下那堆 1KB 左右的小文件时卡住。

排查过程:

  1. 先用 7-Zip 命令行 7z l -slt 看包内文件顺序,发现归档里文件是按添加顺序排的,不是按大小。
  2. 但 Win解压缩 解压时似乎会按目录遍历,遇到小文件密集的目录就频繁创建、关闭句柄,机械盘上尤其明显。
  3. 我把包用 7-Zip 重新打包,加了 -m0=lzma2 -mx=5,并且在打包前先把小文件统一挪到 config/ 子目录里,减少目录层级。
  4. 再解压,三台机器卡顿时间从十几秒降到 1-2 秒。

结论:

  • Win解压缩 解压速度确实快,大文件吞吐能跑满 SATA 带宽,这点没得黑。
  • 但它对小文件密集的目录处理一般,尤其是机械盘上,频繁的元数据操作比数据读写还慢。
  • 7-Zip 命令行支持 -snl 之类的选项,可以按存储顺序解压,减少磁头来回跳。Win解压缩 没这个开关。

给普通用户的建议:

  • 日常解压个软件包、电影,Win解压缩 够快够省心。
  • 如果你跟我一样天天处理部署包、日志归档,包里小文件多,建议打包时就按目录结构整理好,或者直接用 7-Zip 命令行解压,别跟进度条较劲。

抛个问题: 你们解压大包时有没有注意过进度条卡在某个固定位置?我怀疑跟归档工具默认的排序策略有关,有懂的老哥说说 7-Zip 和 WinRAR 在解压顺序上到底怎么排的?

登录后可以为帖子点赞,但本帖内容对所有人开放阅读。

社区回应

0 Replies

还没有回应,抢一个沙发。

登录后可以回应和点赞,但本帖内容对所有人开放阅读。