从 zip 文件中提取单个文件是一个快速的操作,所以我假设 TAR 也是如此,但我了解到即使 TAR 文件没有压缩,提取文件也需要很长时间。我曾使用 tar 备份 OS X 上的主文件夹,然后我需要一个文件。由于 tar 不知道文件在哪里,它需要扫描整个 300GB 文件才能提取。这意味着 TAR 对于大多数备份场景来说是一种糟糕的格式,所以我想知道我的选择。
那么,哪些档案文件格式适合快速提取单个文件?
尽管这个问题实际上与压缩无关,但我并不介意列出结合了归档和压缩的格式(如 zip)的答案,在这种情况下“固体压缩“ 将很重要。
答案1
听起来提取速度和效率是你的主要关注点,我假设你使用的是 Linux 或 macOS,因此想要保留特殊文件属性(zip 和 7z 忽略的属性)。在这种情况下,一个优秀的存档格式应该是:
ext[2/3/4] 文件系统- 只需将文件复制到某个地方,然后提取单个文件就和挂载和读取原始文件一样快速和简单。如果您愿意,您可以将整个存档文件系统放在单个存档文件中,只需创建一个足够大的文件并对其进行格式化和挂载(甚至不再需要该
-o loop
选项)。优点:
一个很好的好处是,您可以轻松地将加密(LUKS)添加到整个存档文件,或文件系统支持的任何其他加密(eCryptFS,EncFS 等)。
您还可以轻松使用基于 rsync 的备份解决方案。
可以轻松添加/删除文件(最大可达整个存档文件的大小)。
缺点:
- 如果使用单个存档文件,则必须在添加文件之前选择其大小,并且它不会动态改变大小。
- 即使档案位于单个文件中,仍然可以扩展或缩小整个档案,但您需要一些工具来
resize2fs
缩小文件系统,然后truncate
缩小文件(或反之亦然)。
如果你正在使用,请使用与你当前使用的文件系统相同的文件系统苹果系统并且它喜欢除 ext 之外的其他东西。我很确定 macOS 的 mount 命令也适用于单个大型存档文件。
如果您确实也想要一些压缩,那么通常就是固定存档和慢速读取的用武之地。一些文件系统直接支持压缩(btrfs、reiserfs/reiser4,计划用于 ext?)但我只会选择:
壁球- 它可能是压缩王,保存文件属性,并允许快速提取单个文件(实际上装载和浏览每个文件)。它对存档也很好,并且具有可调节的压缩级别,使用它。
或者将它与增量备份和覆盖挂载结合起来,得到一个很好的“部分备份但完整文件”的解决方案。
缺点是无法增加或缩小档案的大小,也无法添加/删除文件。
或者只使用现有的备份产品(Time Machine?)。
如果您确实想使用 7z/zip 之类的存档,但仍保留文件属性,则可以单独对每个文件进行 tar 处理(保存属性),然后将单独的 tar 文件存储在 7z/zip 存档中。这需要额外的步骤,更加麻烦,但可以让您轻松提取单个(tar 格式)文件,并扩展或缩小存档,而无需重新压缩所有内容(如果它不是固定存档)。
答案2
Zip 格式用于随机高效地提取单个文件。Zip 存档末尾包含一个目录,允许快速访问单个文件 - 压缩或未压缩。
答案3
大多数现代压缩存档格式都包含一个数据库或目录,其中包含存储在其中的文件和文件夹。这些格式包括:7-Zip、ACE、ARC、ARJ、BZIP2、CAB、CPIO、GZIP、IMG、ISO (ISO9660)、LHA、RAR、RPM、SFX、SQX、TAR、TBZ (TAR.BZ)、TGZ (TAR.GZ)、TXZ (TAR.XZ)、XZ、ZIP、Zip64 和 ZOO。这些格式允许您根据需要提取单个文件或文件夹。
ZIP 是目前最常见和使用最广泛的文件格式。某些操作系统(如 Windows)对 ZIP 文件提供原生支持,因此您可以将 ZIP 文件当作标准文件夹来使用。
至于提取单个文件的效率,我从未见过对此进行测试。但是,我曾以这种方式使用过 ZIP 档案,因此我可以说它相当快,具体取决于文件的大小。