Rsync

rsync 複製後文件數據失去

  • June 7, 2019

我使用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 文件)。如何恢復對這些文件及其內容的訪問?

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將虛假權限複製到目標文件系統,在那裡它們實際上被用作真正的權限設置,從而導致了問題。

引用自:https://unix.stackexchange.com/questions/522042