将用户主文件夹存档到远程服务器,而不遵循符号链接?

将用户主文件夹存档到远程服务器,而不遵循符号链接?

当用户离开时,我们需要将用户的主文件夹一次性存档复制到存档服务器(等待最终删除),以防他们后来发现可能仍然需要某些文件(尽管我们当然非常强烈地这样做)鼓励他们在出发前自行备份可能仍需要的所有内容)。

我们一直在使用scp这个,但现在无意中被一位前用户诱骗,他安装了一些软件,这些软件在他们的一个文件夹中创建了一个不寻常的符号链接结构,这似乎导致 scp 向上查找,然后尝试复制在被阻止之前,超出了预期。

不幸的是,事实证明 scp 似乎总是遵循符号链接,并且似乎没有任何选项来阻止这种情况。

我正在寻找一种备份用户文件夹的替代方法,以避免此问题(理想情况下不会比绝对需要的更复杂)。

tar可能是一种可能性,但我有点担心在将其复制到存档服务器之前在本地创建 tarball 可能会使用大量的存储空间,并且如果我们的文件服务器在以下时间变得更满,可能会造成一些困难未来的某个时刻。

另一种可能性可能是使用rsync,但这对于一次性文件传输来说似乎可能太过了,而且我从以前的经验中知道,调整 rsync 自己的选项有时本身就很繁琐。

任何人都可以为此建议一个可靠且简单的 scp 替代方案吗?

答案1

如果您不喜欢tar临时文件,这很简单:不要使用临时文件。使用管道。

cd /home ; tar cf - user | gzip | ssh archivehost -l archiveuser 'cat > user.archived.tar.gz'

替代品xz或任何你喜欢的东西gzip。或者,如果节省主服务器上的 CPU 周期比节省网络带宽(以及存档服务器上的 CPU)更重要,则将其移至连接的另一端

cd /home ; tar cf - user | ssh archivehost -l archiveuser 'gzip > user.archived.tar.gz'

gpg也可以在那里贴一个。拥有一个专门用于这些档案的密钥对,在存储时使用公钥加密,在需要恢复某些内容时使用私钥。

根据要求提供更多详细信息:

我打算user成为您正在归档其主目录的用户/home/userarchivehost是您要存储存档的服务器,也是archiveuser存档服务器上拥有存档的帐户。

tar cf - user意思是“创建一个 tar 存档user并将其写入标准输出”。是-c“创建”,-f -是“使用 stdin/stdout 作为文件”。它可能会工作,tar c user因为-f -它可能是默认操作,但最初的默认操作是tar读取或写入磁带设备。使用显式-f -可能只是我老的标志。

tarz标志会很好,但我无法展示如何将其移动到 .tar 文件的另一侧ssh。 (另外,连接gziptar使用显式管道是那些“老人”的事情之一 -tar并不总是有这个选项。) 另外,我可以替换bzip2lzopxz -3v或任何其他压缩程序,而无需记住相应的tar选项。

--checkpoint以前从未听说过,所以你只能依靠自己的测试。

答案2

Rsync 是一个合理的选择。使用 rsync 进行一次性传输并没有什么问题。

Tar 也是一个合理的选择。您不需要将存档存储在本地,您可以直接通过管道连接到 SSH

另一种可能性是将服务器目录挂载到SSHFS。但是,请注意 SSHFS 不会保留所有元数据(例如权限)。 (Tar 和 rsync 可能也无法保留所有元数据,但它们可以做得更好——传递--acls --xattrs给 GNU tar,传递--acls --xattrs给 rsync。)

相关内容