加速大型文件系统上 ACL 的备份

加速大型文件系统上 ACL 的备份

我正在尝试快速备份大型 GNU/Linux 文件系统上的 ACL。扩展权限实际上没有必要。

我在一个小的分区上运行了 4 个小基准测试,只是为了估计经过的时间(秒)和生成的文件大小(兆字节)。

  • getfacl -R -p /backup/dir > out_file:58.715秒(36MB)
  • find /backup/dir -printf "%m %u:%g %p \n" > out_file:54.053秒(27MB)
  • find /backup/dir -printf "%m %p \n" > out_file0.763秒(26MB)
  • ls -laR /backup/dir > out_file4.865 秒(20MB)

ls如果需要用户:组,那么这是最好的解决方案。

理想情况下,输出文件看起来应该是这样的:

755 user:group /full/path/to/dir
744 user:group /full/path/to/file
...

但据我所知,获取文件的完整路径ls需要额外的命令,这会减慢进程。我们谈论的是超大文件系统。

有没有更好(更快/更有效)的工具来ls处理这个问题?

find为什么与相比,检索用户:组信息时速度会如此显着地减慢ls

另外,ls还可以处理文件名中转义的特殊字符(使用选项-b)。

解决了:(感谢@shodanshok)第一次之后sync

  • getfacl -n -R -p /backup/dir > out_file:19.561秒(36MB)

但第二次运行相同的命令:

  • getfacl -n -R -p /backup/dir > out_file:2.496秒(36MB)

答案1

根据我的经验,getfacl用户名解析过程可能会限制 CPU。尝试添加开关-n,例如发出getfacl -n -R -p /backup/dir > out_file

在基准测试期间,请特别注意 inode/dentry 缓存,因为它很容易影响您的计时测试。在每次基准测试之前,请发出以下命令以清空两个缓存:sync; echo 3 > /proc/sys/vm/drop_caches

相关内容