我怎样才能将一堆硬链接文件从 Linux 机器移动到我的 OS X Mac 上并保留这些硬链接?

我怎样才能将一堆硬链接文件从 Linux 机器移动到我的 OS X Mac 上并保留这些硬链接?

我有一个rsnapshot备份需要从损坏的 Linux 文件系统中移出。我需要保留内部硬链接。我尝试过rsync -H并使用更新的rsync并且不保留 OS X 上的硬链接。

我尝试让它rsync -H工作,并将其隔离到挂载的文件系统。我可以保留本地复制的硬链接(HFS 到 HFS),但当我尝试rsync从 SMB 文件系统挂载或 AFP 文件系统挂载中退出时,它不会保留。是否有一些挂载选项解决方案可以让 OS Xrsync服从-H

任何建议将不胜感激。

答案1

由于问题似乎是 OSX 的 rsync 无法识别和保留已挂载的 EXT2 源的硬链接,因此我成功地在源 Linux 机器上运行了一个 rsync 守护进程,并使用 Mac 上的 rsync 连接到该守护进程。这样似乎可以正确保留内部硬链接。

  • 要实现这一点,你需要在两台机器上安装 rsync,其中一台以守护进程模式运行。在我的情况下,它是源。

  • 您还需要编辑守护进程端的 rsyncd.conf 来定义作为源或目标的“模块”(“路径”的别名)。

  • 最后,使用非守护进程端的修改后的语法来引用守护进程:user@host::module。因此,从守护进程复制可以是:rsync -r user@host::module ~/foo

有关更多详细信息,请谷歌搜索“rsync”和/或“rsync daemon”

答案2

我当然希望有更简单的方法。不过,如果其他方法都失败了:

我从来没有用过它,但是Pythontimecopy脚本(适用于有缺陷的Time Machine 备份)可能会有所帮助。这是一个很长的脚本,但似乎不仅仅是因为 Time Machine 而那么长。尤其是它对有缺陷的磁盘对于损坏的文件系统也很有用。来自其网站

使用执行逐块复制的工具实际上会将文件系统错误复制到新磁盘,这根本没有用。需要的是一种使用传统文件复制将文件系统复制到新位置的方法。唯一的问题是 Time Machine 备份充满了硬链接,这些硬链接将显示为普通文件和目录,而执行简单的文件复制将导致大量磁盘空间浪费。

它支持一个--dry-run选项,并--verbose输出不错的mkdircpln命令ln -s

该脚本强制使用 Time MachineBackups.backupdb文件结构。它似乎对我来说,变成srcdb = os.path.join(srcbase, 'Backups.backupdb')srcdb = srcbasedstdb = os.path.join(dstbase, 'Backups.backupdb')变成dstdb = dstbase可能使其可用于非 TM 源。

然后,它会处理源文件夹的每个子文件夹,每个子文件夹都应是计算机名称,是该计算机所有备份的根目录(通常只有一个,除非磁盘用于多台计算机)。在每个子文件夹中,它会处理除名为 或以 结尾的文件之外的所有内容.DS_StoreLatest但是.inProgress:它确实不是期望源文件夹的子文件夹本身是硬链接。如果源文件夹中确实有硬链接,那么也许您可以使用额外的文件夹名称挂载磁盘。例如:使用/Volumes/my/mount而不是/Volumes/mount,然后timecopy对源文件夹运行/Volumes/my

最后,它还会Latest为最新的子文件夹创建一个名为 的符号链接,就像 Time Machine 磁盘一样。当然,您随后可以删除它。

然后您仍然可以执行--dry-run,或者也许的输出--verbose --dry-run可以帮助获取您可以以其他方式使用的脚本?

相关内容