是否可以从两台主机(一台只读)装入同一张ext4磁盘?


17

我知道,从两个不同的服务器(这是iSCSI vloume)通过ext4文件系统安装同一磁盘可能会损坏磁盘上的数据。我的问题是,如果其中一台服务器以只读方式安装磁盘,而另一台服务器以读写方式安装磁盘,这会有所不同吗?

我知道OCFS2等可用于此目的,并且我可以将NFS导出的磁盘导出到其他服务器,但我想知道我建议的设置是否可以工作。


1
仅当两个都挂载为只读时,它才可以工作(这意味着不写的是真正的只读)。一旦一侧以读写方式安装,另一侧(以只读方式安装)就不会期望另一侧(以读写方式安装)发生更改,因此它会读取损坏的数据。您需要的是支持群集的文件系统,或者是一个将网络文件系统公开给另一个服务器的服务器。
弗罗斯特斯2013年

@frostschutz是的,这两个ro都可以工作,但不是没有窍门,因为ext4的ro-mount确实会写入实际磁盘(每个需要ro循环和overlayfs)。
Ned64

我将在这里共享一个用例:物理服务器和虚拟服务器通过磁盘直通共享物理磁盘。虚拟服务器将磁盘安装为rw。我想从磁盘复制大量数据,但是网络速度太慢。如果可以在主机操作系统中将物理磁盘安装为ro并将数据复制到外部USB驱动器,那就太好了。主机服务器只有一个USB控制器,因此不能选择PCI直通。
卓卓玮

Answers:


26

不会。由于缓存,它不会在只读客户端上提供一致的结果。它绝对不是为此设计的。您可能希望看到IO错误返回给应用程序。代码中可能仍然存在一些疏漏,可能导致内核崩溃或任何进程使用的内存损坏。

但最重要的是,即使在只读安装上,ext4也会重播日志。因此,只读安装仍将写入基础块设备。即使两个安装都是只读的:) 也将是不安全的。


5
如您所说,以只读方式挂载并不能保证文件系统不会被更改。如果您仍想尝试“教育”目的而又不冒险,则应将设备设置为只读:blockdev --setro /dev/sda1
Totor

关于ext4安装的有趣信息。我想可以通过强制ext2只读挂载来避免此问题?
Bananguin

1
我发现这个代码片断这让我在虚拟机中安装一个只读的块设备:sudo mount -t ext4 -o ro,loop,noload /dev/vda /mnt/ digital-forensics.sans.org/blog/2011/06/14/...
isaaclw

0

这样可以避免数据损坏,但可能不会成为您想要做的事情。我从未注意到将卷只读安装在另一个节点上的任何问题。即使通常在ro节点上不匹配的东西通常会在“ / var / log / messages”中抛出“意外的空闲inode,请运行e2fsck”或类似内容。如果对于非关键文件系统(“ / opt / mySpecialmount”)出乎意料的意外,通常Linux只会将卷装载为只读(嘿,我们已经在那儿了)。如果您非常担心缓存的影响,可以尝试使用某种drop_caches / vfs_cache_pressure机制。

为避免重播日志,请在安装参数args中添加“ noload”,并附带errors = remount-ro(只是为了谨慎起见而已)。

也就是说,如果您可以只读方式安装它,则很有可能将其作为其他节点的参考,在这种情况下,NFS或smbfs将解决此问题,并且其并发性比ext3 / 4将是。如果需要性能,则可以考虑使用集群文件系统(管理开销较小,但是如果确实需要性能,就可以在这里找到)。


1
这将避免数据损坏 ”:可能不会,请参阅sourcejedi的回答和我的评论
Totor

1
“跳过日志重播将导致文件系统包含可能导致许多问题的不一致之处”- man mount。我可以想象有一些应用程序可以检测和/或容忍其文件中的数据不一致,但是到目前为止您还没有提到任何警告:)。
sourcejedi 2013年

@sourcejedi他们之所以这么说,是因为他们试图告诉人们有效地搁置该期刊的风险。没关系,因为假设另一个节点将为另一个节点执行日志工作,所以我们只是在尝试避免重复工作。我们在其中一台开发服务器上执行此操作(不是我的选择,我会执行NFS),并且在没有一年的时间里即使没有drop_caches挂载了该东西也没有任何问题。我们俩都提到过时的FS缓存条目可以呈现旧数据,但是最终要由管理员来决定这是否可行。
布莱奇利2013年

我不会尝试列举以上评论中的所有错误。但是作为一个数据点,它不仅仅是关于VFS缓存中的陈旧文件数据。ext4也将具有文件系统内部数据结构(“元数据”)的缓存。您最终可能会从已删除的文件中读取数据,随后又被新文件覆盖。这是您真正想提前知道的警告,即使这种情况很少发生。
sourcejedi 2013年

1
回顾您的评论,我认为您可能正在尝试引用块级缓存,这是内存中块设备I / O的缓存。在这种情况下,它不缓存发生在元数据本身,它的高速缓存元数据本身。它也存在于任何文件系统驱动程序之外,因此ext4 / btrfs / etc没有任何管理。
布莱奇利2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.