如何模拟挂起的文件系统?
How to simulate a hanging filesystem?
我想验证应用程序在尝试从损坏的文件系统中读取时的行为(最值得注意的是:挂起的 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 服务器是 运行ning。
- 创建客户端挂载目录:
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
.
阻止网络接口来选择性地阻止客户端
我想验证应用程序在尝试从损坏的文件系统中读取时的行为(最值得注意的是:挂起的 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 服务器是 运行ning。
- 创建客户端挂载目录:
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
.