桑巴打破硬链接 – 期望的行为?

我在Ubuntu 10.10 Server中使用Samba 2:3.5.4,并使用EXT4文件系统。

我已经在我的电脑上本地设置了一个文件夹“dev”,并使用“cp -alf”硬链接该文件夹到文件夹“test”。 所以在查看“test”文件夹时,它与“dev”文件夹的内容完全相同。

“testing”目前在networking上使用Samba共享。

如果我在本地文件系统的“testing”中更改文件。 更改反映在“dev”文件夹中(因为文件夹已链接)。 这是预期的。

当“testing”中的文件通过Samba共享进行修改时,硬链接被破坏。 也就是说,更改只适用于“testing”而不适用于“开发”。

通过Samba修改文件,它打破硬链接实际上是我们想要的。 我已经被问到(我找不到任何白皮书),是这样的:

  • 一个错误
  • 或按devise

危险是,如果这是一个错误,我们开始使用上述解决scheme,当错误得到修复时,我们的设置将不再起作用!

任何人有任何想法,

谢谢。

我无法专门针对Samba发表评论,但是经常使用的特定应用程序负责打破链接。 例如,一些编辑人员在保存更改时replace文件 – 而不是简单地覆盖它 – 这当然会破坏与文件相关的任何硬链接…所以,您的行为可能更多地是由于应用程序重新使用而不是桑巴。

这不是打破链接的桑巴行为。 拉尔斯克是正确的,你所描述的行为是特定于应用程序的。 应用程序将使用两种基本方法写入文件:方法“A”:简单地回写到原始文件。 方法“B”:遵循一个安全的algorithm:(1)写入临时文件; (2)如果成功的临时文件写入,然后用临时文件replace原始文件。 在方法“B”中写入临时文件当然会产生一个新的inode,而replace原始文件会破坏硬链接。

亲自查看:在samba共享上创build一个简单的text.txt文件以及相应的硬链接文件。 使用记事本或写字板编辑桑巴文件,你会看到inode仍然是一样的。 做同样的想法使用MS-Word,并find保存的文件得到一个新的inode,从而打破硬链接。 所以记事本和写字板使用方法“A”,而MS-Word使用方法“B”。 你可以进一步向自己certificate这不是通过使用安装在窗口中的本地ext3文件系统并运行相同的testing,而不是桑巴舞。