linux - 如何模拟挂起的文件系统?
问题描述
我想验证应用程序在尝试从错误的文件系统中读取时的行为(最值得注意的是:挂起的 NFS 挂载,如果不检查,读取可能会永远挂起)。
有没有一种简单的方法可以在本地重现这种行为?如果我可以强制挂载不存在的东西,或者挂载本地 ram 磁盘并损坏它,或者将其锁定以使其挂起而不是出错,或者类似的东西,那就太好了。作为小型集成测试的一部分,这应该是我可以重复地做的事情。
解决方案
- 创建要导出的目录:
mkdir /tmp/nfs
- 配置目录,通过将行添加
/tmp/nfs *(sync,sync,ro,no_subtree_check,fsid=0468884e-fdab-11e9-8ee6-4b007bc13e45)
到/etc/exports
sudo exportfs -ra
- 确保 NFS 服务器正在运行。
- 创建客户端挂载的目录:
mkdir /tmp/hang
mount -t nfs -o vers=3 localhost:/tmp/nfs /tmp/hang
- 运行
ls /tmp/hang
- 一切都很好。 - 关闭 NFS 服务器。
- 运行
ls /tmp/hang
- 它会挂起。 - 再次运行 NFS 服务器。
- 命令将
ls
释放。
关闭 NFS 服务器的另一种方法是通过iptables
. 这样做的好处是您可以设置多个网络接口,通过不同的接口挂载多个客户端,然后通过使用iptables
.
推荐阅读
- excel - Amazon Redshift 身份验证问题
- unity3d - 即使游戏暂停且时间刻度设置为 0,协程仍会运行
- python - 如何使用 AWS CLI 旋转 EMR 集群进行测试
- ms-access-2010 - 将大文件上传到 Microsoft Access
- rust - 如何用 println 打印 syn::Expr 的内容?
- jquery - 刷新页面并在值更改时保存复选框的值
- sql - 使用子查询时求和大小写
- arrays - 检测字符串是否包含字符串数组的任何元素
- git - Git:删除`git branch`未列出的分支的本地副本
- sockets - 在持久连接中最好使用哪个循环?