我正在尝试快速备份大型 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_file
:0.763秒(26MB)ls -laR /backup/dir > out_file
:4.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