rsync复制后文件数据丢失

rsync复制后文件数据丢失

我使用rsync -aPv source/ dest.它没有输出错误消息,也没有返回失败状态,并一直进行到最后。它将每个文件复制sourcedest,或者我是这么认为的。

问题是只有源目录根目录中的文件被正确复制,并且可以打开和使用。其余文件和目录已以某种方式损坏,并出现错误:

~/Pictures $ cd Screenshots/
cd: Permission denied: “Screenshots/”
~/Pictures $ ls -l Screenshots/
ls: cannot access 'Screenshots/2016-05-02-23:11:15.png': Permission denied
ls: cannot access 'Screenshots/2015-08-07-17-26-33.png': Permission denied
ls: cannot access 'Screenshots/screenshot_2019-05-27_20-41-55_665836194.png': Permission denied
ls: cannot access 'Screenshots/screenshot_2019-05-05_23-17-16_571047883.png': Permission denied
...
total 0
-????????? ? ? ? ?                ? 2015-03-22-03-49-39.png
-????????? ? ? ? ?                ? 2015-04-03-20-17-31.png
-????????? ? ? ? ?                ? 2015-05-18-22-09-39.png
-????????? ? ? ? ?                ? 2015-08-07-17-26-33.png
...

我可以使用某些文件管理器访问这些目录(我尝试了 PCManFM;ranger 不起作用),它显示文件已损坏,无法使用指定的默认程序打开(例如用于图像的 qimgv,用于视频的 mpv)。

我不确定这个问题是否只损坏了文件或目录,导致无法访问实际内容但可能仍然存在,或者元数据可能已损坏(它们大多是 JPG 和 PNG 文件)。我如何恢复对这些文件及其内容的访问?

答案1

输出与尝试列出x缺少权限位的目录时得到的输出完全相同。

以下是如何重现这种情况的示例:

$ cd /tmp
$ mkdir dirperms
$ cd dirperms
$ touch foo bar baz
$ mkdir zot
$ cd ..
$ chmod a-x dirperms
$ cd dirperms
bash: cd: dirperms: Permission denied
$ ls -l dirperms
ls: cannot access 'dirperms/baz': Permission denied
ls: cannot access 'dirperms/bar': Permission denied
ls: cannot access 'dirperms/foo': Permission denied
ls: cannot access 'dirperms/zot': Permission denied
total 0
-????????? ? ? ? ?            ? bar
-????????? ? ? ? ?            ? baz
-????????? ? ? ? ?            ? foo
d????????? ? ? ? ?            ? zot/

所以,使用testdisk可能有点矫枉过正;您可以简单Screenshots地使用chmod -R u+X Screenshots.

权限错误的根本原因可能是原始源文件系统可能是不支持 Unix 风格权限的文件系统,因此文件系统驱动程序报告的权限(为了 POSIX 兼容性)与实际情况不符驱动程序实际上允许rsync访问。因此,rsync将伪造的权限复制到目标文件系统,它们实际上被用作真实的权限设置,从而导致了问题。

相关内容