![rsync复制后文件数据丢失](https://linux22.com/image/154528/rsync%E5%A4%8D%E5%88%B6%E5%90%8E%E6%96%87%E4%BB%B6%E6%95%B0%E6%8D%AE%E4%B8%A2%E5%A4%B1.png)
我使用rsync -aPv source/ dest
.它没有输出错误消息,也没有返回失败状态,并一直进行到最后。它将每个文件复制source
到dest
,或者我是这么认为的。
问题是只有源目录根目录中的文件被正确复制,并且可以打开和使用。其余文件和目录已以某种方式损坏,并出现错误:
~/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
将伪造的权限复制到目标文件系统,它们实际上被用作真实的权限设置,从而导致了问题。