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將偽造的權限複製到目標檔案系統,它們實際上被用作真實的權限設置,從而導致了問題。

相關內容