我有一个文件系统,其中包含另一个文件系统的一系列带日期标记的存档备份。备份使用硬链接仅复制连续存档实例之间的增量。该驱动器有一些数据损坏,我正在努力更换它,但是某些文件已损坏并且未成功复制。我有损坏文件的其他副本可以用来恢复,但我不知道在硬链接结构中替换损坏文件的好方法。
01/01 02/01 03/01
-file1 >> -file1 x Added in 01/01, deleted by 03/01
-file2 >> -file2 >> -file2 Added in 01/01, never deleted
-file3 >> -file3 Added in 02/01, never deleted
在上述情况下,有一个数据存储file2
,其中有两个(或三个,具体取决于您的计数方式)硬链接。如果基本文件数据损坏,如何使用备份文件恢复file2
并保留其硬链接?
更多信息:
- 原始数据以文件夹结构存储在一台物理设备上。
- 备份/归档副本具有原始数据设备 (1.) 上保存的完整文件夹结构。它们在时间上是连续的,在备份设备上进行了重复数据删除和硬链接。
- 我要恢复的副本是第三个设备,用于存储备份设备的映像以进行长期冷存储。
- (2.) 中列出的备份设备上发生了错误。我希望在备份/存档的结构内从原始位置 (1.) 或冷存储设备 (3.) 恢复此备份设备上损坏的文件。
备份逻辑:
5.1.查找
<last backup folder>
设备上最后一个带日期/时间戳的备份文件夹(2.)5.2.
<new folder>
使用当前日期/时间戳创建新的空备份文件夹。5.3.在最后一个备份文件夹中制作文件的硬链接副本:
cp -al <last backup folder> <new folder>
5.4.将数据从 (1.) 复制
<source data>
到新的备份文件夹,覆盖在 (5.3.) 中创建的硬链接备份文件夹:rsync -azH --delete <source data> <new folder>
更新: 14/03/2017
尝试使用一个答案的建议后,无法就地替换目标处的损坏文件。显然,该位置的目标存在某种硬故障,替换数据需要转移到磁盘上的新物理位置。
答案1
使用rsync -azH --inplace
手册页中有许多关于此选项的警告:
- 到位
此选项更改 rsync 在需要更新文件数据时传输文件的方式:rsync 不是创建文件的新副本并在完成后将其移动到位的默认方法,而是将更新的数据直接写入目标文件。这有几个影响:
(1) 正在使用的二进制文件无法更新(操作系统将阻止这种情况发生,或者尝试换入其数据的二进制文件将出现异常或崩溃),
(2)文件的数据在传输过程中会处于不一致的状态,
(3) 如果传输中断或更新失败,文件数据可能会在传输后处于不一致状态,
(4) 没有写权限的文件不能被更新,并且
(5) 如果目标文件中的某些数据在复制到文件后面的位置之前被覆盖,则 rsync 的增量传输算法的效率可能会降低(一个例外是如果将此选项与 --backup 结合使用) ,因为 rsync 足够智能,可以使用备份文件作为传输的基础文件)。
警告:您不应使用此选项来更新其他人正在访问的文件,因此在选择使用此选项进行副本时要小心。此选项对于传输具有基于块的更改或附加数据的大文件以及磁盘绑定而非网络绑定的系统非常有用。
该选项意味着 --partial (因为中断的传输不会删除文件),但与 --partial-dir 和 --delay-updates 冲突。在 rsync 2.6.4 之前, --inplace 也与 --compare-dest 和 --link-dest 不兼容。