我知道从两个不同的服务器(它是一个 iSCSI vloume)安装具有 ext4 文件系统的同一磁盘可能会损坏磁盘上的数据。我的问题是如果其中一台服务器以只读方式安装磁盘,而另一台服务器以读写方式安装磁盘,会有什么区别吗?
我知道 OCFS2 或类似的东西可以用于此目的,并且我可以使用 NFS 导出磁盘以便其他服务器可以访问,但我想知道我建议的设置是否有效。
答案1
不会。由于缓存的原因,它不会在只读客户端上提供一致的结果。它绝对不是为此而设计的。您可能会看到 IO 错误返回到应用程序。代码中可能仍然存在一些疏忽,这可能会导致内核崩溃或损坏任何进程使用的内存。
但最重要的是,ext4 即使在只读挂载上也会重放日志。因此,只读挂载仍会写入底层块设备。即使两个都坐骑是只读的:)。
答案2
这将避免数据损坏,但可能不是您想要做的。我从未注意到在另一个节点上以只读方式安装卷时出现任何问题。即使 ro 节点上的某些内容不匹配,通常也会在 /var/log/messages 中抛出“意外的空闲 inode,请运行 e2fsck”或类似内容。如果非关键文件系统(“/opt/mySpecialmount”)出现严重意外情况,Linux 通常只会以只读方式挂载该卷(嘿,我们已经在那里了)。如果您非常担心缓存会产生什么影响,您可以尝试使用某种 drop_caches/vfs_cache_Pressure 机制。
为了避免重播日志,请在挂载参数中添加“noload”,并与errors=remount-ro一起执行(只是为了谨慎起见)。
也就是说,如果您同意以只读方式安装它,它可能只是作为其他节点的参考,在这种情况下,NFS 或 smbfs 可以解决该问题,并且设计为比 ext3/ 具有更高的并发性4 会是。如果您需要性能,那么您可以考虑集群文件系统(管理开销稍多,但如果性能确实是您需要的,那么它就在那里)。