我在 Ubuntu 10.10 Server 中使用 Samba 2:3.5.4 和 EXT4 文件系统。
我在我的电脑上本地设置了一个文件夹“dev”,并使用“cp -alf”将该文件夹硬链接到文件夹“test”。因此,查看“test”文件夹时,它的内容与“dev”文件夹完全相同。
“测试”当前在网络上使用 Samba 共享。
如果我更改本地文件系统上“test”中的文件。更改会反映在“dev”文件夹中(因为文件夹是链接的)。这是预期的。
当通过 Samba 共享修改“test”中的文件时,硬链接会断开。也就是说,更改仅适用于“test”,而不适用于“dev”。
通过 Samba 修改文件并破坏硬链接实际上是我们想要的。有人问我(但我找不到任何白皮书)是这样的:
- 一个错误
- 或按设计
危险在于,如果这是一个错误,而我们开始使用上述解决方案,那么当错误被修复后,我们的设置将不再起作用!
有人有什么想法吗,
谢谢。
答案1
我无法具体评论 Samba,但通常正在使用的特定应用程序会导致链接中断。例如,某些编辑器在保存更改时会替换文件(而不是简单地覆盖它),这当然会中断与该文件相关的任何硬链接...因此,您的行为可能更多地归因于您所使用的应用程序,而不是 Samba。
答案2
这不是 samba 破坏链接的行为。Larsks 的说法是正确的,您所描述的行为是特定于应用程序的。应用程序将使用两种基本方法写入文件:方法“A”:简单地写回原始文件。方法“B”:遵循安全算法:(1) 写入临时文件;(2) 如果成功写入临时文件,则用临时文件替换原始文件。在方法“B”中,写入临时文件当然会导致新的 inode,而替换原始文件会破坏硬链接。
亲自看看:在 Samba 共享上创建一个简单的 text.txt 文件以及相应的硬链接文件。使用记事本或写字板编辑 Samba 文件,您将看到 inode 仍然相同。使用 MS-Word 执行相同操作,发现保存的文件获得了新的 inode,从而破坏了硬链接。因此,记事本和写字板使用方法“A”,而 MS-Word 使用方法“B”。您可以通过使用安装在 Windows 中的本地 ext3 文件系统并运行相同的测试来进一步证明这不是 Samba。