稀疏文件(sparse file)中的全零区间不会真正分配磁盘块,只在文件元数据里记录"这里有一段空洞"。读取时文件系统按需返回零,因此逻辑大小和物理占用可以相差极大。
—
浏览器直链适合快速取用;命令行工具支持断点续传,10 GiB 大文件更推荐这种方式。
下载或生成之后,用下面的命令确认稀疏标记与物理占用。左右两个数字差距越大,说明稀疏效果越明显。
通过 HTTP 下载时,浏览器和 curl/wget 会把服务端传来的每一个字节真实写入磁盘。如果服务端把空洞当作零字节发送,你本地拿到的就是一个占满 10 GiB 的普通文件——逻辑大小正确,但物理占用也是满的。
想在本地得到真正的稀疏文件,最可靠的方式是直接用上面「下载方式」里的本地生成命令,一条命令即可完成,瞬间生成且不占磁盘。
已经下载了普通大文件,能不能事后转成稀疏?分平台看:Linux 可以,用 fallocate --dig-holes,它只会把全零的块打回空洞,非零数据原样保留,是安全的。
Windows 上则不建议这么做。实测结论:fsutil sparse setflag 单独执行只打标记、不释放任何磁盘空间;而真正能释放空间的 fsutil sparse setrange 会无条件把指定区间清零——用它去转换已下载的文件,文件内容会被直接销毁。所以在 Windows 上请直接用本地生成命令重新生成。
部署与使用前的几点提醒。
NTFS(Windows)、ext4 / xfs / btrfs(Linux)、APFS / HFS+(macOS)都支持稀疏文件。FAT32 和 exFAT 不支持,放到 U 盘上会真实占满空间。
用普通方式复制稀疏文件,多数工具会把空洞展开成真实的零,体积瞬间膨胀到逻辑大小。需要保留稀疏特性时用 cp --sparse=always、rsync -S 或 tar -S。
Nginx 默认开启 Range 请求,支持断点续传。建议确认 sendfile on,并按需调大 send_timeout。随包附带的部署说明里有可直接套用的配置片段。
生成脚本会在结束时打印 SHA-256。把它填进页面顶部的 CONFIG.sha256,卡片上就会显示真实校验和;留空则显示"部署后填入"。