我们正在构建一个数据归档系统,我们希望能够选择在不同的存储类型(磁带/磁盘/云)上存储数据的冗余副本,并且还可以选择使用不同的归档格式:tar、zip 等
许多文件都相当大(50GB+),并且数据一旦归档就永远不会被修改。我们发现磁带非常适合这种用例。我们将每个存档文件的块偏移量存储在数据库中,一旦磁带几乎满了,我们就通过将所有文件块偏移量的索引写入末尾来“最终确定”它(因此它是自描述的)。
我想知道是否可以使用未格式化的硬盘(即没有任何文件系统)来执行相同的操作,并将其作为块设备读取/写入。我们将从第一个块开始将存档附加到磁盘,并在另一个存档之后立即写入一个存档,直到磁盘几乎已满。这样我们就可以避免任何文件碎片问题,充分利用磁盘容量,提高读/写速度,并且在需要时更容易进行数据恢复。
磁带使我们能够轻松地查找写入数据的末尾,而对于磁盘,我想我们必须记录最后使用的块的编号,并确保我们从下一个块开始写入下一个存档。我想知道我们如何以严格的方式计算它,这样我们就可以确保我们不会覆盖任何以前写入的数据。
使用dd,我认为使用seek 选项这将是相当简单的。然而,我们希望使用归档工具(tar、zip 等)将数据直接写入磁盘(就像我们使用磁带一样),以避免将文件复制到中间归档文件(在我们的临时磁盘上)所花费的时间,然后使用dd将此文件写入存档磁盘。然而,tar、zip 没有像 dd 那样的任何选项。我想他们只会打开块设备并从头开始写入。
想知道是否有人以前做过类似的事情,或者对这个想法有任何其他意见/想法 - 特别是需要注意的潜在陷阱。另外,在写入任何内容之前我是否应该用零填充驱动器?
答案1
“tar”可以选择输出到标准输出,然后可以通过管道传输到另一个程序(例如“dd”)以转到所需的设备。
许多年前,我在一家制造磁带和光学备份机制的公司工作。一旦为光学设备编写了驱动程序,对于备份软件的其余部分来说,它就像磁带设备一样。