我想知道Linux文件系统中是否支持每个文件的归档位
https://en.m.wikipedia.org/wiki/Archive_bit
我需要在本机 fs 中具有相同逻辑的东西,例如 ext3,而不是 fat,也不是 ntfs。
答案1
Linux 没有与 DOS/Windows 存档位完全相同的功能,但您可以制作类似的东西。现代 Linux 系统支持自定义文件属性,至少在 ext4 和 btrfs 上是这样。您可以使用getfattr
列出它们并setfattr
设置它们。自定义属性有扩展属性在用户命名空间中,即名称以五个字符 开头user.
。
$ touch foo
$ getfattr foo
$ setfattr -n user.archive -v "$(date +%s -r foo)" foo
$ getfattr -d foo
# file: foo
user.archive="1471478895"
如果您愿意,可以使用自定义属性。该值可以是任何短字符串(可用存储量取决于文件系统和内核版本;几百个字节应该没问题)。在这里,我使用文件的时间戳;修改将更新实际时间戳,但不会更新自定义属性中的副本。
请注意,如果通过删除文件并将其替换为新版本(而不是覆盖现有文件)来修改文件,则自定义属性将消失。这应该适合您的目的:如果该属性不存在,则应该备份该文件。
Unix 世界中的增量备份程序不使用自定义属性。他们所做的是将文件的时间戳与备份的时间戳进行比较,如果文件发生更改则备份该文件。这更可靠,因为它考虑了备份的实际状态——仅根据系统状态进行的备份更容易由于备份消失或由于维护属性时发生的错误而丢失文件。
答案2
不,没有(直接)。
Linux/Unix 本机文件系统为每个文件维护多个时间戳(至少是上次修改时间mtime
、索引节点更改时间ctime
和上次访问(或读取)时间)atime
。标准备份实用程序主要查看mtime
时间戳来确定文件上次更改的时间确定是否在增量备份中包含给定文件,这比归档位更灵活,因为备份系统只需将mtime
每个文件的时间戳与完整备份的时间戳进行比较即可对任何完整备份运行增量备份。
如果您专门寻找存档位的行为,因为您要将其用于计算增量备份文件集以外的其他用途,则您需要提供有关您要完成的任务的更多详细信息。
也就是说,你可以模拟使用时间戳的归档位的行为mtime
,因为您可以mtime
从命令行或您自己的程序设置时间戳。例如,假设您出于您的目的定义了mtime
of 0
(UNIX“epoch”) 与清除存档位的含义相同。然后,如果文件被修改,操作系统会将 设置mtime
为最近修改的时间戳(因此mtime
将不再是0
,您可以将其解释为好像已设置存档位)。
您可以mtime
使用 shell 脚本设置touch
(请参阅 参考资料man touch
),并且许多 shell 工具(例如find
支持使用 进行搜索)mtime
。从您自己的 C 或其他语言程序中,从 stat(2) 和 utimes(2) 手册页开始。
答案3
Linux 文件系统上没有这样的属性。 XFS 支持自定义属性,但这在备份中使用效率非常低。
常见的解决方案是依赖文件修改时间(mtime
)。进行增量备份只是将那些mtime
比上次备份时间更长的文件归档。