rm -rf
在对目录或仅rm -rf
通过 NFS的目录进行操作之前,先登录具有该目录的机器在时间上会有很大的不同吗?
pet*_*erh 11
当然ssh更好。
Nfs 使用具有各种远程过程调用和数据同步等待时间的复杂网络协议。在 ssh 的情况下,这些不适用。
此外,还有很多锁。nfs 中的文件删除以这种方式工作:
rm
命令给出了unlink()
系统调用unlink()
调用unlink()
在远程端执行此调用unlink()
原始调用的退出代码 0rm
rm
迭代到下一个文件,转到 1现在,重要的是:在 2-7 之间,rm
必须等待。它可以unlink()
异步发送下一个调用,但它是一个单线程的,不是面向事件的工具。即使可以,它仍然需要棘手的 nfs 挂载标志。直到没有得到结果,它才会等待。
Nfs - 以及任何网络文件系统 - 总是慢得多。
在许多情况下,您可以使用一个技巧使递归删除准无限速度:
mv -vf oldfilms oldfilms-
)rm -rf oldfilms- &
)从许多(但不是全部)方面来看,这种目录删除看起来好像是在几乎零时间内发生的。
扩展:正如@el.pascado 在他的精彩评论中提到的,实际上 2-7 必须为任何文件运行3x:
lstat()
系统调用),unlink()
的情况下,在目录的情况下,opendir()
递归删除其中的所有文件/目录,然后closedir()
,最后rmdir()
。readdir()
调用迭代到下一个目录条目。这需要 3 个用于文件的 nfs RPC 命令,另外 3 个用于目录。
是的。也许会。这取决于。对于少量的文件和目录,它不会有太大的区别。
在 NFS 挂载目录上批量执行文件操作很慢。如果您有机会登录到 NFS 服务器本身并在实际目录上执行这些操作,那么这会更快。
让我们通过删除我从 CVS 检出并安装在 NFS 上的 OpenBSD 端口集合来测试它:
在 NFS 服务器上:
$ cd /export/shared/ports
$ du -hs .
2.6G .
$ find . | wc -l
179688
$ time rm -rf /export/shared/ports/*
0m20.87s real 0m00.12s user 0m04.62s system
Run Code Online (Sandbox Code Playgroud)
在客户端上(从备份恢复原始文件后):
$ time rm -rf /usr/ports/*
6m49.73s real 0m01.55s user 1m08.96s system
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1992 次 |
最近记录: |