我最近决定使用以下方法存档一些数据柏油。数据由同一文件夹的大量备份组成;这意味着它包含大量重复项。我读到,由于 Tar 缺少索引,它无法很好地处理包含大量重复项的数据。所以我的问题是 Tar 是否适合存档此类数据?
我最关心的是保存档案中的所有原始数据,这包括所有文件时间戳:创建、修改、访问。
答案1
当然,无论有多少重复文件,Tar 都可以归档这些备份。如果 100 个不同文件夹中有 100 个文件 abc.doc 的重复文件,则该文件将被归档 100 次。但这样做效率不高。
如果备份工具可以删除重复数据,它会识别这 100 个相同的文件,备份其中一个,并引用 99 次。如果其中一个版本发生变化,它会删除引用,并单独备份。
答案2
GNU tar
创建时间:
Linux 并不真正记录文件创建时间。它有ctime
时间戳,有时会被误认为是创建时间,但实际上是“inode 更改时间”:它记录上次更改文件或其权限、所有者等的时间。也就是说,它更改的频率比 更高mtime
。ctime
时间戳由内核处理,不能由用户设置为任意值(尽管您可以很容易地将其重置为当前时间)。
修改时间:
mtime
保存于tar
访问时间:
tar
通常会更改原始文件的访问时间。您可以使用标志来阻止这种情况--atime-preserve
。您可能还需要--preserve
保留权限(以及目录排序顺序)的标签。
我不知道您是否可以tar
保留存档文件的 atimes,但您可以通过以下方式修复这些问题:
- 解压
- 在每个文件上使用
touch -a -d TIME FILE
(时间格式为[[CC]YY]MMDDhhmm[.ss]
) - 重新涂焦油
tar --atime-preserve
警告:--atime-preserve
当前使用会记住 atime,因此在读取后可以保留它。在大多数系统上,这会导致 ctime 发生更改,有时会干扰其他软件(例如安全软件)。
其他软件
您可能会研究rsync
(参见本文例如)或版本控制系统(如git
)