规避 CIFS/Samba 的限制

规避 CIFS/Samba 的限制

我的情况:我有一台通过 CIFS/Samba 提供共享服务的 NAS。它在内部使用 ext3 文件系统,但这无关紧要(我认为)。我有一些 Linux 计算机(使用 ext4 文件系统),我想在这些共享上进行备份。

我的问题:使用共享进行备份有两个主要问题。一方面,我无法将所有文件复制到 NAS,因为有些文件的文件名很长,CIFS 无法处理。另一方面,文件和目录权限无法正确复制。例如,共享上的每个文件都设置了所有“执行”位,而不管原始文件的权限如何。

我的问题:什么是最简单的方法可以避免这些“缺点”,以便我可以备份和恢复文件而无需手动处理文件名和权限?

关于我迄今为止的实验的一些附加信息:

  1. 我的第一个想法是只在共享上的(稀疏)文件中创建 ext4 文件系统,然后挂载这些文件并将它们用于实际备份。这里的缺点是从文件系统中删除文件不会减少共享上的 ext4“文件”的大小,并且文件系统的大小必须从一开始就受到限制。创建后调整它们的大小很麻烦。

  2. 我尝试使用加密文件系统因为我希望它能够以一种能够绕过 CIFS 限制的方式加密文件名和权限。但这行不通,因为文件名是加密的,但又被用作文件名(因此文件名只会变长,而不是变短)。此外,权限不会被 ecryptfs “隐藏”。加密文件只保留原始文件的权限,因此任何解密文件都会再次设置所有“执行”位。

  3. IRC 上的一位友好人士建议使用动态数量的大文件并将它们用作 LVM 的卷。我还没有测试过,但理论上应该可以。我将有一个带有 ext4 的逻辑卷,它将分布在共享上的多个文件中。如果我需要更多空间,我会创建更多文件并将它们添加到卷中,如果我使用的空间较少,我可以删除一些文件。这里唯一的缺点是我仍然必须执行调整大小(并定期检查实际需要多少空间)。回想起来,这比使用单个文件几乎没有优势,因为我可以截断/增加它们,然后调整 ext4 文件系统的大小。

  4. 我设想的是一个 FUSE,它将文件名和权限保存在数据库中,并且不依赖底层文件系统来支持所有内容。不幸的是,我还没有找到类似的东西。

答案1

带有 ecryptfs 的 Samba 似乎可以在 Ubuntu 14.04 上运行。

我使用了这个指南:http://www.cyberciti.biz/faq/adding-a-user-to-a-samba-smb-share/

我的直觉是,诀窍是在以下情况下输入相同的密码:

passwd USER

smbpasswd -a USER

我假设 ecryptfs 在将密码提供给 Samba 时会获取该密码,我很想听听关于这是如何发生的说明。

相关内容