我知道,从两个不同的服务器(这是iSCSI vloume)通过ext4文件系统安装同一磁盘可能会损坏磁盘上的数据。我的问题是,如果其中一台服务器以只读方式安装磁盘,而另一台服务器以读写方式安装磁盘,这会有所不同吗?
我知道OCFS2等可用于此目的,并且我可以将NFS导出的磁盘导出到其他服务器,但我想知道我建议的设置是否可以工作。
我知道,从两个不同的服务器(这是iSCSI vloume)通过ext4文件系统安装同一磁盘可能会损坏磁盘上的数据。我的问题是,如果其中一台服务器以只读方式安装磁盘,而另一台服务器以读写方式安装磁盘,这会有所不同吗?
我知道OCFS2等可用于此目的,并且我可以将NFS导出的磁盘导出到其他服务器,但我想知道我建议的设置是否可以工作。
Answers:
不会。由于缓存,它不会在只读客户端上提供一致的结果。它绝对不是为此设计的。您可能希望看到IO错误返回给应用程序。代码中可能仍然存在一些疏漏,可能导致内核崩溃或任何进程使用的内存损坏。
但最重要的是,即使在只读安装上,ext4也会重播日志。因此,只读安装仍将写入基础块设备。即使两个安装都是只读的:) 也将是不安全的。
blockdev --setro /dev/sda1
。
sudo mount -t ext4 -o ro,loop,noload /dev/vda /mnt/
digital-forensics.sans.org/blog/2011/06/14/...
这样可以避免数据损坏,但可能不会成为您想要做的事情。我从未注意到将卷只读安装在另一个节点上的任何问题。即使通常在ro节点上不匹配的东西通常会在“ / var / log / messages”中抛出“意外的空闲inode,请运行e2fsck”或类似内容。如果对于非关键文件系统(“ / opt / mySpecialmount”)出乎意料的意外,通常Linux只会将卷装载为只读(嘿,我们已经在那儿了)。如果您非常担心缓存的影响,可以尝试使用某种drop_caches / vfs_cache_pressure机制。
为避免重播日志,请在安装参数args中添加“ noload”,并附带errors = remount-ro(只是为了谨慎起见而已)。
也就是说,如果您可以只读方式安装它,则很有可能将其作为其他节点的参考,在这种情况下,NFS或smbfs将解决此问题,并且其并发性比ext3 / 4将是。如果需要性能,则可以考虑使用集群文件系统(管理开销较小,但是如果确实需要性能,就可以在这里找到)。
man mount
。我可以想象有一些应用程序可以检测和/或容忍其文件中的数据不一致,但是到目前为止您还没有提到任何警告:)。