是否存在处理以下用例的文件格式......
我想创建一个 tar 文件(或其他任何文件 - 我在这里使用 tar,因为它是一种包含多个文件的众所周知的文件格式),即使我只能访问该文件的特定块,它也可以可用。
例如,假设我将我的 mp3 和照片集打包成一个 100GB 的 tar 文件,然后将该文件放入某个长期存储中。稍后,我想访问特定的 mp3 文件。我不想只为了得到一个 mp3 而下载整个 100GB 的 tar 文件。事实上,假设我无法下载整个 100GB 的 tar 文件。相反,我想说“给我 100GB tar 文件中的第 10 到 19 兆字节”,然后神奇地从这 10 兆字节中提取 mp3。
是否存在这样的文件格式?
答案1
是的,您可以使用 tar 存档来实现这一点,但要使其正常工作,您需要保存所写内容的日志,告知存档中各个文件的偏移量。否则,了解 tar 存档中内容的唯一方法是从头到尾阅读整个内容,这违背了仅下载所需部分的想法。
tar
此外,如果您只能以整个块的形式下载档案,而不是以任意边界上的任意字节数下载,那么拥有一个可以在块内指定偏移量处开始和结束读取的程序将会很有帮助。我自己的tar
确实如此,但这是一个不寻常的功能;如果没有这个功能,替代方法是使用head
块tail
来提取您想要取消的部分tar
。
答案2
我知道已经晚了,不确定 OP 最终选择了什么,但这里有一些建议:
您可以使用您选择的文件系统创建一个新分区,并将您想要存储的所有内容复制到该分区。然后尽可能缩小分区以节省空间。然后您可以使用例如dd
创建分区的映像,假设它是/dev/sdc3
,最简单的:
dd if=/dev/sdc3 of=backup_image.bin
对于 Windows Google“适用于 Windows 的 dd”或者找到一个可以制作分区或设备的逐字节映像的等效程序。
然后,该映像文件可以放入长期存储中。只要您可以访问该文件并且您的长期存储介质支持随机寻道,您就可以直接挂载该文件,例如:
sudo mkdir /media/backup
sudo mount /path/to/backup_image.bin /media/backup
对于 Windows,Google 提供“windows 安装分区映像”。
您将拥有对数据的完全访问权限,并且仅执行支持文件系统导航和访问该文件所需的最少读取量。
另一个更明显的选择是根本不将文件合并到单个存档文件中。在长期存储上创建一个普通文件系统,然后将文件复制到其中。文件系统已经提供了访问特定文件而无需访问不需要的数据的方法,您可能不必重新发明轮子。
此外,还有一些专有格式,例如您描述的格式,例如备份软件安克诺斯可以将数据备份到网络安装的驱动器或任何地方,备份到“.TIB”文件中,这些文件可以浏览(并提取数据),而无需读取整个文件。我不知道 Acronis 是否支持浏览 Linux/OSX 文件系统备份,但我知道它支持这种类型的 FAT32 和 NTFS 备份浏览。我相信还有其他的。