使用以下命令将目录“home”(从远程计算机)复制到本地计算机:
ssh [email protected] 'tar -cz -C /home/*' | tar -zxv
交易后的文件数量不匹配。有些文件从未被复制过。
有谁遇到过类似的问题吗?
答案1
使用tar
复制文件的一个问题是旧 POSIX tar 格式 ( ustar
)存储硬链接的长度限制为 100 字节。它可以处理更长的名称,因此只要您的文件只有一个链接,一切就都正常。但是当 tar 第二次遇到 inode 时,它会生成一个硬链接记录,其中只有 100 个字节用于名称。如果名称太长,则第二个链接不会存储在存档中。
我确实记得 tar 实现丢弃了这些带有诊断消息的链接但仍然以状态 0 退出。也许你的 tar 甚至更糟并且默默地丢弃了它们。
这新的 POSIX tar 格式 ( pax
)没有这个限制。尝试使用pax
而不是tar
,或者tar
使用正确的选项。当前版本的 GNU tar 默认为 pax 格式,如果被告知生成ustar
名称不适合的存档,它会正确发出警告。
答案2
请使用 rsync。它更快、更安全。
rsync -avuz [email protected]:/home/ /srv/backups/home/
然后您就可以压缩数据。
tar cvzf /srv/backups/home_`date +%F`.tgz -C /srv/backups home