我有一个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
输出不错的mkdir
、cp
和ln
命令ln -s
。
该脚本强制使用 Time MachineBackups.backupdb
文件结构。它似乎对我来说,变成srcdb = os.path.join(srcbase, 'Backups.backupdb')
,srcdb = srcbase
也dstdb = os.path.join(dstbase, 'Backups.backupdb')
变成dstdb = dstbase
,可能使其可用于非 TM 源。
然后,它会处理源文件夹的每个子文件夹,每个子文件夹都应是计算机名称,是该计算机所有备份的根目录(通常只有一个,除非磁盘用于多台计算机)。在每个子文件夹中,它会处理除名为 或以 结尾的文件之外的所有内容.DS_Store
。Latest
但是.inProgress
:它确实不是期望源文件夹的子文件夹本身是硬链接。如果源文件夹中确实有硬链接,那么也许您可以使用额外的文件夹名称挂载磁盘。例如:使用/Volumes/my/mount
而不是/Volumes/mount
,然后timecopy
对源文件夹运行/Volumes/my
。
最后,它还会Latest
为最新的子文件夹创建一个名为 的符号链接,就像 Time Machine 磁盘一样。当然,您随后可以删除它。
然后您仍然可以执行--dry-run
,或者也许的输出--verbose --dry-run
可以帮助获取您可以以其他方式使用的脚本?