tar文件能否高效随机编辑?有无无需重写全量归档的单文件修改方案?
归档格式单文件编辑问题解答
tar归档的单文件修改方案
tar格式本身是流式归档设计,原生不支持随机读写,常规修改操作确实需要重写整个归档,但存在两种无需全量重写的特殊操作方式:
- 追加更新:如果仅需要更新已有文件或新增文件,可以使用
tar -uf 目标归档.tar 待更新文件路径命令,该命令会将新版文件直接追加到归档末尾,不会修改原有归档内容。读取时tar会自动取同名文件的最后一次追加版本,实现更新效果。该操作会产生碎片化冗余,旧版文件仍然占用归档空间,仅能通过全量重打包释放冗余空间。 - 标记删除:GNU tar支持
--delete参数删除归档内的指定文件,操作逻辑同样是在归档末尾追加删除标记,不需要重写原有内容,同样会产生空间冗余。
注意:经过gzip、xz、bzip2等压缩的tar归档,任何修改都必须全量解压后重新压缩,不存在跳过全量重写的可能。
支持无需全量重写的单文件编辑的归档格式
以下格式原生支持单文件增删改无需重写整个归档:
- zip:最通用的随机修改支持格式,单文件增删改仅操作对应数据块,少量冗余可通过归档重整回收。
- 非固实压缩的7z/rar:固实压缩模式会将所有文件合并为一个压缩块,必须全量重写,关闭固实压缩后即可支持单文件独立修改。
- wim:Windows映像格式,原生支持单文件随机修改,无需重写整个映像。
- squashfs(结合overlay挂载):只读的squashfs归档本身不支持修改,通过overlayfs挂载后修改内容会写入独立的可写层,无需修改原归档。
内容的提问来源于stack exchange,提问作者Jaz
相关产品推荐
相关产品推荐

